UNPKG

@mbc-cqrs-serverless/ui-setting

Version:
142 lines 6.35 kB
"use strict"; 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