UNPKG

@tomei/customer-base

Version:

Tomei Customer Base Package

83 lines 3.17 kB
"use strict"; 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