@lyxa.ai/core 1.3.144 → 1.3.146
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/libraries/event/EventEnums.d.ts +2 -1
- package/dist/libraries/event/EventEnums.js +1 -0
- package/dist/libraries/event/EventEnums.js.map +1 -1
- package/dist/libraries/event/decorators/subscribe.d.ts +2 -1
- package/dist/libraries/event/decorators/subscribe.js +2 -2
- package/dist/libraries/event/decorators/subscribe.js.map +1 -1
- package/dist/libraries/event/events/mongo-stream-changes-batch-process-shops-event.d.ts +2 -1
- package/dist/libraries/event/events/mongo-stream-changes-batch-process-shops-event.js +1 -0
- package/dist/libraries/event/events/mongo-stream-changes-batch-process-shops-event.js.map +1 -1
- package/dist/libraries/event/events/sync-all-customized-shop-sections-cache-event.d.ts +8 -0
- package/dist/libraries/event/events/sync-all-customized-shop-sections-cache-event.js +14 -0
- package/dist/libraries/event/events/sync-all-customized-shop-sections-cache-event.js.map +1 -0
- package/dist/libraries/event/index.d.ts +5 -1
- package/dist/libraries/event/index.js +46 -15
- package/dist/libraries/event/index.js.map +1 -1
- package/dist/libraries/event/registry/SubscriptionRegistry.d.ts +3 -1
- package/dist/libraries/event/registry/SubscriptionRegistry.js +2 -1
- package/dist/libraries/event/registry/SubscriptionRegistry.js.map +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/dist/utilities/events-common-methods.d.ts +2 -0
- package/dist/utilities/events-common-methods.js +6 -0
- package/dist/utilities/events-common-methods.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -155,7 +155,7 @@ async function registerLibraries(options) {
|
|
|
155
155
|
await (0, event_1.initEventBus)(rabbitmq_environments_1.RabbitMQUrlMap[options?.environment ?? EnvironmentConfigurationType_1.EnvironmentConfigurationType.DEV]);
|
|
156
156
|
const allSubscriptions = SubscriptionRegistry_1.SubscriptionRegistry.getAllSubscriptions();
|
|
157
157
|
const instantiatedServices = new Map();
|
|
158
|
-
for (const { eventId, targetConstructor, methodName } of allSubscriptions) {
|
|
158
|
+
for (const { eventId, targetConstructor, methodName, opts } of allSubscriptions) {
|
|
159
159
|
let instance = instantiatedServices.get(targetConstructor);
|
|
160
160
|
if (!instance) {
|
|
161
161
|
instance = typedi_1.Container.get(targetConstructor);
|
|
@@ -163,7 +163,7 @@ async function registerLibraries(options) {
|
|
|
163
163
|
}
|
|
164
164
|
await (0, event_1.subscribeToEvent)(eventId, async (payload) => {
|
|
165
165
|
return instance[methodName](payload);
|
|
166
|
-
});
|
|
166
|
+
}, opts);
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
function getLibraries() {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// Apply the soft delete plugin globally before any connections or models\nimport { applySoftDeletePlugin } from './libraries/mongo/plugins/soft-delete-plugin';\napplySoftDeletePlugin();\n\nimport { LibraryManager } from './libraries';\nimport { Container } from 'typedi';\nimport { ConfigurationOptions, ConfigurationService } from './libraries/configuration';\nimport { LyxaLogger } from './libraries/logger';\nimport { RedisService } from './libraries/redis';\nimport { initGlobalConnection, initLyxaMongoDbConnection } from './libraries/mongo';\nimport { SecretManagerService } from './libraries/secrets';\nimport { MicroServiceDispatcher } from './libraries/dispatcher';\nimport { TwilioService } from './libraries/twilio';\nimport { FirebaseService } from './libraries/firebase';\nimport { initEventBus, subscribeToEvent } from './libraries/event';\nimport { SubscriptionRegistry } from './libraries/event/registry/SubscriptionRegistry';\nimport { GoogleMapsService, MapService } from './libraries/map';\nimport { CachedSettingsService } from './libraries/cache/settings';\nimport {\n\tFCMService,\n\tFCMServiceForRider,\n\tFCMServiceForShop,\n\tFCMServiceForUser,\n} from './libraries/firebase/fcmService';\nimport { BullMQService } from './libraries/bullmq/bull-mq-service';\nimport { BOBSecrets, BOBService, CashSettlementService } from './libraries/cash-settlement';\nimport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nimport { OsrmMapService } from './libraries/map/providers/osrm';\nimport { RabbitMQUrlMap } from './utilities/environment/rabbitmq-environments';\nimport { disconnectAllEntitiesFromInstance } from './libraries/socket/connections/instance-disconnect';\nimport { LyxaLoggerKit } from './libraries/logger-kit';\n\n\n\nexport { ConfigurationOptions } from './libraries/configuration';\nexport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nexport { initGlobalConnection } from './libraries/mongo';\n\nexport async function bootstrapCore(options?: ConfigurationOptions) {\n\ttry {\n\t\tawait registerLibraries(options);\n\n\t\tgetLibraries().getLogger().logger.info('Successfully bootstrapped lyxa-core.');\n\n\t\tconst gracefulShutdown = async () => {\n\t\t\tgetLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\n\t\t\tif (options?.instanceType == 'socket') await disconnectAllEntitiesFromInstance();\n\t\t\tprocess.exit();\n\t\t};\n\n\t\tprocess.on('SIGTERM', gracefulShutdown);\n\t\tprocess.on('SIGINT', gracefulShutdown);\n\t\tprocess.on('uncaughtException', err => {\n\t\t\tconsole.log('err', err);\n\t\t\tgetLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\n\t\t\tgracefulShutdown();\n\t\t});\n\t\tprocess.on('exit', code => {\n\t\t\tgetLibraries().getLogger().logger.info(`Exiting with code: ${code}`);\n\t\t});\n\n\t\tconsole.log('Created hooks.');\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n}\n\nexport async function registerLibraries(options?: ConfigurationOptions) {\n\t// Setup configuration.\n\tconst configurationInstance = new ConfigurationService(options);\n\tContainer.set(ConfigurationService, configurationInstance);\n\n\t// Setup redis.\n\tconst redisInstance = new RedisService(configurationInstance.redisURL);\n\tContainer.set(RedisService, redisInstance);\n\n\t// Setup secret\n\tconst secretInstance = new SecretManagerService(configurationInstance, redisInstance);\n\tContainer.set(SecretManagerService, secretInstance);\n\n\t// Setup BullMQ\n\tconst bullMQInstance = new BullMQService(redisInstance);\n\tContainer.set(BullMQService, bullMQInstance);\n\n\tconst mongoUrl = options?.mongoDbUrl\n\t\t? options.mongoDbUrl\n\t\t: await getLibraries().getSecretsService().getKey('MONGO_URL');\n\n\tawait initLyxaMongoDbConnection(mongoUrl!, options);\n\tawait initGlobalConnection(mongoUrl!, options!.environment);\n\n\tconst loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\n\tContainer.set(LyxaLogger, loggerInstance);\n\n\tconst loggerKit = new LyxaLoggerKit({ instanceType: options!.instanceType! });\n\tContainer.set(LyxaLoggerKit, loggerKit);\n\t\n\t// Setup firebase\n\tconst firebaseInstance = new FirebaseService(configurationInstance!);\n\tContainer.set(FirebaseService, firebaseInstance);\n\n\t// Setup microservice dispatcher\n\tconst microserviceDispatcherInstance = new MicroServiceDispatcher(secretInstance);\n\tContainer.set(MicroServiceDispatcher, microserviceDispatcherInstance);\n\n\t// Setup twilio\n\tconst twilioServiceInstance = new TwilioService();\n\tContainer.set(TwilioService, twilioServiceInstance);\n\n\t// Setup map service\n\tconst googleMapsKey = await getLibraries().getSecretsService().getKey('GOOGLE_MAPS_API_KEY');\n\tconst googleMapService = new GoogleMapsService(redisInstance, googleMapsKey as string);\n\tconst osrmMapService = new OsrmMapService();\n\tconst mapServiceInstance = new MapService(googleMapService, osrmMapService);\n\tContainer.set(MapService, mapServiceInstance);\n\n\t// Setup cash settlement service\n\tconst bobUsername = await getLibraries().getSecretsService().getKey('BOB_USER_NAME');\n\tconst bobPassword = await getLibraries().getSecretsService().getKey('BOB_PASSWORD');\n\tconst bobURL = await getLibraries().getSecretsService().getKey('BOB_URL');\n\n\tconst bobService = new BOBService({\n\t\tBOB_USER_NAME: bobUsername,\n\t\tBOB_PASSWORD: bobPassword,\n\t\tBOB_URL: bobURL,\n\t} as BOBSecrets);\n\tconst cashSettlementServiceInstance = new CashSettlementService(bobService);\n\tContainer.set(CashSettlementService, cashSettlementServiceInstance);\n\tContainer.set(BOBService, bobService);\n\n\tconst settingsServiceInstance = new CachedSettingsService(redisInstance);\n\tContainer.set(CachedSettingsService, settingsServiceInstance);\n\n\ttry {\n\t\tconst settings = await settingsServiceInstance.getSettings();\n\t\tconst { _setTimezone } = await import('./utilities/dayjs/dayjs');\n\t\t_setTimezone(settings?.timezone || 'Asia/Beirut');\n\t\tconsole.log('Timezone initialized:', settings?.timezone || 'Asia/Beirut');\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize timezone:', error);\n\t}\n\n\t// Setup fcm service\n\tconst firebaseService = getLibraries().getFirebaseService();\n\tconst fcmServiceInstance = new FCMService(firebaseService.superApp);\n\tconst fcmServiceInstanceForUser = new FCMService(firebaseService.userApp);\n\tconst fcmServiceInstanceForRider = new FCMService(firebaseService.riderApp);\n\tconst fcmServiceInstanceForShop = new FCMService(firebaseService.shopApp);\n\tContainer.set(FCMService, fcmServiceInstance);\n\tContainer.set(FCMServiceForUser, fcmServiceInstanceForUser);\n\tContainer.set(FCMServiceForRider, fcmServiceInstanceForRider);\n\tContainer.set(FCMServiceForShop, fcmServiceInstanceForShop);\n\n\tconsole.log('Initialized everything');\n\n\tawait initEventBus(RabbitMQUrlMap[options?.environment ?? EnvironmentConfigurationType.DEV]);\n\n\tconst allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\n\n\tconst instantiatedServices = new Map<Function, any>();\n\n\tfor (const { eventId, targetConstructor, methodName } of allSubscriptions) {\n\t\tlet instance = instantiatedServices.get(targetConstructor);\n\t\tif (!instance) {\n\t\t\tinstance = Container.get(targetConstructor as any);\n\t\t\tinstantiatedServices.set(targetConstructor, instance);\n\t\t}\n\n\t\tawait subscribeToEvent(eventId, async payload => {\n\t\t\treturn instance[methodName](payload);\n\t\t});\n\t}\n}\n\nexport function getLibraries(): LibraryManager {\n\treturn Container.get(LibraryManager);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// Apply the soft delete plugin globally before any connections or models\nimport { applySoftDeletePlugin } from './libraries/mongo/plugins/soft-delete-plugin';\napplySoftDeletePlugin();\nimport { LibraryManager } from './libraries';\nimport { Container } from 'typedi';\nimport { ConfigurationOptions, ConfigurationService } from './libraries/configuration';\nimport { LyxaLogger } from './libraries/logger';\nimport { RedisService } from './libraries/redis';\nimport { initGlobalConnection, initLyxaMongoDbConnection } from './libraries/mongo';\nimport { SecretManagerService } from './libraries/secrets';\nimport { MicroServiceDispatcher } from './libraries/dispatcher';\nimport { TwilioService } from './libraries/twilio';\nimport { FirebaseService } from './libraries/firebase';\nimport { initEventBus, subscribeToEvent } from './libraries/event';\nimport { SubscriptionRegistry } from './libraries/event/registry/SubscriptionRegistry';\nimport { GoogleMapsService, MapService } from './libraries/map';\nimport { CachedSettingsService } from './libraries/cache/settings';\nimport {\n\tFCMService,\n\tFCMServiceForRider,\n\tFCMServiceForShop,\n\tFCMServiceForUser,\n} from './libraries/firebase/fcmService';\nimport { BullMQService } from './libraries/bullmq/bull-mq-service';\nimport { BOBSecrets, BOBService, CashSettlementService } from './libraries/cash-settlement';\nimport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nimport { OsrmMapService } from './libraries/map/providers/osrm';\nimport { RabbitMQUrlMap } from './utilities/environment/rabbitmq-environments';\nimport { disconnectAllEntitiesFromInstance } from './libraries/socket/connections/instance-disconnect';\nimport { LyxaLoggerKit } from './libraries/logger-kit';\n\n\n\nexport { ConfigurationOptions } from './libraries/configuration';\nexport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nexport { initGlobalConnection } from './libraries/mongo';\n\nexport async function bootstrapCore(options?: ConfigurationOptions) {\n\ttry {\n\t\tawait registerLibraries(options);\n\n\t\tgetLibraries().getLogger().logger.info('Successfully bootstrapped lyxa-core.');\n\n\t\tconst gracefulShutdown = async () => {\n\t\t\tgetLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\n\t\t\tif (options?.instanceType == 'socket') await disconnectAllEntitiesFromInstance();\n\t\t\tprocess.exit();\n\t\t};\n\n\t\tprocess.on('SIGTERM', gracefulShutdown);\n\t\tprocess.on('SIGINT', gracefulShutdown);\n\t\tprocess.on('uncaughtException', err => {\n\t\t\tconsole.log('err', err);\n\t\t\tgetLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\n\t\t\tgracefulShutdown();\n\t\t});\n\t\tprocess.on('exit', code => {\n\t\t\tgetLibraries().getLogger().logger.info(`Exiting with code: ${code}`);\n\t\t});\n\n\t\tconsole.log('Created hooks.');\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n}\n\nexport async function registerLibraries(options?: ConfigurationOptions) {\n\t// Setup configuration.\n\tconst configurationInstance = new ConfigurationService(options);\n\tContainer.set(ConfigurationService, configurationInstance);\n\n\t// Setup redis.\n\tconst redisInstance = new RedisService(configurationInstance.redisURL);\n\tContainer.set(RedisService, redisInstance);\n\n\t// Setup secret\n\tconst secretInstance = new SecretManagerService(configurationInstance, redisInstance);\n\tContainer.set(SecretManagerService, secretInstance);\n\n\t// Setup BullMQ\n\tconst bullMQInstance = new BullMQService(redisInstance);\n\tContainer.set(BullMQService, bullMQInstance);\n\n\tconst mongoUrl = options?.mongoDbUrl\n\t\t? options.mongoDbUrl\n\t\t: await getLibraries().getSecretsService().getKey('MONGO_URL');\n\n\tawait initLyxaMongoDbConnection(mongoUrl!, options);\n\tawait initGlobalConnection(mongoUrl!, options!.environment);\n\n\tconst loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\n\tContainer.set(LyxaLogger, loggerInstance);\n\n\tconst loggerKit = new LyxaLoggerKit({ instanceType: options!.instanceType! });\n\tContainer.set(LyxaLoggerKit, loggerKit);\n\t\n\t// Setup firebase\n\tconst firebaseInstance = new FirebaseService(configurationInstance!);\n\tContainer.set(FirebaseService, firebaseInstance);\n\n\t// Setup microservice dispatcher\n\tconst microserviceDispatcherInstance = new MicroServiceDispatcher(secretInstance);\n\tContainer.set(MicroServiceDispatcher, microserviceDispatcherInstance);\n\n\t// Setup twilio\n\tconst twilioServiceInstance = new TwilioService();\n\tContainer.set(TwilioService, twilioServiceInstance);\n\n\t// Setup map service\n\tconst googleMapsKey = await getLibraries().getSecretsService().getKey('GOOGLE_MAPS_API_KEY');\n\tconst googleMapService = new GoogleMapsService(redisInstance, googleMapsKey as string);\n\tconst osrmMapService = new OsrmMapService();\n\tconst mapServiceInstance = new MapService(googleMapService, osrmMapService);\n\tContainer.set(MapService, mapServiceInstance);\n\n\t// Setup cash settlement service\n\tconst bobUsername = await getLibraries().getSecretsService().getKey('BOB_USER_NAME');\n\tconst bobPassword = await getLibraries().getSecretsService().getKey('BOB_PASSWORD');\n\tconst bobURL = await getLibraries().getSecretsService().getKey('BOB_URL');\n\n\tconst bobService = new BOBService({\n\t\tBOB_USER_NAME: bobUsername,\n\t\tBOB_PASSWORD: bobPassword,\n\t\tBOB_URL: bobURL,\n\t} as BOBSecrets);\n\tconst cashSettlementServiceInstance = new CashSettlementService(bobService);\n\tContainer.set(CashSettlementService, cashSettlementServiceInstance);\n\tContainer.set(BOBService, bobService);\n\n\tconst settingsServiceInstance = new CachedSettingsService(redisInstance);\n\tContainer.set(CachedSettingsService, settingsServiceInstance);\n\n\ttry {\n\t\tconst settings = await settingsServiceInstance.getSettings();\n\t\tconst { _setTimezone } = await import('./utilities/dayjs/dayjs');\n\t\t_setTimezone(settings?.timezone || 'Asia/Beirut');\n\t\tconsole.log('Timezone initialized:', settings?.timezone || 'Asia/Beirut');\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize timezone:', error);\n\t}\n\n\t// Setup fcm service\n\tconst firebaseService = getLibraries().getFirebaseService();\n\tconst fcmServiceInstance = new FCMService(firebaseService.superApp);\n\tconst fcmServiceInstanceForUser = new FCMService(firebaseService.userApp);\n\tconst fcmServiceInstanceForRider = new FCMService(firebaseService.riderApp);\n\tconst fcmServiceInstanceForShop = new FCMService(firebaseService.shopApp);\n\tContainer.set(FCMService, fcmServiceInstance);\n\tContainer.set(FCMServiceForUser, fcmServiceInstanceForUser);\n\tContainer.set(FCMServiceForRider, fcmServiceInstanceForRider);\n\tContainer.set(FCMServiceForShop, fcmServiceInstanceForShop);\n\n\tconsole.log('Initialized everything');\n\n\tawait initEventBus(RabbitMQUrlMap[options?.environment ?? EnvironmentConfigurationType.DEV]);\n\n\tconst allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\n\n\tconst instantiatedServices = new Map<Function, any>();\n\n\tfor (const { eventId, targetConstructor, methodName, opts } of allSubscriptions) {\n\t\tlet instance = instantiatedServices.get(targetConstructor);\n\t\tif (!instance) {\n\t\t\tinstance = Container.get(targetConstructor as any);\n\t\t\tinstantiatedServices.set(targetConstructor, instance);\n\t\t}\n\n\t\tawait subscribeToEvent(\n\t\t\teventId,\n\t\t\tasync payload => {\n\t\t\t\treturn instance[methodName](payload);\n\t\t\t},\n\t\t\topts\n\t\t);\n\t}\n}\n\nexport function getLibraries(): LibraryManager {\n\treturn Container.get(LibraryManager);\n}\n"]}
|
|
@@ -12,5 +12,6 @@ export declare enum PublishEventEnums {
|
|
|
12
12
|
SYNC_ALL_SHOPS_AVG_PREPARATION_TIME_EVENT = "sync_all_shops_avg_preperation_time_event",
|
|
13
13
|
SYNC_SINGLE_SHOP_CACHE_EVENT = "sync_single_shop_cache_event",
|
|
14
14
|
SYNC_SINGLE_SHOP_ORDER_AGAIN_CACHE_EVENT = "sync_single_shop_order_again_cache_event",
|
|
15
|
-
SYNC_SINGLE_SHOP_SECTIONS_CACHE_EVENT = "sync_single_shop_sections_cache_event"
|
|
15
|
+
SYNC_SINGLE_SHOP_SECTIONS_CACHE_EVENT = "sync_single_shop_sections_cache_event",
|
|
16
|
+
SYNC_ALL_CUSTOMIZED_SHOP_SECTIONS_CACHE_EVENT = "sync_all_customized_shop_sections_cache_event"
|
|
16
17
|
}
|
|
@@ -17,5 +17,6 @@ var PublishEventEnums;
|
|
|
17
17
|
PublishEventEnums["SYNC_SINGLE_SHOP_CACHE_EVENT"] = "sync_single_shop_cache_event";
|
|
18
18
|
PublishEventEnums["SYNC_SINGLE_SHOP_ORDER_AGAIN_CACHE_EVENT"] = "sync_single_shop_order_again_cache_event";
|
|
19
19
|
PublishEventEnums["SYNC_SINGLE_SHOP_SECTIONS_CACHE_EVENT"] = "sync_single_shop_sections_cache_event";
|
|
20
|
+
PublishEventEnums["SYNC_ALL_CUSTOMIZED_SHOP_SECTIONS_CACHE_EVENT"] = "sync_all_customized_shop_sections_cache_event";
|
|
20
21
|
})(PublishEventEnums || (exports.PublishEventEnums = PublishEventEnums = {}));
|
|
21
22
|
//# sourceMappingURL=EventEnums.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventEnums.js","sourceRoot":"/","sources":["libraries/event/EventEnums.ts"],"names":[],"mappings":";;;AAAA,IAAY,
|
|
1
|
+
{"version":3,"file":"EventEnums.js","sourceRoot":"/","sources":["libraries/event/EventEnums.ts"],"names":[],"mappings":";;;AAAA,IAAY,iBAgBX;AAhBD,WAAY,iBAAiB;IAC5B,4EAAuD,CAAA;IACvD,sEAAiD,CAAA;IACjD,4EAAuD,CAAA;IACvD,sEAAiD,CAAA;IACjD,wGAAmF,CAAA;IACnF,sHAAiG,CAAA;IACjG,oGAA+E,CAAA;IAC/E,sFAAiE,CAAA;IACjE,8FAAyE,CAAA;IACzE,sHAAiG,CAAA;IACjG,4GAAuF,CAAA;IACvF,kFAA6D,CAAA;IAC7D,0GAAqF,CAAA;IACrF,oGAA+E,CAAA;IAC/E,oHAA+F,CAAA;AAChG,CAAC,EAhBW,iBAAiB,iCAAjB,iBAAiB,QAgB5B","sourcesContent":["export enum PublishEventEnums {\n\tADMIN_ACTIVITY_LOGS_EVENT = 'admin_activity_logs_event',\n\tMESSAGE_RECEIVED_EVENT = 'message_received_event',\n\tTICKET_NOTIFICATION_EVENT = 'ticket_notification_event',\n\tCART_ITEM_UPSERT_EVENT = 'cart_item_upsert_event',\n\tSHOP_ACTIVE_TIMINGS_BATCH_PROCESS_EVENT = 'shop_active_timings_batch_process_event',\n\tMONGO_STREAM_CHANGES_BATCH_PROCESS_SHOPS_EVENT = 'mongo_stream_changes_batch_process_shops_event',\n\tBULK_UPDATE_SHOPS_SEARCH_FIELDS_EVENT = 'bulk_update_shops_search_fields_event',\n\tSOCKET_PUSH_NOTIFICATION_EVENT = 'socket_push_notification_event',\n\tBULK_UPDATE_SHOP_ZONE_STATUS_EVENT = 'bulk_update_shop_zone_status_event',\n\tSYNC_ALL_PRODUCTS_PRODUCT_MARKETING_INFO_EVENT = 'sync_all_products_product_marketing_info_event',\n\tSYNC_ALL_SHOPS_AVG_PREPARATION_TIME_EVENT = 'sync_all_shops_avg_preperation_time_event',\n\tSYNC_SINGLE_SHOP_CACHE_EVENT = 'sync_single_shop_cache_event',\n\tSYNC_SINGLE_SHOP_ORDER_AGAIN_CACHE_EVENT = 'sync_single_shop_order_again_cache_event',\n\tSYNC_SINGLE_SHOP_SECTIONS_CACHE_EVENT = 'sync_single_shop_sections_cache_event',\n\tSYNC_ALL_CUSTOMIZED_SHOP_SECTIONS_CACHE_EVENT = 'sync_all_customized_shop_sections_cache_event'\n}\n \n"]}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { RabbitMQEventOptions } from '../index';
|
|
2
|
+
export declare function Subscribe(eventId: string, opts?: RabbitMQEventOptions): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Subscribe = Subscribe;
|
|
4
4
|
const SubscriptionRegistry_1 = require("../registry/SubscriptionRegistry");
|
|
5
|
-
function Subscribe(eventId) {
|
|
5
|
+
function Subscribe(eventId, opts) {
|
|
6
6
|
return function (target, propertyKey, descriptor) {
|
|
7
|
-
SubscriptionRegistry_1.SubscriptionRegistry.register(eventId, target.constructor, propertyKey);
|
|
7
|
+
SubscriptionRegistry_1.SubscriptionRegistry.register(eventId, target.constructor, propertyKey, opts);
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=subscribe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe.js","sourceRoot":"/","sources":["libraries/event/decorators/subscribe.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"subscribe.js","sourceRoot":"/","sources":["libraries/event/decorators/subscribe.ts"],"names":[],"mappings":";;AAGA,8BAIC;AAPD,2EAAwE;AAGxE,SAAgB,SAAS,CAAC,OAAe,EAAE,IAA2B;IACrE,OAAO,UAAU,MAAW,EAAE,WAAmB,EAAE,UAA8B;QAChF,2CAAoB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC,CAAC;AACH,CAAC","sourcesContent":["import { SubscriptionRegistry } from '../registry/SubscriptionRegistry';\nimport { RabbitMQEventOptions } from '../index';\n\nexport function Subscribe(eventId: string, opts?: RabbitMQEventOptions) {\n\treturn function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n\t\tSubscriptionRegistry.register(eventId, target.constructor, propertyKey, opts);\n\t};\n}\n"]}
|
|
@@ -12,7 +12,8 @@ export declare enum UpdateCollectionAtlasSearchEnum {
|
|
|
12
12
|
TAGS = "tags",
|
|
13
13
|
BRANDS = "brands",
|
|
14
14
|
PRODUCTS = "products",
|
|
15
|
-
CATEGORIES = "categories"
|
|
15
|
+
CATEGORIES = "categories",
|
|
16
|
+
USER_APP_SECTION_SETTING = "userAppSectionSetting"
|
|
16
17
|
}
|
|
17
18
|
declare const MongoStreamsBatchProcessShopsSchema: z.ZodObject<{
|
|
18
19
|
operation: z.ZodNativeEnum<typeof ChangeStreamOperationTypes>;
|
|
@@ -19,6 +19,7 @@ var UpdateCollectionAtlasSearchEnum;
|
|
|
19
19
|
UpdateCollectionAtlasSearchEnum["BRANDS"] = "brands";
|
|
20
20
|
UpdateCollectionAtlasSearchEnum["PRODUCTS"] = "products";
|
|
21
21
|
UpdateCollectionAtlasSearchEnum["CATEGORIES"] = "categories";
|
|
22
|
+
UpdateCollectionAtlasSearchEnum["USER_APP_SECTION_SETTING"] = "userAppSectionSetting";
|
|
22
23
|
})(UpdateCollectionAtlasSearchEnum || (exports.UpdateCollectionAtlasSearchEnum = UpdateCollectionAtlasSearchEnum = {}));
|
|
23
24
|
const baseFields = {
|
|
24
25
|
operation: global_validation_1.ZodValidation.enumType(ChangeStreamOperationTypes, 'Mongo streams operation'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo-stream-changes-batch-process-shops-event.js","sourceRoot":"/","sources":["libraries/event/events/mongo-stream-changes-batch-process-shops-event.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,4CAAyC;AACzC,8CAAkD;AAClD,uFAA0G;AAE1G,IAAY,0BAKX;AALD,WAAY,0BAA0B;
|
|
1
|
+
{"version":3,"file":"mongo-stream-changes-batch-process-shops-event.js","sourceRoot":"/","sources":["libraries/event/events/mongo-stream-changes-batch-process-shops-event.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,4CAAyC;AACzC,8CAAkD;AAClD,uFAA0G;AAE1G,IAAY,0BAKX;AALD,WAAY,0BAA0B;IAClC,+CAAiB,CAAA;IACjB,+CAAiB,CAAA;IACjB,iDAAmB,CAAA;IACnB,+CAAiB,CAAA;AACrB,CAAC,EALW,0BAA0B,0CAA1B,0BAA0B,QAKrC;AAED,IAAY,+BAOX;AAPD,WAAY,+BAA+B;IACvC,kDAAe,CAAA;IACf,gDAAa,CAAA;IACb,oDAAiB,CAAA;IACjB,wDAAqB,CAAA;IACrB,4DAAyB,CAAA;IACzB,qFAAkD,CAAA;AACtD,CAAC,EAPW,+BAA+B,+CAA/B,+BAA+B,QAO1C;AAED,MAAM,UAAU,GAAG;IACf,SAAS,EAAE,iCAAa,CAAC,QAAQ,CAAC,0BAA0B,EAAE,yBAAyB,CAAC;IACxF,gBAAgB,EAAE,iCAAa,CAAC,QAAQ,CAAC,+BAA+B,EAAE,oBAAoB,CAAC;IAC/F,aAAa,EAAE,OAAC,CAAC,GAAG,EAAE;IACtB,YAAY,EAAE,OAAC,CAAC,GAAG,EAAE;CACxB,CAAC;AACF,MAAM,aAAa,GAAG,IAAA,uCAAmB,EAAC,UAAU,CAAC,CAAC;AACtD,MAAM,EACF,UAAU,EAAE,mCAAmC,GAClD,GAAG,aAAa,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAIrD,MAAa,kCAAmC,SAAQ,qBAAkC;IACtF,YAAY,OAAyC;QACjD,KAAK,CAAC,8BAAiB,CAAC,8CAA8C,EAAE,OAAkC,CAAC,CAAC;IAChH,CAAC;CACJ;AAJD,gFAIC","sourcesContent":["import { z } from 'zod';\nimport { BaseEvent } from '../BaseEvent';\nimport { PublishEventEnums } from '../EventEnums';\nimport { createSchemaBuilder, DTO, ZodValidation } from '../../../utilities/validation/global-validation';\n\nexport enum ChangeStreamOperationTypes {\n INSERT = \"insert\",\n UPDATE = \"update\",\n REPLACE = \"replace\",\n DELETE = \"delete\"\n}\n\nexport enum UpdateCollectionAtlasSearchEnum {\n SHOPS = 'shops',\n TAGS = 'tags',\n BRANDS = 'brands',\n PRODUCTS = 'products',\n CATEGORIES = 'categories',\n USER_APP_SECTION_SETTING = 'userAppSectionSetting'\n}\n\nconst baseFields = {\n operation: ZodValidation.enumType(ChangeStreamOperationTypes, 'Mongo streams operation'),\n updateCollection: ZodValidation.enumType(UpdateCollectionAtlasSearchEnum, 'Updated collection'),\n updatedFields: z.any(),\n fullDocument: z.any()\n};\nconst schemaBuilder = createSchemaBuilder(baseFields);\nconst {\n BaseSchema: MongoStreamsBatchProcessShopsSchema,\n} = schemaBuilder.getAllSchemas({ createdAt: true });\n\nexport type MongoStreamsBatchProcessShopsDTO = DTO<typeof MongoStreamsBatchProcessShopsSchema>;\n\nexport class MongoStreamsBatchProcessShopsEvent extends BaseEvent<Record<string, unknown>> {\n constructor(payload: MongoStreamsBatchProcessShopsDTO) {\n super(PublishEventEnums.MONGO_STREAM_CHANGES_BATCH_PROCESS_SHOPS_EVENT, payload as Record<string, unknown>);\n }\n}"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { BaseEvent } from '../BaseEvent';
|
|
3
|
+
import { DTO } from '../../../utilities/validation/global-validation';
|
|
4
|
+
export declare const SynchronizeAllCustomizedShopSectionsCacheSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
5
|
+
export type SynchronizeAllCustomizedShopSectionsCacheDTO = DTO<typeof SynchronizeAllCustomizedShopSectionsCacheSchema>;
|
|
6
|
+
export declare class SynchronizeAllCustomizedShopSectionsCacheEvent extends BaseEvent<Record<string, unknown>> {
|
|
7
|
+
constructor(payload: SynchronizeAllCustomizedShopSectionsCacheDTO);
|
|
8
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SynchronizeAllCustomizedShopSectionsCacheEvent = exports.SynchronizeAllCustomizedShopSectionsCacheSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const BaseEvent_1 = require("../BaseEvent");
|
|
6
|
+
const EventEnums_1 = require("../EventEnums");
|
|
7
|
+
exports.SynchronizeAllCustomizedShopSectionsCacheSchema = zod_1.z.object({});
|
|
8
|
+
class SynchronizeAllCustomizedShopSectionsCacheEvent extends BaseEvent_1.BaseEvent {
|
|
9
|
+
constructor(payload) {
|
|
10
|
+
super(EventEnums_1.PublishEventEnums.SYNC_ALL_CUSTOMIZED_SHOP_SECTIONS_CACHE_EVENT, payload);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.SynchronizeAllCustomizedShopSectionsCacheEvent = SynchronizeAllCustomizedShopSectionsCacheEvent;
|
|
14
|
+
//# sourceMappingURL=sync-all-customized-shop-sections-cache-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-all-customized-shop-sections-cache-event.js","sourceRoot":"/","sources":["libraries/event/events/sync-all-customized-shop-sections-cache-event.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,4CAAyC;AACzC,8CAAkD;AAGrC,QAAA,+CAA+C,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAI3E,MAAa,8CAA+C,SAAQ,qBAAkC;IAClG,YAAY,OAAqD;QAC7D,KAAK,CAAC,8BAAiB,CAAC,6CAA6C,EAAE,OAAkC,CAAC,CAAC;IAC/G,CAAC;CACJ;AAJD,wGAIC","sourcesContent":["import { z } from 'zod';\nimport { BaseEvent } from '../BaseEvent';\nimport { PublishEventEnums } from '../EventEnums';\nimport { DTO } from '../../../utilities/validation/global-validation';\n\nexport const SynchronizeAllCustomizedShopSectionsCacheSchema = z.object({})\n \nexport type SynchronizeAllCustomizedShopSectionsCacheDTO = DTO<typeof SynchronizeAllCustomizedShopSectionsCacheSchema>;\n\nexport class SynchronizeAllCustomizedShopSectionsCacheEvent extends BaseEvent<Record<string, unknown>> {\n constructor(payload: SynchronizeAllCustomizedShopSectionsCacheDTO) {\n super(PublishEventEnums.SYNC_ALL_CUSTOMIZED_SHOP_SECTIONS_CACHE_EVENT, payload as Record<string, unknown>);\n }\n}"]}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import amqp from 'amqplib';
|
|
2
2
|
import { BaseEvent } from './BaseEvent';
|
|
3
|
+
export interface RabbitMQEventOptions {
|
|
4
|
+
consumeImmediately?: boolean;
|
|
5
|
+
}
|
|
3
6
|
export declare const EXCHANGE_NAME = "lyxa.events";
|
|
4
7
|
export declare const INSTANCE_ROUTE_PREFIX = "instance";
|
|
5
8
|
export declare function initEventBus(rabbitUrl: string): Promise<void>;
|
|
@@ -8,5 +11,6 @@ export declare function getChannel(): {
|
|
|
8
11
|
subChannel: amqp.Channel;
|
|
9
12
|
};
|
|
10
13
|
export declare function publishEvent<TPayload extends Record<string, unknown>>(event: BaseEvent<TPayload>): Promise<void>;
|
|
11
|
-
export declare function subscribeToEvent(eventId: string, onMessage: (payload: any) => Promise<void
|
|
14
|
+
export declare function subscribeToEvent(eventId: string, onMessage: (payload: any) => Promise<void>, opts?: RabbitMQEventOptions): Promise<void>;
|
|
15
|
+
export declare function consumeAllMessages<T>(queueName: string): Promise<T[]>;
|
|
12
16
|
export declare function closeEventBus(): Promise<void>;
|
|
@@ -8,9 +8,12 @@ exports.initEventBus = initEventBus;
|
|
|
8
8
|
exports.getChannel = getChannel;
|
|
9
9
|
exports.publishEvent = publishEvent;
|
|
10
10
|
exports.subscribeToEvent = subscribeToEvent;
|
|
11
|
+
exports.consumeAllMessages = consumeAllMessages;
|
|
11
12
|
exports.closeEventBus = closeEventBus;
|
|
12
13
|
const amqplib_1 = __importDefault(require("amqplib"));
|
|
13
14
|
const instance_utils_1 = require("../../utilities/instance.utils");
|
|
15
|
+
const index_1 = require("../../index");
|
|
16
|
+
const enum_1 = require("../../utilities/enum");
|
|
14
17
|
let connection;
|
|
15
18
|
let pubChannel;
|
|
16
19
|
let subChannel;
|
|
@@ -45,7 +48,7 @@ async function publishEvent(event) {
|
|
|
45
48
|
});
|
|
46
49
|
await ch.waitForConfirms();
|
|
47
50
|
}
|
|
48
|
-
async function subscribeToEvent(eventId, onMessage) {
|
|
51
|
+
async function subscribeToEvent(eventId, onMessage, opts) {
|
|
49
52
|
const ch = getChannel().subChannel;
|
|
50
53
|
const queueName = `${eventId}`;
|
|
51
54
|
await ch.assertQueue(queueName, {
|
|
@@ -54,26 +57,54 @@ async function subscribeToEvent(eventId, onMessage) {
|
|
|
54
57
|
autoDelete: false,
|
|
55
58
|
});
|
|
56
59
|
await ch.bindQueue(queueName, exports.EXCHANGE_NAME, eventId);
|
|
57
|
-
|
|
60
|
+
if (opts?.consumeImmediately !== false) {
|
|
61
|
+
await ch.consume(queueName, async (msg) => {
|
|
62
|
+
if (!msg)
|
|
63
|
+
return;
|
|
64
|
+
let processed = false;
|
|
65
|
+
try {
|
|
66
|
+
const payload = JSON.parse(msg.content.toString());
|
|
67
|
+
await onMessage(payload);
|
|
68
|
+
processed = true;
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
console.error(`Error handling event [${eventId}]`, err);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
if (processed)
|
|
75
|
+
ch.ack(msg);
|
|
76
|
+
else
|
|
77
|
+
ch.nack(msg, false, true);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
console.log(`Subscribed to event [${eventId}]`);
|
|
82
|
+
}
|
|
83
|
+
async function consumeAllMessages(queueName) {
|
|
84
|
+
const logger = (0, index_1.getLibraries)().getLoggerKit();
|
|
85
|
+
const ch = getChannel().subChannel;
|
|
86
|
+
const messages = [];
|
|
87
|
+
while (true) {
|
|
88
|
+
const msg = await ch.get(queueName, { noAck: false });
|
|
58
89
|
if (!msg)
|
|
59
|
-
|
|
60
|
-
let processed = false;
|
|
90
|
+
break;
|
|
61
91
|
try {
|
|
62
92
|
const payload = JSON.parse(msg.content.toString());
|
|
63
|
-
|
|
64
|
-
|
|
93
|
+
messages.push(payload);
|
|
94
|
+
ch.ack(msg);
|
|
95
|
+
logger.debug(`Message consumed successfully for event ${queueName}`, {
|
|
96
|
+
tag: enum_1.LogTag.INFRA_QUEUE,
|
|
97
|
+
});
|
|
65
98
|
}
|
|
66
99
|
catch (err) {
|
|
67
|
-
|
|
100
|
+
logger.error(`Error processing message for event ${queueName}:`, err, {
|
|
101
|
+
tag: enum_1.LogTag.INFRA_QUEUE,
|
|
102
|
+
});
|
|
103
|
+
ch.nack(msg, false, true);
|
|
68
104
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
else
|
|
73
|
-
ch.nack(msg, false, true);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
console.log(`Subscribed to event [${eventId}]`);
|
|
105
|
+
}
|
|
106
|
+
logger.debug(`Fetched ${messages.length} messages for event ${queueName}`, { tag: enum_1.LogTag.INFRA_QUEUE });
|
|
107
|
+
return messages;
|
|
77
108
|
}
|
|
78
109
|
async function closeEventBus() {
|
|
79
110
|
if (pubChannel)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/event/index.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/event/index.ts"],"names":[],"mappings":"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","sourcesContent":["import amqp from 'amqplib';\nimport { BaseEvent } from './BaseEvent';\nimport { getInstanceId } from '../../utilities/instance.utils';\nimport { getLibraries } from '../../index';\nimport { LogTag } from '../../utilities/enum';\n\nlet connection: amqp.ChannelModel;\nlet pubChannel: amqp.ConfirmChannel;\nlet subChannel: amqp.Channel;\n\nexport interface RabbitMQEventOptions {\n\tconsumeImmediately?: boolean;\n}\n\nexport const EXCHANGE_NAME = 'lyxa.events';\nexport const INSTANCE_ROUTE_PREFIX = 'instance'; // routing key: instance.{instanceName}.{eventType}\n\nexport async function initEventBus(rabbitUrl: string) {\n\tconnection = await amqp.connect(rabbitUrl);\n\tpubChannel = await connection.createConfirmChannel();\n\tattachGuards(pubChannel, 'pub');\n\n\tsubChannel = await connection.createChannel();\n\tattachGuards(subChannel, 'sub');\n\n\tawait pubChannel.assertExchange(EXCHANGE_NAME, 'topic', { durable: true });\n\tconsole.log(`EventBus initialized with instance ID: ${getInstanceId()}`);\n}\n\nexport function getChannel(): { pubChannel: amqp.ConfirmChannel; subChannel: amqp.Channel } {\n\tif (!pubChannel) throw new Error('Channel not initialized. Call initEventBus first.');\n\tif (!subChannel) throw new Error('Channel not initialized. Call initEventBus first.');\n\treturn {\n\t\tpubChannel,\n\t\tsubChannel,\n\t};\n}\n\nexport async function publishEvent<TPayload extends Record<string, unknown>>(\n\tevent: BaseEvent<TPayload>\n): Promise<void> {\n\tconsole.log('taking event', event);\n\n\tconst ch = getChannel().pubChannel;\n\tconst messageBuffer = Buffer.from(JSON.stringify(event.payload));\n\tch.publish(EXCHANGE_NAME, event.eventId, messageBuffer, {\n\t\tcontentType: 'application/json',\n\t\tpersistent: true,\n\t});\n\tawait ch.waitForConfirms();\n}\n\nexport async function subscribeToEvent(\n\teventId: string,\n\tonMessage: (payload: any) => Promise<void>,\n\topts?: RabbitMQEventOptions\n): Promise<void> {\n\tconst ch = getChannel().subChannel;\n\tconst queueName = `${eventId}`;\n\t// const queueName = `${eventId}.${getInstanceId()}`;\n\n\tawait ch.assertQueue(queueName, {\n\t\tdurable: true, // survive broker restart\n\t\texclusive: false, // Allow multiple consumers to attach. Only one connection can use it (each pod has own queue). Set to TRUE if each pod needs it's own queue\n\t\tautoDelete: false, // Queue removed when pod disconnects when set to TRUE\n\t\t// arguments: {\n\t\t// \t// Optional safety: limit queue size and TTL to prevent disk issues\n\t\t// \t'x-max-length': 50000, // max 50k messages\n\t\t// \t'x-message-ttl': 24 * 60 * 60 * 1000, // 24h TTL\n\t\t// \t'x-overflow': 'drop-head', // drop oldest messages if full\n\t\t// },\n\t});\n\n\tawait ch.bindQueue(queueName, EXCHANGE_NAME, eventId);\n\tif (opts?.consumeImmediately !== false) {\n\t\tawait ch.consume(queueName, async msg => {\n\t\t\tif (!msg) return;\n\t\t\tlet processed = false;\n\t\t\ttry {\n\t\t\t\tconst payload = JSON.parse(msg.content.toString());\n\t\t\t\tawait onMessage(payload);\n\t\t\t\tprocessed = true;\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(`Error handling event [${eventId}]`, err);\n\t\t\t} finally {\n\t\t\t\tif (processed) ch.ack(msg);\n\t\t\t\telse ch.nack(msg, false, true); // retry\n\t\t\t}\n\t\t});\n\t}\n\n\t// console.log(`Subscribed to event [${eventId}] on queue [${queueName}]`);\n\tconsole.log(`Subscribed to event [${eventId}]`);\n}\n\nexport async function consumeAllMessages<T>(queueName: string): Promise<T[]> {\n\tconst logger = getLibraries().getLoggerKit();\n\tconst ch = getChannel().subChannel;\n\tconst messages: T[] = [];\n\n\twhile (true) {\n\t\tconst msg = await ch.get(queueName, { noAck: false });\n\t\tif (!msg) break;\n\n\t\ttry {\n\t\t\tconst payload = JSON.parse(msg.content.toString()) as T;\n\t\t\tmessages.push(payload);\n\t\t\tch.ack(msg);\n\t\t\tlogger.debug(`Message consumed successfully for event ${queueName}`, {\n\t\t\t\ttag: LogTag.INFRA_QUEUE,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tlogger.error(`Error processing message for event ${queueName}:`, err, {\n\t\t\t\ttag: LogTag.INFRA_QUEUE,\n\t\t\t});\n\t\t\tch.nack(msg, false, true);\n\t\t}\n\t}\n\tlogger.debug(`Fetched ${messages.length} messages for event ${queueName}`, { tag: LogTag.INFRA_QUEUE });\n\treturn messages;\n}\n\nexport async function closeEventBus(): Promise<void> {\n\tif (pubChannel) await pubChannel.close();\n\tif (subChannel) await subChannel.close();\n\tif (connection) await connection.close();\n\tconsole.log(`EventBus closed for instance [${getInstanceId()}]`);\n}\n\nfunction attachGuards(ch: amqp.Channel | amqp.ConfirmChannel, type: 'pub' | 'sub') {\n\tch.on('close', async () => {\n\t\tconsole.error(`${type} channel closed, recreating...`);\n\t\tif (type === 'pub') {\n\t\t\tpubChannel = await connection.createConfirmChannel();\n\t\t\tawait pubChannel.assertExchange(EXCHANGE_NAME, 'topic', { durable: true });\n\t\t\tattachGuards(pubChannel, 'pub');\n\t\t} else {\n\t\t\tsubChannel = await connection.createChannel();\n\t\t\tattachGuards(subChannel, 'sub');\n\t\t}\n\t});\n\n\tch.on('error', err => {\n\t\tconsole.error(`${type} channel error`, err);\n\t});\n}\n"]}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { RabbitMQEventOptions } from '../index';
|
|
1
2
|
interface SubscriptionMetadata {
|
|
2
3
|
eventId: string;
|
|
3
4
|
targetConstructor: Function;
|
|
4
5
|
methodName: string;
|
|
6
|
+
opts?: RabbitMQEventOptions;
|
|
5
7
|
}
|
|
6
8
|
export declare class SubscriptionRegistry {
|
|
7
9
|
private static subscriptions;
|
|
8
|
-
static register(eventId: string, targetConstructor: Function, methodName: string): void;
|
|
10
|
+
static register(eventId: string, targetConstructor: Function, methodName: string, opts?: RabbitMQEventOptions): void;
|
|
9
11
|
static getAllSubscriptions(): SubscriptionMetadata[];
|
|
10
12
|
}
|
|
11
13
|
export {};
|
|
@@ -3,11 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SubscriptionRegistry = void 0;
|
|
4
4
|
class SubscriptionRegistry {
|
|
5
5
|
static subscriptions = [];
|
|
6
|
-
static register(eventId, targetConstructor, methodName) {
|
|
6
|
+
static register(eventId, targetConstructor, methodName, opts) {
|
|
7
7
|
this.subscriptions.push({
|
|
8
8
|
eventId,
|
|
9
9
|
targetConstructor,
|
|
10
10
|
methodName,
|
|
11
|
+
opts: opts,
|
|
11
12
|
});
|
|
12
13
|
}
|
|
13
14
|
static getAllSubscriptions() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionRegistry.js","sourceRoot":"/","sources":["libraries/event/registry/SubscriptionRegistry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"SubscriptionRegistry.js","sourceRoot":"/","sources":["libraries/event/registry/SubscriptionRegistry.ts"],"names":[],"mappings":";;;AASA,MAAa,oBAAoB;IACxB,MAAM,CAAC,aAAa,GAA2B,EAAE,CAAC;IAMnD,MAAM,CAAC,QAAQ,CACrB,OAAe,EACf,iBAA2B,EAC3B,UAAkB,EAClB,IAA2B;QAE3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACvB,OAAO;YACP,iBAAiB;YACjB,UAAU;YACV,IAAI,EAAE,IAAI;SACV,CAAC,CAAC;IACJ,CAAC;IAMM,MAAM,CAAC,mBAAmB;QAChC,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;;AA3BF,oDA4BC","sourcesContent":["import { RabbitMQEventOptions } from '../index';\n\ninterface SubscriptionMetadata {\n\teventId: string;\n\ttargetConstructor: Function;\n\tmethodName: string;\n\topts?: RabbitMQEventOptions;\n}\n\nexport class SubscriptionRegistry {\n\tprivate static subscriptions: SubscriptionMetadata[] = [];\n\n\t/**\n\t * Called by the decorator to record which class method\n\t * is subscribed to which eventId.\n\t */\n\tpublic static register(\n\t\teventId: string,\n\t\ttargetConstructor: Function,\n\t\tmethodName: string,\n\t\topts?: RabbitMQEventOptions\n\t) {\n\t\tthis.subscriptions.push({\n\t\t\teventId,\n\t\t\ttargetConstructor,\n\t\t\tmethodName,\n\t\t\topts: opts,\n\t\t});\n\t}\n\n\t/**\n\t * Called at bootstrap to retrieve all known subscriptions\n\t * so we can actually wire them up.\n\t */\n\tpublic static getAllSubscriptions(): SubscriptionMetadata[] {\n\t\treturn [...this.subscriptions];\n\t}\n}\n"]}
|
package/dist/types/README.md
CHANGED
package/dist/types/package.json
CHANGED
|
@@ -7,6 +7,7 @@ import { SynchronizeAllShopsAvgPreparationTimeDTO } from '../libraries/event/eve
|
|
|
7
7
|
import { SyncSingleShopCacheDTO } from '../libraries/event/events/sync-single-shop-in-cache-event';
|
|
8
8
|
import { SyncSingleShopOrderAgainCacheDTO } from '../libraries/event/events/sync-order-again-sections-for-shop-event';
|
|
9
9
|
import { SyncSingleShopSectionsInCacheDTO } from '../libraries/event/events/sync-single-shop-sections-in-cache-event';
|
|
10
|
+
import { SynchronizeAllCustomizedShopSectionsCacheDTO } from '../libraries/event/events/sync-all-customized-shop-sections-cache-event';
|
|
10
11
|
export declare function getChangedFields<T extends Record<string, any>>(oldDoc: T, newDoc: T, payload?: Partial<T>): Record<keyof T, {
|
|
11
12
|
old: any;
|
|
12
13
|
new: any;
|
|
@@ -37,3 +38,4 @@ export declare function publishAllShopsAvgPreperationTimeSyncProcessEvent(payloa
|
|
|
37
38
|
export declare function publishSyncSingleShopInCacheProcessEvent(payload: SyncSingleShopCacheDTO): Promise<void>;
|
|
38
39
|
export declare function publishSyncSingleShopOrderAgainSectionsInCacheProcessEvent(payload: SyncSingleShopOrderAgainCacheDTO): Promise<void>;
|
|
39
40
|
export declare function publishSyncSingleShopSectionsInCacheProcessEvent(payload: SyncSingleShopSectionsInCacheDTO): Promise<void>;
|
|
41
|
+
export declare function publishAllCustomizedShopSectionsCacheProcessEvent(payload: SynchronizeAllCustomizedShopSectionsCacheDTO): Promise<void>;
|
|
@@ -13,6 +13,7 @@ exports.publishAllShopsAvgPreperationTimeSyncProcessEvent = publishAllShopsAvgPr
|
|
|
13
13
|
exports.publishSyncSingleShopInCacheProcessEvent = publishSyncSingleShopInCacheProcessEvent;
|
|
14
14
|
exports.publishSyncSingleShopOrderAgainSectionsInCacheProcessEvent = publishSyncSingleShopOrderAgainSectionsInCacheProcessEvent;
|
|
15
15
|
exports.publishSyncSingleShopSectionsInCacheProcessEvent = publishSyncSingleShopSectionsInCacheProcessEvent;
|
|
16
|
+
exports.publishAllCustomizedShopSectionsCacheProcessEvent = publishAllCustomizedShopSectionsCacheProcessEvent;
|
|
16
17
|
const event_1 = require("../libraries/event");
|
|
17
18
|
const mongo_stream_changes_batch_process_shops_event_1 = require("../libraries/event/events/mongo-stream-changes-batch-process-shops-event");
|
|
18
19
|
const admin_logs_event_1 = require("../libraries/event/events/admin-logs-event");
|
|
@@ -24,6 +25,7 @@ const sync_avg_prep_time_in_all_shops_event_1 = require("../libraries/event/even
|
|
|
24
25
|
const sync_single_shop_in_cache_event_1 = require("../libraries/event/events/sync-single-shop-in-cache-event");
|
|
25
26
|
const sync_order_again_sections_for_shop_event_1 = require("../libraries/event/events/sync-order-again-sections-for-shop-event");
|
|
26
27
|
const sync_single_shop_sections_in_cache_event_1 = require("../libraries/event/events/sync-single-shop-sections-in-cache-event");
|
|
28
|
+
const sync_all_customized_shop_sections_cache_event_1 = require("../libraries/event/events/sync-all-customized-shop-sections-cache-event");
|
|
27
29
|
function getChangedFields(oldDoc, newDoc, payload) {
|
|
28
30
|
const changes = {};
|
|
29
31
|
const oldObj = typeof oldDoc.toObject === 'function' ? oldDoc.toObject() : oldDoc;
|
|
@@ -120,4 +122,8 @@ async function publishSyncSingleShopSectionsInCacheProcessEvent(payload) {
|
|
|
120
122
|
const syncSingleShopSectionsInCacheSyncEvent = new sync_single_shop_sections_in_cache_event_1.SyncSingleShopSectionsInCacheEvent(payload);
|
|
121
123
|
await (0, event_1.publishEvent)(syncSingleShopSectionsInCacheSyncEvent);
|
|
122
124
|
}
|
|
125
|
+
async function publishAllCustomizedShopSectionsCacheProcessEvent(payload) {
|
|
126
|
+
const SyncAllCustomizedShopSectionsCacheProcessEvent = new sync_all_customized_shop_sections_cache_event_1.SynchronizeAllCustomizedShopSectionsCacheEvent({});
|
|
127
|
+
await (0, event_1.publishEvent)(SyncAllCustomizedShopSectionsCacheProcessEvent);
|
|
128
|
+
}
|
|
123
129
|
//# sourceMappingURL=events-common-methods.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-common-methods.js","sourceRoot":"/","sources":["utilities/events-common-methods.ts"],"names":[],"mappings":"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","sourcesContent":["import { mongoose } from '@typegoose/typegoose';\nimport { publishEvent } from '../libraries/event';\nimport { AdminLogsUpdatedFieldsType } from './enum';\nimport { BaseEvent } from '../libraries/event/BaseEvent';\nimport {\n\tMongoStreamsBatchProcessShopsDTO,\n\tMongoStreamsBatchProcessShopsEvent,\n} from '../libraries/event/events/mongo-stream-changes-batch-process-shops-event';\nimport { AdminActivityLogsEvent } from '../libraries/event/events/admin-logs-event';\nimport { ShopActiveTimingsBatchProcessEvent } from '../libraries/event/events/shop-active-timings-batch-process-event';\nimport { BulkUpdateShopsSearchFieldsBatchProcessEvent } from '../libraries/event/events/bulk-update-shops-search-fields-batch-process-event';\nimport {\n\tBulkUpdateShopsZoneStatusDTO,\n\tBulkUpdateShopsZoneStatusEvent,\n} from '../libraries/event/events/bulk-update-zone-status-in-shops-event';\nimport {\n\tSynchronizeAllProductsProductMarketingInfoDTO,\n\tSynchronizeAllProductsProductMarketingInfoEvent,\n} from '../libraries/event/events/sync-all-products-product-marketing-info-event';\nimport {\n\tSynchronizeAllShopsAvgPreparationTimeDTO,\n\tSynchronizeAllShopsAvgPreparationTimeEvent,\n} from '../libraries/event/events/sync-avg-prep-time-in-all-shops-event';\nimport {\n\tSyncSingleShopCacheDTO,\n\tSyncSingleShopInCacheEvent,\n} from '../libraries/event/events/sync-single-shop-in-cache-event';\nimport {\n\tSyncSingleShopOrderAgainCacheDTO,\n\tSyncSingleShopOrderAgainInCacheEvent,\n} from '../libraries/event/events/sync-order-again-sections-for-shop-event';\nimport {\n\tSyncSingleShopSectionsInCacheDTO,\n\tSyncSingleShopSectionsInCacheEvent,\n} from '../libraries/event/events/sync-single-shop-sections-in-cache-event';\n\n/**\n * Returns changed fields between two objects (shallow comparison).\n */\nexport function getChangedFields<T extends Record<string, any>>(\n\toldDoc: T,\n\tnewDoc: T,\n\tpayload?: Partial<T>\n): Record<keyof T, { old: any; new: any }> {\n\tconst changes = {} as Record<keyof T, { old: any; new: any }>;\n\n\tconst oldObj = typeof oldDoc.toObject === 'function' ? oldDoc.toObject() : oldDoc;\n\tconst newObj = typeof newDoc.toObject === 'function' ? newDoc.toObject() : newDoc;\n\n\tconst keysToCheck = payload\n\t\t? Object.keys(payload)\n\t\t: Array.from(new Set([...Object.keys(oldObj), ...Object.keys(newObj)]));\n\n\tfor (const key of keysToCheck) {\n\t\tconst oldValue = oldObj[key];\n\t\tconst newValue = newObj[key];\n\t\tconst cleanedOld = deepCleanSettingsValues(oldValue);\n\t\tconst cleanedNew = deepCleanSettingsValues(newValue);\n\t\tif (payload || JSON.stringify(cleanedOld) !== JSON.stringify(cleanedNew)) {\n\t\t\tchanges[key as keyof T] = { old: oldValue, new: newValue };\n\t\t}\n\t}\n\n\treturn changes;\n}\n\n// removes _id and deletedAt fields from objects, array of objects and prepares for data that has setting changes\nfunction deepCleanSettingsValues(value: any): any {\n\t// CASE 1: Array\n\tif (Array.isArray(value)) {\n\t\t// If array contains primitives → return as-is\n\t\tif (value.every(v => v === null || typeof v !== 'object')) {\n\t\t\treturn value;\n\t\t}\n\n\t\t// If array contains objects → deep clean each object\n\t\treturn value.map(item => deepCleanSettingsValues(item));\n\t}\n\n\t// CASE 2: Null → return as is\n\tif (value === null) return value;\n\n\t// CASE 3: Plain Object\n\tif (typeof value === 'object') {\n\t\tconst cleanedObj: any = {};\n\n\t\tfor (const key in value) {\n\t\t\tif (key === '_id' || key === 'deletedAt' || value[key] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcleanedObj[key] = deepCleanSettingsValues(value[key]);\n\t\t}\n\n\t\treturn cleanedObj;\n\t}\n\n\t// CASE 4: Primitive (string, number, boolean)\n\treturn value;\n}\n\n/**\n * Filters changed fields to only those that exist in the payload.\n */\nexport function filterRelevantChanges<T>(\n\tallChanges: Record<string, { old: any; new: any }>,\n\tpayload: Partial<T>\n): Record<string, { old: any; new: any }> {\n\treturn Object.keys(payload).reduce(\n\t\t(acc, key) => {\n\t\t\tif (allChanges[key]) {\n\t\t\t\tacc[key] = allChanges[key];\n\t\t\t}\n\t\t\treturn acc;\n\t\t},\n\t\t{} as Record<string, { old: any; new: any }>\n\t);\n}\n\n/**\n * Extracts either 'old' or 'new' values from the changes object.\n */\nexport function extractChangedDocument(\n\tchanges: Record<string, { old: any; new: any }>,\n\ttype: 'old' | 'new'\n): Record<string, any> {\n\treturn Object.fromEntries(Object.entries(changes).map(([key, value]) => [key, value[type]]));\n}\n\nexport async function publishAdminLogsEvent(payload: {\n\tadmin: mongoose.Types.ObjectId;\n\tupdatedField: AdminLogsUpdatedFieldsType;\n\toldDoc: any;\n\tnewDoc: any;\n}) {\n\tconst { admin, updatedField, oldDoc, newDoc } = payload;\n\tconst adminActivityLogsEvent: BaseEvent<Record<string, unknown>> = new AdminActivityLogsEvent({\n\t\tadmin: admin,\n\t\tupdatedField: updatedField,\n\t\toldDocument: oldDoc,\n\t\tnewDocument: newDoc,\n\t});\n\tawait publishEvent(adminActivityLogsEvent);\n}\n\nexport async function publishShopActiveBatchProcessEvent() {\n\tconst shopActiveTimingsBatchProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew ShopActiveTimingsBatchProcessEvent({});\n\tawait publishEvent(shopActiveTimingsBatchProcessEvent);\n}\n\nexport async function publishMongodbStreamsChangesBatchProcessShopsEvent(\n\tpayload: MongoStreamsBatchProcessShopsDTO\n) {\n\tconst mongodbStreamsBatchProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew MongoStreamsBatchProcessShopsEvent(payload);\n\tawait publishEvent(mongodbStreamsBatchProcessEvent);\n}\n\nexport async function publishUpdateShopsSearchFieldsBulkProcessEvent(payload: any) {\n\tconst bulkUpdateShopsSearchFieldsBatchProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew BulkUpdateShopsSearchFieldsBatchProcessEvent(payload);\n\tawait publishEvent(bulkUpdateShopsSearchFieldsBatchProcessEvent);\n}\n\nexport async function publishBulkUpdateShopsZoneStatusProcessEvent(payload: BulkUpdateShopsZoneStatusDTO) {\n\tconst shopsZoneStatusBatchProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew BulkUpdateShopsZoneStatusEvent(payload);\n\tawait publishEvent(shopsZoneStatusBatchProcessEvent);\n}\n\nexport async function publishAllProductsProductMarketingInfoProcessEvent(\n\tpayload: SynchronizeAllProductsProductMarketingInfoDTO\n) {\n\tconst SyncAllProductsProductMarketingInfoProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew SynchronizeAllProductsProductMarketingInfoEvent({});\n\tawait publishEvent(SyncAllProductsProductMarketingInfoProcessEvent);\n}\n\nexport async function publishAllShopsAvgPreperationTimeSyncProcessEvent(\n\tpayload: SynchronizeAllShopsAvgPreparationTimeDTO\n) {\n\tconst SyncAllShopsAvgPreperationTimeSyncProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew SynchronizeAllShopsAvgPreparationTimeEvent({});\n\tawait publishEvent(SyncAllShopsAvgPreperationTimeSyncProcessEvent);\n}\n\nexport async function publishSyncSingleShopInCacheProcessEvent(payload: SyncSingleShopCacheDTO) {\n\tconst syncSingleShopCacheSyncEvent: BaseEvent<Record<string, unknown>> = new SyncSingleShopInCacheEvent(\n\t\tpayload\n\t);\n\tawait publishEvent(syncSingleShopCacheSyncEvent);\n}\n\nexport async function publishSyncSingleShopOrderAgainSectionsInCacheProcessEvent(\n\tpayload: SyncSingleShopOrderAgainCacheDTO\n) {\n\tconst syncSingleShopOrderAgainInCacheSyncEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew SyncSingleShopOrderAgainInCacheEvent(payload);\n\tawait publishEvent(syncSingleShopOrderAgainInCacheSyncEvent);\n}\n\nexport async function publishSyncSingleShopSectionsInCacheProcessEvent(\n\tpayload: SyncSingleShopSectionsInCacheDTO\n) {\n\tconst syncSingleShopSectionsInCacheSyncEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew SyncSingleShopSectionsInCacheEvent(payload);\n\tawait publishEvent(syncSingleShopSectionsInCacheSyncEvent);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"events-common-methods.js","sourceRoot":"/","sources":["utilities/events-common-methods.ts"],"names":[],"mappings":";;AAwCA,4CAyBC;AAwCD,sDAaC;AAKD,wDAKC;AAED,sDAcC;AAED,gFAIC;AAED,gHAMC;AAED,wGAIC;AAED,oGAIC;AAED,gHAMC;AAED,8GAMC;AAED,4FAKC;AAED,gIAMC;AAED,4GAMC;AAED,8GAMC;AAxND,8CAAkD;AAGlD,6IAGkF;AAClF,iFAAoF;AACpF,+HAAuH;AACvH,uJAA6I;AAC7I,6HAG0E;AAC1E,6IAGkF;AAClF,2HAGyE;AACzE,+GAGmE;AACnE,iIAG4E;AAC5E,iIAG4E;AAC5E,2IAAuL;AAKvL,SAAgB,gBAAgB,CAC/B,MAAS,EACT,MAAS,EACT,OAAoB;IAEpB,MAAM,OAAO,GAAG,EAA6C,CAAC;IAE9D,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAClF,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAElF,MAAM,WAAW,GAAG,OAAO;QAC1B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzE,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1E,OAAO,CAAC,GAAc,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAC5D,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAGD,SAAS,uBAAuB,CAAC,KAAU;IAE1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAE1B,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC;QACd,CAAC;QAGD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC;IAGD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAGjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAQ,EAAE,CAAC;QAE3B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACtE,SAAS;YACV,CAAC;YAED,UAAU,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;IAGD,OAAO,KAAK,CAAC;AACd,CAAC;AAKD,SAAgB,qBAAqB,CACpC,UAAkD,EAClD,OAAmB;IAEnB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CACjC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACZ,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC,EACD,EAA4C,CAC5C,CAAC;AACH,CAAC;AAKD,SAAgB,sBAAsB,CACrC,OAA+C,EAC/C,IAAmB;IAEnB,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,OAK3C;IACA,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,sBAAsB,GAAuC,IAAI,yCAAsB,CAAC;QAC7F,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,YAAY;QAC1B,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,MAAM;KACnB,CAAC,CAAC;IACH,MAAM,IAAA,oBAAY,EAAC,sBAAsB,CAAC,CAAC;AAC5C,CAAC;AAEM,KAAK,UAAU,kCAAkC;IACvD,MAAM,kCAAkC,GACvC,IAAI,4EAAkC,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAA,oBAAY,EAAC,kCAAkC,CAAC,CAAC;AACxD,CAAC;AAEM,KAAK,UAAU,kDAAkD,CACvE,OAAyC;IAEzC,MAAM,+BAA+B,GACpC,IAAI,mFAAkC,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,IAAA,oBAAY,EAAC,+BAA+B,CAAC,CAAC;AACrD,CAAC;AAEM,KAAK,UAAU,8CAA8C,CAAC,OAAY;IAChF,MAAM,4CAA4C,GACjD,IAAI,kGAA4C,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,IAAA,oBAAY,EAAC,4CAA4C,CAAC,CAAC;AAClE,CAAC;AAEM,KAAK,UAAU,4CAA4C,CAAC,OAAqC;IACvG,MAAM,gCAAgC,GACrC,IAAI,uEAA8B,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,IAAA,oBAAY,EAAC,gCAAgC,CAAC,CAAC;AACtD,CAAC;AAEM,KAAK,UAAU,kDAAkD,CACvE,OAAsD;IAEtD,MAAM,+CAA+C,GACpD,IAAI,gGAA+C,CAAC,EAAE,CAAC,CAAC;IACzD,MAAM,IAAA,oBAAY,EAAC,+CAA+C,CAAC,CAAC;AACrE,CAAC;AAEM,KAAK,UAAU,iDAAiD,CACtE,OAAiD;IAEjD,MAAM,8CAA8C,GACnD,IAAI,kFAA0C,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,IAAA,oBAAY,EAAC,8CAA8C,CAAC,CAAC;AACpE,CAAC;AAEM,KAAK,UAAU,wCAAwC,CAAC,OAA+B;IAC7F,MAAM,4BAA4B,GAAuC,IAAI,4DAA0B,CACtG,OAAO,CACP,CAAC;IACF,MAAM,IAAA,oBAAY,EAAC,4BAA4B,CAAC,CAAC;AAClD,CAAC;AAEM,KAAK,UAAU,0DAA0D,CAC/E,OAAyC;IAEzC,MAAM,wCAAwC,GAC7C,IAAI,+EAAoC,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,IAAA,oBAAY,EAAC,wCAAwC,CAAC,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,gDAAgD,CACrE,OAAyC;IAEzC,MAAM,sCAAsC,GAC3C,IAAI,6EAAkC,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,IAAA,oBAAY,EAAC,sCAAsC,CAAC,CAAC;AAC5D,CAAC;AAEM,KAAK,UAAU,iDAAiD,CACtE,OAAqD;IAErD,MAAM,8CAA8C,GACnD,IAAI,8FAA8C,CAAC,EAAE,CAAC,CAAC;IACxD,MAAM,IAAA,oBAAY,EAAC,8CAA8C,CAAC,CAAC;AACpE,CAAC","sourcesContent":["import { mongoose } from '@typegoose/typegoose';\nimport { publishEvent } from '../libraries/event';\nimport { AdminLogsUpdatedFieldsType } from './enum';\nimport { BaseEvent } from '../libraries/event/BaseEvent';\nimport {\n\tMongoStreamsBatchProcessShopsDTO,\n\tMongoStreamsBatchProcessShopsEvent,\n} from '../libraries/event/events/mongo-stream-changes-batch-process-shops-event';\nimport { AdminActivityLogsEvent } from '../libraries/event/events/admin-logs-event';\nimport { ShopActiveTimingsBatchProcessEvent } from '../libraries/event/events/shop-active-timings-batch-process-event';\nimport { BulkUpdateShopsSearchFieldsBatchProcessEvent } from '../libraries/event/events/bulk-update-shops-search-fields-batch-process-event';\nimport {\n\tBulkUpdateShopsZoneStatusDTO,\n\tBulkUpdateShopsZoneStatusEvent,\n} from '../libraries/event/events/bulk-update-zone-status-in-shops-event';\nimport {\n\tSynchronizeAllProductsProductMarketingInfoDTO,\n\tSynchronizeAllProductsProductMarketingInfoEvent,\n} from '../libraries/event/events/sync-all-products-product-marketing-info-event';\nimport {\n\tSynchronizeAllShopsAvgPreparationTimeDTO,\n\tSynchronizeAllShopsAvgPreparationTimeEvent,\n} from '../libraries/event/events/sync-avg-prep-time-in-all-shops-event';\nimport {\n\tSyncSingleShopCacheDTO,\n\tSyncSingleShopInCacheEvent,\n} from '../libraries/event/events/sync-single-shop-in-cache-event';\nimport {\n\tSyncSingleShopOrderAgainCacheDTO,\n\tSyncSingleShopOrderAgainInCacheEvent,\n} from '../libraries/event/events/sync-order-again-sections-for-shop-event';\nimport {\n\tSyncSingleShopSectionsInCacheDTO,\n\tSyncSingleShopSectionsInCacheEvent,\n} from '../libraries/event/events/sync-single-shop-sections-in-cache-event';\nimport { SynchronizeAllCustomizedShopSectionsCacheDTO, SynchronizeAllCustomizedShopSectionsCacheEvent } from '../libraries/event/events/sync-all-customized-shop-sections-cache-event';\n\n/**\n * Returns changed fields between two objects (shallow comparison).\n */\nexport function getChangedFields<T extends Record<string, any>>(\n\toldDoc: T,\n\tnewDoc: T,\n\tpayload?: Partial<T>\n): Record<keyof T, { old: any; new: any }> {\n\tconst changes = {} as Record<keyof T, { old: any; new: any }>;\n\n\tconst oldObj = typeof oldDoc.toObject === 'function' ? oldDoc.toObject() : oldDoc;\n\tconst newObj = typeof newDoc.toObject === 'function' ? newDoc.toObject() : newDoc;\n\n\tconst keysToCheck = payload\n\t\t? Object.keys(payload)\n\t\t: Array.from(new Set([...Object.keys(oldObj), ...Object.keys(newObj)]));\n\n\tfor (const key of keysToCheck) {\n\t\tconst oldValue = oldObj[key];\n\t\tconst newValue = newObj[key];\n\t\tconst cleanedOld = deepCleanSettingsValues(oldValue);\n\t\tconst cleanedNew = deepCleanSettingsValues(newValue);\n\t\tif (payload || JSON.stringify(cleanedOld) !== JSON.stringify(cleanedNew)) {\n\t\t\tchanges[key as keyof T] = { old: oldValue, new: newValue };\n\t\t}\n\t}\n\n\treturn changes;\n}\n\n// removes _id and deletedAt fields from objects, array of objects and prepares for data that has setting changes\nfunction deepCleanSettingsValues(value: any): any {\n\t// CASE 1: Array\n\tif (Array.isArray(value)) {\n\t\t// If array contains primitives → return as-is\n\t\tif (value.every(v => v === null || typeof v !== 'object')) {\n\t\t\treturn value;\n\t\t}\n\n\t\t// If array contains objects → deep clean each object\n\t\treturn value.map(item => deepCleanSettingsValues(item));\n\t}\n\n\t// CASE 2: Null → return as is\n\tif (value === null) return value;\n\n\t// CASE 3: Plain Object\n\tif (typeof value === 'object') {\n\t\tconst cleanedObj: any = {};\n\n\t\tfor (const key in value) {\n\t\t\tif (key === '_id' || key === 'deletedAt' || value[key] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcleanedObj[key] = deepCleanSettingsValues(value[key]);\n\t\t}\n\n\t\treturn cleanedObj;\n\t}\n\n\t// CASE 4: Primitive (string, number, boolean)\n\treturn value;\n}\n\n/**\n * Filters changed fields to only those that exist in the payload.\n */\nexport function filterRelevantChanges<T>(\n\tallChanges: Record<string, { old: any; new: any }>,\n\tpayload: Partial<T>\n): Record<string, { old: any; new: any }> {\n\treturn Object.keys(payload).reduce(\n\t\t(acc, key) => {\n\t\t\tif (allChanges[key]) {\n\t\t\t\tacc[key] = allChanges[key];\n\t\t\t}\n\t\t\treturn acc;\n\t\t},\n\t\t{} as Record<string, { old: any; new: any }>\n\t);\n}\n\n/**\n * Extracts either 'old' or 'new' values from the changes object.\n */\nexport function extractChangedDocument(\n\tchanges: Record<string, { old: any; new: any }>,\n\ttype: 'old' | 'new'\n): Record<string, any> {\n\treturn Object.fromEntries(Object.entries(changes).map(([key, value]) => [key, value[type]]));\n}\n\nexport async function publishAdminLogsEvent(payload: {\n\tadmin: mongoose.Types.ObjectId;\n\tupdatedField: AdminLogsUpdatedFieldsType;\n\toldDoc: any;\n\tnewDoc: any;\n}) {\n\tconst { admin, updatedField, oldDoc, newDoc } = payload;\n\tconst adminActivityLogsEvent: BaseEvent<Record<string, unknown>> = new AdminActivityLogsEvent({\n\t\tadmin: admin,\n\t\tupdatedField: updatedField,\n\t\toldDocument: oldDoc,\n\t\tnewDocument: newDoc,\n\t});\n\tawait publishEvent(adminActivityLogsEvent);\n}\n\nexport async function publishShopActiveBatchProcessEvent() {\n\tconst shopActiveTimingsBatchProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew ShopActiveTimingsBatchProcessEvent({});\n\tawait publishEvent(shopActiveTimingsBatchProcessEvent);\n}\n\nexport async function publishMongodbStreamsChangesBatchProcessShopsEvent(\n\tpayload: MongoStreamsBatchProcessShopsDTO\n) {\n\tconst mongodbStreamsBatchProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew MongoStreamsBatchProcessShopsEvent(payload);\n\tawait publishEvent(mongodbStreamsBatchProcessEvent);\n}\n\nexport async function publishUpdateShopsSearchFieldsBulkProcessEvent(payload: any) {\n\tconst bulkUpdateShopsSearchFieldsBatchProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew BulkUpdateShopsSearchFieldsBatchProcessEvent(payload);\n\tawait publishEvent(bulkUpdateShopsSearchFieldsBatchProcessEvent);\n}\n\nexport async function publishBulkUpdateShopsZoneStatusProcessEvent(payload: BulkUpdateShopsZoneStatusDTO) {\n\tconst shopsZoneStatusBatchProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew BulkUpdateShopsZoneStatusEvent(payload);\n\tawait publishEvent(shopsZoneStatusBatchProcessEvent);\n}\n\nexport async function publishAllProductsProductMarketingInfoProcessEvent(\n\tpayload: SynchronizeAllProductsProductMarketingInfoDTO\n) {\n\tconst SyncAllProductsProductMarketingInfoProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew SynchronizeAllProductsProductMarketingInfoEvent({});\n\tawait publishEvent(SyncAllProductsProductMarketingInfoProcessEvent);\n}\n\nexport async function publishAllShopsAvgPreperationTimeSyncProcessEvent(\n\tpayload: SynchronizeAllShopsAvgPreparationTimeDTO\n) {\n\tconst SyncAllShopsAvgPreperationTimeSyncProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew SynchronizeAllShopsAvgPreparationTimeEvent({});\n\tawait publishEvent(SyncAllShopsAvgPreperationTimeSyncProcessEvent);\n}\n\nexport async function publishSyncSingleShopInCacheProcessEvent(payload: SyncSingleShopCacheDTO) {\n\tconst syncSingleShopCacheSyncEvent: BaseEvent<Record<string, unknown>> = new SyncSingleShopInCacheEvent(\n\t\tpayload\n\t);\n\tawait publishEvent(syncSingleShopCacheSyncEvent);\n}\n\nexport async function publishSyncSingleShopOrderAgainSectionsInCacheProcessEvent(\n\tpayload: SyncSingleShopOrderAgainCacheDTO\n) {\n\tconst syncSingleShopOrderAgainInCacheSyncEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew SyncSingleShopOrderAgainInCacheEvent(payload);\n\tawait publishEvent(syncSingleShopOrderAgainInCacheSyncEvent);\n}\n\nexport async function publishSyncSingleShopSectionsInCacheProcessEvent(\n\tpayload: SyncSingleShopSectionsInCacheDTO\n) {\n\tconst syncSingleShopSectionsInCacheSyncEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew SyncSingleShopSectionsInCacheEvent(payload);\n\tawait publishEvent(syncSingleShopSectionsInCacheSyncEvent);\n}\n\nexport async function publishAllCustomizedShopSectionsCacheProcessEvent(\n\tpayload: SynchronizeAllCustomizedShopSectionsCacheDTO\n) {\n\tconst SyncAllCustomizedShopSectionsCacheProcessEvent: BaseEvent<Record<string, unknown>> =\n\t\tnew SynchronizeAllCustomizedShopSectionsCacheEvent({});\n\tawait publishEvent(SyncAllCustomizedShopSectionsCacheProcessEvent);\n}"]}
|