@tomei/customer-base
Version:
Tomei Customer Base Package
83 lines • 3.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomerBaseSyncService = void 0;
const sequelize_1 = require("sequelize");
const customer_base_writer_1 = require("../customer-base-writer/customer-base-writer");
const sync_logger_1 = require("../sync-logger/sync-logger");
const registered_system_enum_1 = require("../../enum/registered-system.enum");
const models_1 = require("../../models");
const database_1 = require("../../database");
class CustomerBaseSyncService {
writer;
syncLogger;
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?.message,
});
throw err;
}
}
getWriter() {
if (!this.writer) {
const seq = (0, database_1.getConnection)();
if (!seq) {
throw new Error('CustomerBase DB not initialized on the system yet.');
}
this.writer = new customer_base_writer_1.CustomerBaseWriter(seq);
}
return this.writer;
}
async sync(customer, triggeredBy, eventType, dbTransaction) {
const ctx = {
CustomerId: customer.CustomerId,
SourceSystemCode: customer.getSourceSystemCode(),
TriggeredBy: triggeredBy,
EventType: eventType,
};
try {
const writer = this.getWriter();
const syncLogger = new sync_logger_1.SyncLogger();
const addr = customer.getAddress?.();
const payload = {
...customer.getSyncPayload(),
Address: addr ? [addr] : [],
};
await writer.write(payload, dbTransaction);
const targetSystemCodes = await this.getTargetSystems(ctx.SourceSystemCode);
await syncLogger.logSyncTargets({
CustomerId: ctx.CustomerId,
SourceSystemCode: ctx.SourceSystemCode,
TargetSystemCodes: targetSystemCodes,
TriggeredBy: triggeredBy,
EventType: eventType,
dbTransaction,
});
}
catch (err) {
console.error('[CustomerBaseSyncService.sync] failed', {
...ctx,
error: err?.message,
});
throw err;
}
}
}
exports.CustomerBaseSyncService = CustomerBaseSyncService;
//# sourceMappingURL=customer-base-sync-service.js.map