@tomei/customer-base
Version:
Tomei Customer Base Package
61 lines • 2.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomerBaseSyncService = void 0;
const sequelize_1 = require("sequelize");
const registered_system_enum_1 = require("../../enum/registered-system.enum");
const models_1 = require("../../models");
class CustomerBaseSyncService {
constructor(writer, syncLogger) {
this.writer = writer;
this.syncLogger = syncLogger;
}
async getTargetSystems(sourceSystemCode) {
try {
const systems = await models_1.CustomerRegisteredSystemModel.findAll({
where: {
IsActiveYN: registered_system_enum_1.IsSystemActiveEnum.Y,
WantsSyncYN: registered_system_enum_1.IsSystemWantsSyncEnum.Y,
SystemCode: { [sequelize_1.Op.not]: sourceSystemCode },
},
attributes: ['SystemCode'],
});
return systems.map((s) => s.SystemCode);
}
catch (err) {
console.error('[CustomerBaseSyncService.getTargetSystems] failed', {
sourceSystemCode,
error: err === null || err === void 0 ? void 0 : err.message,
});
throw err;
}
}
async sync(customer, triggeredBy, eventType, dbTransaction) {
var _a;
const ctx = {
CustomerId: customer.CustomerId,
SourceSystemCode: customer.getSourceSystemCode(),
TriggeredBy: triggeredBy,
EventType: eventType,
};
try {
const addr = (_a = customer.getAddress) === null || _a === void 0 ? void 0 : _a.call(customer);
const payload = Object.assign(Object.assign({}, customer.getSyncPayload()), { Address: addr ? [addr] : [] });
await this.writer.write(payload, dbTransaction);
const targetSystemCodes = await this.getTargetSystems(ctx.SourceSystemCode);
await this.syncLogger.logSyncTargets({
CustomerId: ctx.CustomerId,
SourceSystemCode: ctx.SourceSystemCode,
TargetSystemCodes: targetSystemCodes,
TriggeredBy: triggeredBy,
EventType: eventType,
dbTransaction,
});
}
catch (err) {
console.error('[CustomerBaseSyncService.sync] failed', Object.assign(Object.assign({}, ctx), { error: err === null || err === void 0 ? void 0 : err.message }));
throw err;
}
}
}
exports.CustomerBaseSyncService = CustomerBaseSyncService;
//# sourceMappingURL=customer-base-sync-service.js.map