UNPKG

cnpmcore

Version:
98 lines 9.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModelConvertor = void 0; const orm_1 = require("@eggjs/tegg/orm"); const lodash_1 = __importDefault(require("lodash")); const ModelConvertorUtil_1 = require("./ModelConvertorUtil"); const CREATED_AT = 'createdAt'; const UPDATED_AT = 'updatedAt'; const ID = 'id'; class ModelConvertor { static async convertEntityToModel(entity, ModelClazz, options) { const metadata = orm_1.ModelMetadataUtil.getModelMetadata(ModelClazz); if (!metadata) { throw new Error(`Model ${ModelClazz.name} has no metadata`); } const attributes = {}; for (const attributeMeta of metadata.attributes) { const modelPropertyName = attributeMeta.propertyName; const entityPropertyName = ModelConvertorUtil_1.ModelConvertorUtil.getEntityPropertyName(ModelClazz, modelPropertyName); if (entityPropertyName === UPDATED_AT || entityPropertyName === CREATED_AT || entityPropertyName === ID) continue; const attributeValue = lodash_1.default.get(entity, entityPropertyName); attributes[modelPropertyName] = attributeValue; } const model = await ModelClazz.create(attributes, options); // auto set entity id to model id entity[ID] = model[ID]; // use model dates entity[UPDATED_AT] = model[UPDATED_AT]; entity[CREATED_AT] = model[CREATED_AT]; return model; } static convertEntityToChanges(entity, ModelClazz) { const changes = {}; const metadata = orm_1.ModelMetadataUtil.getModelMetadata(ModelClazz); if (!metadata) { throw new Error(`Model ${ModelClazz.name} has no metadata`); } for (const attributeMeta of metadata.attributes) { const modelPropertyName = attributeMeta.propertyName; const entityPropertyName = ModelConvertorUtil_1.ModelConvertorUtil.getEntityPropertyName(ModelClazz, modelPropertyName); if (entityPropertyName === CREATED_AT) continue; const attributeValue = lodash_1.default.get(entity, entityPropertyName); changes[modelPropertyName] = attributeValue; } changes[UPDATED_AT] = new Date(); entity[UPDATED_AT] = changes[UPDATED_AT]; return changes; } // TODO: options is QueryOptions, should let leoric export it to use // Find out which attributes changed and set `updatedAt` to now static async saveEntityToModel(entity, model, options) { const ModelClazz = model.constructor; const metadata = orm_1.ModelMetadataUtil.getModelMetadata(ModelClazz); if (!metadata) { throw new Error(`Model ${ModelClazz.name} has no metadata`); } for (const attributeMeta of metadata.attributes) { const modelPropertyName = attributeMeta.propertyName; const entityPropertyName = ModelConvertorUtil_1.ModelConvertorUtil.getEntityPropertyName(ModelClazz, modelPropertyName); if (entityPropertyName === CREATED_AT) continue; // Restricted updates to the primary key if (entityPropertyName === ID && model[ID]) continue; const attributeValue = lodash_1.default.get(entity, entityPropertyName); model[modelPropertyName] = attributeValue; } // Restricted updates to the UPDATED_AT // Leoric will set by default model[UPDATED_AT] = undefined; await model.save(options); entity[UPDATED_AT] = model[UPDATED_AT]; return true; } static convertModelToEntity(bone, entityClazz, data) { data = data || {}; const ModelClazz = bone.constructor; const metadata = orm_1.ModelMetadataUtil.getModelMetadata(ModelClazz); if (!metadata) { throw new Error(`Model ${ModelClazz.name} has no metadata`); } for (const attributeMeta of metadata.attributes) { const modelPropertyName = attributeMeta.propertyName; const entityPropertyName = ModelConvertorUtil_1.ModelConvertorUtil.getEntityPropertyName(ModelClazz, modelPropertyName); const attributeValue = bone[attributeMeta.propertyName]; lodash_1.default.set(data, entityPropertyName, attributeValue); } const model = Reflect.construct(entityClazz, [data]); return model; } } exports.ModelConvertor = ModelConvertor; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxDb252ZXJ0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvcmVwb3NpdG9yeS91dGlsL01vZGVsQ29udmVydG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHlDQUFvRDtBQUdwRCxvREFBdUI7QUFDdkIsNkRBQTBEO0FBRTFELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQztBQUMvQixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBS2hCLE1BQWEsY0FBYztJQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUF5QixNQUFjLEVBQUUsVUFBZ0MsRUFBRSxPQUFnQjtRQUMxSCxNQUFNLFFBQVEsR0FBRyx1QkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLFVBQVUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUM7U0FDN0Q7UUFDRCxNQUFNLFVBQVUsR0FBNEIsRUFBRSxDQUFDO1FBQy9DLEtBQUssTUFBTSxhQUFhLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUMvQyxNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7WUFDckQsTUFBTSxrQkFBa0IsR0FBRyx1Q0FBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNuRyxJQUFJLGtCQUFrQixLQUFLLFVBQVUsSUFBSSxrQkFBa0IsS0FBSyxVQUFVLElBQUksa0JBQWtCLEtBQUssRUFBRTtnQkFBRSxTQUFTO1lBQ2xILE1BQU0sY0FBYyxHQUFHLGdCQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3pELFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGNBQWMs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