cnpmcore
Version:
98 lines • 9.37 kB
JavaScript
;
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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