@mbc-cqrs-serverless/ui-setting
Version:
Setting master data
142 lines • 6.35 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var SettingService_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SettingService = void 0;
const core_1 = require("@mbc-cqrs-serverless/core");
const common_1 = require("@nestjs/common");
const path_1 = require("path");
const setting_command_dto_1 = require("../dto/setting-command.dto");
const setting_data_entity_1 = require("../entities/setting-data.entity");
const setting_data_list_entity_1 = require("../entities/setting-data-list.entity");
const helpers_1 = require("../helpers");
let SettingService = SettingService_1 = class SettingService {
constructor(commandService, dataService) {
this.commandService = commandService;
this.dataService = dataService;
this.logger = new common_1.Logger(SettingService_1.name);
}
async list(tenantCode) {
const pk = (0, helpers_1.generateSettingPk)(tenantCode);
const query = {
sk: {
skExpession: 'begins_with(sk, :settingPrefix)',
skAttributeValues: {
':settingPrefix': `${helpers_1.SETTING_SK_PREFIX}${core_1.KEY_SEPARATOR}`,
},
},
limit: 100,
};
const res = await this.dataService.listItemsByPk(pk, query);
return new setting_data_list_entity_1.SettingDataListEntity(res);
}
async get(key) {
const res = await this.dataService.getItem(key);
return new setting_data_entity_1.SettingDataEntity(res);
}
async create(tenantCode, createDto, opts) {
const validField = this.isValidFields(createDto.attributes.fields);
if (!validField) {
throw new common_1.BadRequestException('Physical name of fields must not duplicate');
}
const pk = (0, helpers_1.generateSettingPk)(tenantCode);
const sk = (0, helpers_1.generateSettingSk)(createDto.code);
const setting = await this.dataService.getItem({ pk, sk });
if (setting && setting.isDeleted == false) {
throw new common_1.BadRequestException('Setting code is exist!');
}
const id = (0, core_1.generateId)(pk, sk);
const createCmd = new setting_command_dto_1.SettingCommandDto({
id,
pk,
sk,
version: setting?.version ?? core_1.VERSION_FIRST,
type: helpers_1.MASTER_PK_PREFIX,
tenantCode,
isDeleted: false,
...createDto,
});
const item = await this.commandService.publish(createCmd, {
source: (0, core_1.getCommandSource)((0, path_1.basename)(__dirname), this.constructor.name, 'createSetting'),
invokeContext: opts.invokeContext,
});
return new setting_data_entity_1.SettingDataEntity(item);
}
async update(key, updateDto, opts) {
const data = (await this.dataService.getItem(key));
if (!data) {
throw new common_1.NotFoundException();
}
const validField = this.isValidFields(updateDto?.attributes?.fields ?? []);
if (!validField) {
throw new common_1.BadRequestException('Physical name of fields must not duplicate');
}
const updateCmd = {
id: data.id,
pk: data.pk,
sk: data.sk,
version: data.version,
code: data.code,
type: data.type,
tenantCode: data.tenantCode,
name: updateDto.name ?? data.name,
isDeleted: updateDto.isDelete ?? data.isDeleted,
attributes: {
fields: updateDto?.attributes?.fields ?? data.attributes.fields,
description: updateDto?.attributes?.description ?? data.attributes.description,
},
};
const item = await this.commandService.publish(updateCmd, {
source: (0, core_1.getCommandSource)((0, path_1.basename)(__dirname), this.constructor.name, 'updateSetting'),
invokeContext: opts.invokeContext,
});
return new setting_data_entity_1.SettingDataEntity(item);
}
async delete(key, opts) {
const data = (await this.dataService.getItem(key));
if (!data) {
throw new common_1.NotFoundException();
}
if (data.isDeleted) {
throw new common_1.BadRequestException('This setting is already delete!');
}
const deleteCmd = {
...data,
isDeleted: true,
};
const item = await this.commandService.publish(deleteCmd, {
source: (0, core_1.getCommandSource)((0, path_1.basename)(__dirname), this.constructor.name, 'deleteSetting'),
invokeContext: opts.invokeContext,
});
return new setting_data_entity_1.SettingDataEntity(item);
}
async checkExistSettingCode(tenantCode, code) {
const pk = (0, helpers_1.generateSettingPk)(tenantCode);
const sk = (0, helpers_1.generateSettingSk)(code);
const item = (await this.dataService.getItem({
pk,
sk,
}));
return !!item && !item.isDeleted;
}
isValidFields(fields) {
const set = new Set();
fields.forEach((field) => set.add(field.physicalName));
return set.size === fields.length;
}
};
exports.SettingService = SettingService;
exports.SettingService = SettingService = SettingService_1 = __decorate([
(0, common_1.Injectable)(),
__metadata("design:paramtypes", [core_1.CommandService,
core_1.DataService])
], SettingService);
//# sourceMappingURL=setting.service.js.map