@solidxai/core 0.1.9-beta.5 → 0.1.9-beta.7

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.
Files changed (159) hide show
  1. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  2. package/dist/helpers/bootstrap.helper.js +4 -1
  3. package/dist/helpers/bootstrap.helper.js.map +1 -1
  4. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +5 -5
  5. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  6. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts.map +1 -1
  7. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +2 -2
  8. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
  9. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +5 -5
  10. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  11. package/dist/helpers/module-metadata-helper.service.js +3 -3
  12. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  13. package/dist/helpers/string.helper.d.ts +1 -0
  14. package/dist/helpers/string.helper.d.ts.map +1 -1
  15. package/dist/helpers/string.helper.js +4 -1
  16. package/dist/helpers/string.helper.js.map +1 -1
  17. package/dist/interfaces/mq.d.ts +1 -1
  18. package/dist/interfaces/mq.d.ts.map +1 -1
  19. package/dist/interfaces/mq.js.map +1 -1
  20. package/dist/jobs/database/api-email-subscriber-database.service.d.ts +1 -1
  21. package/dist/jobs/database/api-email-subscriber-database.service.js +1 -1
  22. package/dist/jobs/database/api-email-subscriber-database.service.js.map +1 -1
  23. package/dist/jobs/database/msg91-whatsapp-subscriber-database.service.d.ts +1 -1
  24. package/dist/jobs/database/msg91-whatsapp-subscriber-database.service.js +1 -1
  25. package/dist/jobs/database/msg91-whatsapp-subscriber-database.service.js.map +1 -1
  26. package/dist/jobs/database/three60-whatsapp-subscriber-database.service.d.ts +1 -1
  27. package/dist/jobs/database/three60-whatsapp-subscriber-database.service.js +1 -1
  28. package/dist/jobs/database/three60-whatsapp-subscriber-database.service.js.map +1 -1
  29. package/dist/jobs/rabbitmq/api-email-subscriber.service.d.ts +1 -1
  30. package/dist/jobs/rabbitmq/api-email-subscriber.service.js +1 -1
  31. package/dist/jobs/rabbitmq/api-email-subscriber.service.js.map +1 -1
  32. package/dist/jobs/rabbitmq/msg91-whatsapp-subscriber.service.d.ts +1 -1
  33. package/dist/jobs/rabbitmq/msg91-whatsapp-subscriber.service.js +1 -1
  34. package/dist/jobs/rabbitmq/msg91-whatsapp-subscriber.service.js.map +1 -1
  35. package/dist/jobs/rabbitmq/test-queue-subscriber.service.d.ts +1 -1
  36. package/dist/jobs/rabbitmq/test-queue-subscriber.service.d.ts.map +1 -1
  37. package/dist/jobs/rabbitmq/test-queue-subscriber.service.js +6 -3
  38. package/dist/jobs/rabbitmq/test-queue-subscriber.service.js.map +1 -1
  39. package/dist/jobs/rabbitmq/three60-whatsapp-subscriber.service.d.ts +1 -1
  40. package/dist/jobs/rabbitmq/three60-whatsapp-subscriber.service.js +1 -1
  41. package/dist/jobs/rabbitmq/three60-whatsapp-subscriber.service.js.map +1 -1
  42. package/dist/jobs/redis/api-email-subscriber-redis.service.d.ts +1 -1
  43. package/dist/jobs/redis/api-email-subscriber-redis.service.js +1 -1
  44. package/dist/jobs/redis/api-email-subscriber-redis.service.js.map +1 -1
  45. package/dist/jobs/redis/msg91-whatsapp-subscriber-redis.service.d.ts +1 -1
  46. package/dist/jobs/redis/msg91-whatsapp-subscriber-redis.service.js +1 -1
  47. package/dist/jobs/redis/msg91-whatsapp-subscriber-redis.service.js.map +1 -1
  48. package/dist/jobs/redis/three60-whatsapp-subscriber-redis.service.d.ts +1 -1
  49. package/dist/jobs/redis/three60-whatsapp-subscriber-redis.service.js +1 -1
  50. package/dist/jobs/redis/three60-whatsapp-subscriber-redis.service.js.map +1 -1
  51. package/dist/repository/chatter-message-details.repository.d.ts.map +1 -1
  52. package/dist/repository/chatter-message-details.repository.js +7 -6
  53. package/dist/repository/chatter-message-details.repository.js.map +1 -1
  54. package/dist/repository/chatter-message.repository.d.ts.map +1 -1
  55. package/dist/repository/chatter-message.repository.js +4 -4
  56. package/dist/repository/chatter-message.repository.js.map +1 -1
  57. package/dist/repository/solid-base.repository.js +2 -2
  58. package/dist/repository/solid-base.repository.js.map +1 -1
  59. package/dist/seeders/module-test-data.service.js +4 -4
  60. package/dist/seeders/module-test-data.service.js.map +1 -1
  61. package/dist/seeders/seed-data/solid-core-metadata.json +7 -3
  62. package/dist/services/chatter-message.service.d.ts.map +1 -1
  63. package/dist/services/chatter-message.service.js +7 -7
  64. package/dist/services/chatter-message.service.js.map +1 -1
  65. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -1
  66. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +2 -2
  67. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -1
  68. package/dist/services/crud-helper.service.d.ts.map +1 -1
  69. package/dist/services/crud-helper.service.js +9 -9
  70. package/dist/services/crud-helper.service.js.map +1 -1
  71. package/dist/services/export-transaction.service.d.ts.map +1 -1
  72. package/dist/services/export-transaction.service.js +4 -3
  73. package/dist/services/export-transaction.service.js.map +1 -1
  74. package/dist/services/field-metadata.service.d.ts.map +1 -1
  75. package/dist/services/field-metadata.service.js +7 -7
  76. package/dist/services/field-metadata.service.js.map +1 -1
  77. package/dist/services/fixtures.service.js +2 -2
  78. package/dist/services/fixtures.service.js.map +1 -1
  79. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts.map +1 -1
  80. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js +2 -2
  81. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js.map +1 -1
  82. package/dist/services/import-transaction.service.d.ts.map +1 -1
  83. package/dist/services/import-transaction.service.js +2 -2
  84. package/dist/services/import-transaction.service.js.map +1 -1
  85. package/dist/services/menu-item-metadata.service.js +2 -2
  86. package/dist/services/menu-item-metadata.service.js.map +1 -1
  87. package/dist/services/model-metadata.service.d.ts.map +1 -1
  88. package/dist/services/model-metadata.service.js +11 -10
  89. package/dist/services/model-metadata.service.js.map +1 -1
  90. package/dist/services/module-metadata.service.d.ts.map +1 -1
  91. package/dist/services/module-metadata.service.js +2 -2
  92. package/dist/services/module-metadata.service.js.map +1 -1
  93. package/dist/services/queues/database-subscriber.service.d.ts +1 -1
  94. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  95. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  96. package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
  97. package/dist/services/queues/publisher-factory.service.js +2 -2
  98. package/dist/services/queues/publisher-factory.service.js.map +1 -1
  99. package/dist/services/queues/rabbitmq-subscriber.service.d.ts +1 -1
  100. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  101. package/dist/services/queues/rabbitmq-subscriber.service.js +3 -1
  102. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  103. package/dist/services/queues/redis-subscriber.service.d.ts +1 -1
  104. package/dist/services/queues/redis-subscriber.service.d.ts.map +1 -1
  105. package/dist/services/queues/redis-subscriber.service.js.map +1 -1
  106. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js +3 -3
  107. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js.map +1 -1
  108. package/dist/services/solid-introspect.service.js +2 -2
  109. package/dist/services/solid-introspect.service.js.map +1 -1
  110. package/dist/services/view-metadata.service.d.ts.map +1 -1
  111. package/dist/services/view-metadata.service.js +2 -2
  112. package/dist/services/view-metadata.service.js.map +1 -1
  113. package/dist/subscribers/computed-entity-field.subscriber.js +6 -6
  114. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  115. package/dist/winston.logger.js +1 -1
  116. package/dist/winston.logger.js.map +1 -1
  117. package/package.json +1 -2
  118. package/src/helpers/bootstrap.helper.ts +5 -2
  119. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +1 -1
  120. package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +1 -2
  121. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +1 -1
  122. package/src/helpers/module-metadata-helper.service.ts +3 -3
  123. package/src/helpers/string.helper.ts +3 -0
  124. package/src/interfaces/mq.ts +2 -2
  125. package/src/jobs/database/api-email-subscriber-database.service.ts +1 -1
  126. package/src/jobs/database/msg91-whatsapp-subscriber-database.service.ts +1 -1
  127. package/src/jobs/database/three60-whatsapp-subscriber-database.service.ts +1 -1
  128. package/src/jobs/rabbitmq/api-email-subscriber.service.ts +1 -1
  129. package/src/jobs/rabbitmq/msg91-whatsapp-subscriber.service.ts +1 -1
  130. package/src/jobs/rabbitmq/test-queue-subscriber.service.ts +6 -7
  131. package/src/jobs/rabbitmq/three60-whatsapp-subscriber.service.ts +1 -1
  132. package/src/jobs/redis/api-email-subscriber-redis.service.ts +1 -1
  133. package/src/jobs/redis/msg91-whatsapp-subscriber-redis.service.ts +1 -1
  134. package/src/jobs/redis/three60-whatsapp-subscriber-redis.service.ts +1 -1
  135. package/src/repository/chatter-message-details.repository.ts +4 -3
  136. package/src/repository/chatter-message.repository.ts +4 -4
  137. package/src/repository/solid-base.repository.ts +2 -2
  138. package/src/seeders/module-test-data.service.ts +1 -1
  139. package/src/seeders/seed-data/solid-core-metadata.json +7 -3
  140. package/src/services/chatter-message.service.ts +1 -3
  141. package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +1 -2
  142. package/src/services/crud-helper.service.ts +1 -4
  143. package/src/services/export-transaction.service.ts +3 -4
  144. package/src/services/field-metadata.service.ts +1 -4
  145. package/src/services/fixtures.service.ts +1 -1
  146. package/src/services/genai/mcp-handlers/mcp-handler-factory.service.ts +1 -2
  147. package/src/services/import-transaction.service.ts +1 -1
  148. package/src/services/menu-item-metadata.service.ts +2 -2
  149. package/src/services/model-metadata.service.ts +10 -12
  150. package/src/services/module-metadata.service.ts +1 -2
  151. package/src/services/queues/database-subscriber.service.ts +1 -1
  152. package/src/services/queues/publisher-factory.service.ts +1 -2
  153. package/src/services/queues/rabbitmq-subscriber.service.ts +13 -11
  154. package/src/services/queues/redis-subscriber.service.ts +2 -2
  155. package/src/services/selection-providers/pseudo-foreign-key-selection-provider.service.ts +1 -1
  156. package/src/services/solid-introspect.service.ts +1 -1
  157. package/src/services/view-metadata.service.ts +1 -5
  158. package/src/subscribers/computed-entity-field.subscriber.ts +6 -6
  159. package/src/winston.logger.ts +1 -1
@@ -12,6 +12,6 @@ export declare class Three60WhatsappQueueSubscriberDatabase extends DatabaseSubs
12
12
  readonly poller: PollerService;
13
13
  constructor(whatsappService: Three60WhatsappService, mqMessageService: MqMessageService, mqMessageQueueService: MqMessageQueueService, poller: PollerService);
14
14
  options(): QueuesModuleOptions;
15
- subscribe(message: QueueMessage<any>): void;
15
+ subscribe(message: QueueMessage<any>): Promise<void>;
16
16
  }
17
17
  //# sourceMappingURL=three60-whatsapp-subscriber-database.service.d.ts.map
@@ -34,7 +34,7 @@ let Three60WhatsappQueueSubscriberDatabase = class Three60WhatsappQueueSubscribe
34
34
  };
35
35
  }
36
36
  subscribe(message) {
37
- this.whatsappService.sendWhatsAppMessageSynchronously(message);
37
+ return this.whatsappService.sendWhatsAppMessageSynchronously(message);
38
38
  }
39
39
  };
40
40
  exports.Three60WhatsappQueueSubscriberDatabase = Three60WhatsappQueueSubscriberDatabase;
@@ -1 +1 @@
1
- {"version":3,"file":"three60-whatsapp-subscriber-database.service.js","sourceRoot":"","sources":["../../../src/jobs/database/three60-whatsapp-subscriber-database.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAG5C,oHAA2E;AAC3E,0EAAmE;AACnE,sFAA8E;AAE9E,mGAAqF;AACrF,kEAA4D;AAC5D,2FAAsF;AAG/E,IAAM,sCAAsC,GAA5C,MAAM,sCAAuC,SAAQ,gDAAuB;IAC/E,YACqB,eAAuC,EAC/C,gBAAkC,EAClC,qBAA4C,EAC5C,MAAqB;QAE9B,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;QALtC,oBAAe,GAAf,eAAe,CAAwB;QAC/C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,WAAM,GAAN,MAAM,CAAe;IAGlC,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,+CAAoB;SAC1B,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;CACJ,CAAA;AAnBY,wFAAsC;iDAAtC,sCAAsC;IADlD,IAAA,mBAAU,GAAE;qCAG6B,+CAAsB;QAC7B,qCAAgB;QACX,gDAAqB;QACpC,8BAAa;GALzB,sCAAsC,CAmBlD","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueOptions from './msg91-whatsapp-queue-options-database';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from 'src/interfaces';\nimport { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';\nimport { PollerService } from 'src/services/poller.service';\nimport { Three60WhatsappService } from 'src/services/whatsapp/Three60WhatsappService';\n\n@Injectable()\nexport class Three60WhatsappQueueSubscriberDatabase extends DatabaseSubscriber<any> {\n constructor(\n private readonly whatsappService: Three60WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n readonly poller: PollerService,\n ) {\n super(mqMessageService, mqMessageQueueService, poller);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
1
+ {"version":3,"file":"three60-whatsapp-subscriber-database.service.js","sourceRoot":"","sources":["../../../src/jobs/database/three60-whatsapp-subscriber-database.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAG5C,oHAA2E;AAC3E,0EAAmE;AACnE,sFAA8E;AAE9E,mGAAqF;AACrF,kEAA4D;AAC5D,2FAAsF;AAG/E,IAAM,sCAAsC,GAA5C,MAAM,sCAAuC,SAAQ,gDAAuB;IAC/E,YACqB,eAAuC,EAC/C,gBAAkC,EAClC,qBAA4C,EAC5C,MAAqB;QAE9B,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;QALtC,oBAAe,GAAf,eAAe,CAAwB;QAC/C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,WAAM,GAAN,MAAM,CAAe;IAGlC,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,+CAAoB;SAC1B,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ,CAAA;AAnBY,wFAAsC;iDAAtC,sCAAsC;IADlD,IAAA,mBAAU,GAAE;qCAG6B,+CAAsB;QAC7B,qCAAgB;QACX,gDAAqB;QACpC,8BAAa;GALzB,sCAAsC,CAmBlD","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueOptions from './msg91-whatsapp-queue-options-database';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from 'src/interfaces';\nimport { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';\nimport { PollerService } from 'src/services/poller.service';\nimport { Three60WhatsappService } from 'src/services/whatsapp/Three60WhatsappService';\n\n@Injectable()\nexport class Three60WhatsappQueueSubscriberDatabase extends DatabaseSubscriber<any> {\n constructor(\n private readonly whatsappService: Three60WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n readonly poller: PollerService,\n ) {\n super(mqMessageService, mqMessageQueueService, poller);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n return this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
@@ -10,6 +10,6 @@ export declare class ApiEmailQueueSubscriber extends RabbitMqSubscriber<any> {
10
10
  readonly mqMessageQueueService: MqMessageQueueService;
11
11
  constructor(emailService: ElasticEmailService, mqMessageService: MqMessageService, mqMessageQueueService: MqMessageQueueService);
12
12
  options(): QueuesModuleOptions;
13
- subscribe(message: QueueMessage<any>): void;
13
+ subscribe(message: QueueMessage<any>): Promise<void>;
14
14
  }
15
15
  //# sourceMappingURL=api-email-subscriber.service.d.ts.map
@@ -32,7 +32,7 @@ let ApiEmailQueueSubscriber = class ApiEmailQueueSubscriber extends rabbitmq_sub
32
32
  };
33
33
  }
34
34
  subscribe(message) {
35
- this.emailService.sendEmailSynchronously(message);
35
+ return this.emailService.sendEmailSynchronously(message);
36
36
  }
37
37
  };
38
38
  exports.ApiEmailQueueSubscriber = ApiEmailQueueSubscriber;
@@ -1 +1 @@
1
- {"version":3,"file":"api-email-subscriber.service.js","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/api-email-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,wFAAyD;AACzD,mGAAqF;AAErF,qFAAgF;AAChF,0EAAmE;AACnE,sFAA8E;AAIvE,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,gDAAuB;IAChE,YACqB,YAAiC,EACzC,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,iBAAY,GAAZ,YAAY,CAAqB;QACzC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,iCAAgB;SACtB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;CACJ,CAAA;AAlBY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;qCAG0B,2CAAmB;QACvB,qCAAgB;QACX,gDAAqB;GAJhD,uBAAuB,CAkBnC","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport mailQueueOptions from './api-email-queue-options';\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport { ElasticEmailService } from '../../services/mail/elastic-email.service';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\n\n@Injectable()\nexport class ApiEmailQueueSubscriber extends RabbitMqSubscriber<any> {\n constructor(\n private readonly emailService: ElasticEmailService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...mailQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n this.emailService.sendEmailSynchronously(message);\n }\n}\n"]}
1
+ {"version":3,"file":"api-email-subscriber.service.js","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/api-email-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,wFAAyD;AACzD,mGAAqF;AAErF,qFAAgF;AAChF,0EAAmE;AACnE,sFAA8E;AAIvE,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,gDAAuB;IAChE,YACqB,YAAiC,EACzC,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,iBAAY,GAAZ,YAAY,CAAqB;QACzC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,iCAAgB;SACtB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;CACJ,CAAA;AAlBY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;qCAG0B,2CAAmB;QACvB,qCAAgB;QACX,gDAAqB;GAJhD,uBAAuB,CAkBnC","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport mailQueueOptions from './api-email-queue-options';\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport { ElasticEmailService } from '../../services/mail/elastic-email.service';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\n\n@Injectable()\nexport class ApiEmailQueueSubscriber extends RabbitMqSubscriber<any> {\n constructor(\n private readonly emailService: ElasticEmailService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...mailQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n return this.emailService.sendEmailSynchronously(message);\n }\n}\n"]}
@@ -10,6 +10,6 @@ export declare class Msg91WhatsappQueueSubscriber extends RabbitMqSubscriber<any
10
10
  readonly mqMessageQueueService: MqMessageQueueService;
11
11
  constructor(whatsappService: Msg91WhatsappService, mqMessageService: MqMessageService, mqMessageQueueService: MqMessageQueueService);
12
12
  options(): QueuesModuleOptions;
13
- subscribe(message: QueueMessage<any>): void;
13
+ subscribe(message: QueueMessage<any>): Promise<void>;
14
14
  }
15
15
  //# sourceMappingURL=msg91-whatsapp-subscriber.service.d.ts.map
@@ -32,7 +32,7 @@ let Msg91WhatsappQueueSubscriber = class Msg91WhatsappQueueSubscriber extends ra
32
32
  };
33
33
  }
34
34
  subscribe(message) {
35
- this.whatsappService.sendWhatsAppMessageSynchronously(message);
35
+ return this.whatsappService.sendWhatsAppMessageSynchronously(message);
36
36
  }
37
37
  };
38
38
  exports.Msg91WhatsappQueueSubscriber = Msg91WhatsappQueueSubscriber;
@@ -1 +1 @@
1
- {"version":3,"file":"msg91-whatsapp-subscriber.service.js","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/msg91-whatsapp-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,mGAAqF;AAErF,kGAAkE;AAClE,uFAAoF;AACpF,0EAAmE;AACnE,sFAA8E;AAIvE,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,gDAAuB;IACrE,YACqB,eAAqC,EAC7C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAsB;QAC7C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,sCAAoB;SAC1B,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;CACJ,CAAA;AAlBY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,mBAAU,GAAE;qCAG6B,2CAAoB;QAC3B,qCAAgB;QACX,gDAAqB;GAJhD,4BAA4B,CAkBxC","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueOptions from './msg91-whatsapp-queue-options';\nimport { Msg91WhatsappService } from '../../services/whatsapp/Msg91WhatsappService';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\n\n@Injectable()\nexport class Msg91WhatsappQueueSubscriber extends RabbitMqSubscriber<any> {\n constructor(\n private readonly whatsappService: Msg91WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
1
+ {"version":3,"file":"msg91-whatsapp-subscriber.service.js","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/msg91-whatsapp-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,mGAAqF;AAErF,kGAAkE;AAClE,uFAAoF;AACpF,0EAAmE;AACnE,sFAA8E;AAIvE,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,gDAAuB;IACrE,YACqB,eAAqC,EAC7C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAsB;QAC7C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,sCAAoB;SAC1B,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ,CAAA;AAlBY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,mBAAU,GAAE;qCAG6B,2CAAoB;QAC3B,qCAAgB;QACX,gDAAqB;GAJhD,4BAA4B,CAkBxC","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueOptions from './msg91-whatsapp-queue-options';\nimport { Msg91WhatsappService } from '../../services/whatsapp/Msg91WhatsappService';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\n\n@Injectable()\nexport class Msg91WhatsappQueueSubscriber extends RabbitMqSubscriber<any> {\n constructor(\n private readonly whatsappService: Msg91WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n return this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
@@ -9,6 +9,6 @@ export declare class TestQueueSubscriber extends RabbitMqSubscriber<any> {
9
9
  private readonly testQueueLogger;
10
10
  constructor(mqMessageService: MqMessageService, mqMessageQueueService: MqMessageQueueService);
11
11
  options(): QueuesModuleOptions;
12
- subscribe(message: QueueMessage<any>): void;
12
+ subscribe(message: QueueMessage<any>): Promise<unknown>;
13
13
  }
14
14
  //# sourceMappingURL=test-queue-subscriber.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-queue-subscriber.service.d.ts","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/test-queue-subscriber.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,qBACa,mBAAoB,SAAQ,kBAAkB,CAAC,GAAG,CAAC;IAGxD,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IAHzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwC;gBAE3D,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,qBAAqB;IAKzD,OAAO,IAAI,mBAAmB;IAM9B,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC;CAoBvC"}
1
+ {"version":3,"file":"test-queue-subscriber.service.d.ts","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/test-queue-subscriber.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,qBACa,mBAAoB,SAAQ,kBAAkB,CAAC,GAAG,CAAC;IAGxD,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IAHzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwC;gBAE3D,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,qBAAqB;IAKzD,OAAO,IAAI,mBAAmB;IAM9B,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC;CAmBvC"}
@@ -39,9 +39,12 @@ let TestQueueSubscriber = TestQueueSubscriber_1 = class TestQueueSubscriber exte
39
39
  timeoutSecondsParsed = +timeoutSeconds;
40
40
  }
41
41
  this.testQueueLogger.debug(`Processing message with timeout: ${timeoutSecondsParsed}`);
42
- setTimeout(() => {
43
- this.testQueueLogger.debug(`Processed message: ${JSON.stringify(message)}`);
44
- }, timeoutSecondsParsed * 1000);
42
+ return new Promise((resolve) => {
43
+ setTimeout(() => {
44
+ this.testQueueLogger.debug(`Processed message: ${JSON.stringify(message)}`);
45
+ resolve({ status: 'success', messageId: message.messageId, message: 'Processed message' });
46
+ }, timeoutSecondsParsed * 1000);
47
+ });
45
48
  }
46
49
  };
47
50
  exports.TestQueueSubscriber = TestQueueSubscriber;
@@ -1 +1 @@
1
- {"version":3,"file":"test-queue-subscriber.service.js","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/test-queue-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,mGAAqF;AAErF,8EAAmD;AACnD,0EAAqE;AACrE,sFAAgF;AAIzE,IAAM,mBAAmB,2BAAzB,MAAM,mBAAoB,SAAQ,gDAAuB;IAE5D,YACa,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAHtC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;QAHxC,oBAAe,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IAMxE,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,4BAAe;SACrB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAEhC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE3E,IAAI,oBAAoB,GAAG,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC;QACxD,IAAI,cAAc,EAAE,CAAC;YACjB,oBAAoB,GAAG,CAAC,cAAc,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,oCAAoC,oBAAoB,EAAE,CAAC,CAAC;QAGvF,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEhF,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC,CAAC;IAGpC,CAAC;CACJ,CAAA;AAnCY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;qCAIsB,qCAAgB;QACX,gDAAqB;GAJhD,mBAAmB,CAmC/B","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\n\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport testQueueConfig from './test-queue-options';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\n\n@Injectable()\nexport class TestQueueSubscriber extends RabbitMqSubscriber<any> {\n private readonly testQueueLogger = new Logger(TestQueueSubscriber.name);\n constructor(\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...testQueueConfig\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n // console.log(`Received message ${JSON.stringify(message)}`);\n this.testQueueLogger.debug(`Received message: ${JSON.stringify(message)}`);\n\n let timeoutSecondsParsed = 10;\n const timeoutSeconds = message?.payload?.timeoutSeconds;\n if (timeoutSeconds) {\n timeoutSecondsParsed = +timeoutSeconds;\n }\n\n this.testQueueLogger.debug(`Processing message with timeout: ${timeoutSecondsParsed}`);\n\n // Simulate some processing time\n setTimeout(() => {\n this.testQueueLogger.debug(`Processed message: ${JSON.stringify(message)}`);\n // resolve({ status: 'success', messageId: message.messageId, message: `Processed message` });\n }, timeoutSecondsParsed * 1000);\n\n // return new Promise((resolve, reject) => {});\n }\n}\n"]}
1
+ {"version":3,"file":"test-queue-subscriber.service.js","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/test-queue-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,mGAAqF;AAErF,8EAAmD;AACnD,0EAAqE;AACrE,sFAAgF;AAIzE,IAAM,mBAAmB,2BAAzB,MAAM,mBAAoB,SAAQ,gDAAuB;IAE5D,YACa,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAHtC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;QAHxC,oBAAe,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IAMxE,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,4BAAe;SACrB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAEhC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE3E,IAAI,oBAAoB,GAAG,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC;QACxD,IAAI,cAAc,EAAE,CAAC;YACjB,oBAAoB,GAAG,CAAC,cAAc,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,oCAAoC,oBAAoB,EAAE,CAAC,CAAC;QAEvF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5E,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC/F,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAlCY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;qCAIsB,qCAAgB;QACX,gDAAqB;GAJhD,mBAAmB,CAkC/B","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\n\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport testQueueConfig from './test-queue-options';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\n\n@Injectable()\nexport class TestQueueSubscriber extends RabbitMqSubscriber<any> {\n private readonly testQueueLogger = new Logger(TestQueueSubscriber.name);\n constructor(\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...testQueueConfig\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n // console.log(`Received message ${JSON.stringify(message)}`);\n this.testQueueLogger.debug(`Received message: ${JSON.stringify(message)}`);\n\n let timeoutSecondsParsed = 10;\n const timeoutSeconds = message?.payload?.timeoutSeconds;\n if (timeoutSeconds) {\n timeoutSecondsParsed = +timeoutSeconds;\n }\n\n this.testQueueLogger.debug(`Processing message with timeout: ${timeoutSecondsParsed}`);\n\n return new Promise((resolve) => {\n setTimeout(() => {\n this.testQueueLogger.debug(`Processed message: ${JSON.stringify(message)}`);\n resolve({ status: 'success', messageId: message.messageId, message: 'Processed message' });\n }, timeoutSecondsParsed * 1000);\n });\n }\n}\n"]}
@@ -10,6 +10,6 @@ export declare class Three60WhatsappQueueSubscriber extends RabbitMqSubscriber<a
10
10
  readonly mqMessageQueueService: MqMessageQueueService;
11
11
  constructor(whatsappService: Three60WhatsappService, mqMessageService: MqMessageService, mqMessageQueueService: MqMessageQueueService);
12
12
  options(): QueuesModuleOptions;
13
- subscribe(message: QueueMessage<any>): void;
13
+ subscribe(message: QueueMessage<any>): Promise<void>;
14
14
  }
15
15
  //# sourceMappingURL=three60-whatsapp-subscriber.service.d.ts.map
@@ -32,7 +32,7 @@ let Three60WhatsappQueueSubscriber = class Three60WhatsappQueueSubscriber extend
32
32
  };
33
33
  }
34
34
  subscribe(message) {
35
- this.whatsappService.sendWhatsAppMessageSynchronously(message);
35
+ return this.whatsappService.sendWhatsAppMessageSynchronously(message);
36
36
  }
37
37
  };
38
38
  exports.Three60WhatsappQueueSubscriber = Three60WhatsappQueueSubscriber;
@@ -1 +1 @@
1
- {"version":3,"file":"three60-whatsapp-subscriber.service.js","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/three60-whatsapp-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,mGAAqF;AAErF,sGAAoE;AACpE,0EAAmE;AACnE,sFAA8E;AAE9E,2FAAsF;AAG/E,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,gDAAuB;IACvE,YACqB,eAAuC,EAC/C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAwB;QAC/C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,wCAAoB;SAC1B,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;CACJ,CAAA;AAlBY,wEAA8B;yCAA9B,8BAA8B;IAD1C,IAAA,mBAAU,GAAE;qCAG6B,+CAAsB;QAC7B,qCAAgB;QACX,gDAAqB;GAJhD,8BAA8B,CAkB1C","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueOptions from './three60-whatsapp-queue-options';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { Three60WhatsappService } from 'src/services/whatsapp/Three60WhatsappService';\n\n@Injectable()\nexport class Three60WhatsappQueueSubscriber extends RabbitMqSubscriber<any> {\n constructor(\n private readonly whatsappService: Three60WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
1
+ {"version":3,"file":"three60-whatsapp-subscriber.service.js","sourceRoot":"","sources":["../../../src/jobs/rabbitmq/three60-whatsapp-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,mGAAqF;AAErF,sGAAoE;AACpE,0EAAmE;AACnE,sFAA8E;AAE9E,2FAAsF;AAG/E,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,gDAAuB;IACvE,YACqB,eAAuC,EAC/C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAwB;QAC/C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,wCAAoB;SAC1B,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ,CAAA;AAlBY,wEAA8B;yCAA9B,8BAA8B;IAD1C,IAAA,mBAAU,GAAE;qCAG6B,+CAAsB;QAC7B,qCAAgB;QACX,gDAAqB;GAJhD,8BAA8B,CAkB1C","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueOptions from './three60-whatsapp-queue-options';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { Three60WhatsappService } from 'src/services/whatsapp/Three60WhatsappService';\n\n@Injectable()\nexport class Three60WhatsappQueueSubscriber extends RabbitMqSubscriber<any> {\n constructor(\n private readonly whatsappService: Three60WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n return this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
@@ -10,6 +10,6 @@ export declare class ApiEmailQueueSubscriberRedis extends RedisSubscriber<any> {
10
10
  readonly mqMessageQueueService: MqMessageQueueService;
11
11
  constructor(emailService: ElasticEmailService, mqMessageService: MqMessageService, mqMessageQueueService: MqMessageQueueService);
12
12
  options(): QueuesModuleOptions;
13
- subscribe(message: QueueMessage<any>): void;
13
+ subscribe(message: QueueMessage<any>): Promise<void>;
14
14
  }
15
15
  //# sourceMappingURL=api-email-subscriber-redis.service.d.ts.map
@@ -32,7 +32,7 @@ let ApiEmailQueueSubscriberRedis = class ApiEmailQueueSubscriberRedis extends re
32
32
  };
33
33
  }
34
34
  subscribe(message) {
35
- this.emailService.sendEmailSynchronously(message);
35
+ return this.emailService.sendEmailSynchronously(message);
36
36
  }
37
37
  };
38
38
  exports.ApiEmailQueueSubscriberRedis = ApiEmailQueueSubscriberRedis;
@@ -1 +1 @@
1
- {"version":3,"file":"api-email-subscriber-redis.service.js","sourceRoot":"","sources":["../../../src/jobs/redis/api-email-subscriber-redis.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6FAA+E;AAE/E,oGAAkE;AAClE,0EAAqE;AACrE,sFAAgF;AAEhF,qFAAgF;AAGzE,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,0CAAoB;IAClE,YACqB,YAAiC,EACzC,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,iBAAY,GAAZ,YAAY,CAAqB;QACzC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,uCAAmB;SACzB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;CACJ,CAAA;AAlBY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,mBAAU,GAAE;qCAG0B,2CAAmB;QACvB,qCAAgB;QACX,gDAAqB;GAJhD,4BAA4B,CAkBxC","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RedisSubscriber } from 'src/services/queues/redis-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport apiEmailQueueConfig from './api-email-queue-options-redis';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { ElasticEmailService } from '../../services/mail/elastic-email.service';\n\n@Injectable()\nexport class ApiEmailQueueSubscriberRedis extends RedisSubscriber<any> {\n constructor(\n private readonly emailService: ElasticEmailService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...apiEmailQueueConfig\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n this.emailService.sendEmailSynchronously(message);\n }\n}\n"]}
1
+ {"version":3,"file":"api-email-subscriber-redis.service.js","sourceRoot":"","sources":["../../../src/jobs/redis/api-email-subscriber-redis.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6FAA+E;AAE/E,oGAAkE;AAClE,0EAAqE;AACrE,sFAAgF;AAEhF,qFAAgF;AAGzE,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,0CAAoB;IAClE,YACqB,YAAiC,EACzC,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,iBAAY,GAAZ,YAAY,CAAqB;QACzC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,uCAAmB;SACzB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;CACJ,CAAA;AAlBY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,mBAAU,GAAE;qCAG0B,2CAAmB;QACvB,qCAAgB;QACX,gDAAqB;GAJhD,4BAA4B,CAkBxC","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RedisSubscriber } from 'src/services/queues/redis-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport apiEmailQueueConfig from './api-email-queue-options-redis';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { ElasticEmailService } from '../../services/mail/elastic-email.service';\n\n@Injectable()\nexport class ApiEmailQueueSubscriberRedis extends RedisSubscriber<any> {\n constructor(\n private readonly emailService: ElasticEmailService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...apiEmailQueueConfig\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n return this.emailService.sendEmailSynchronously(message);\n }\n}\n"]}
@@ -10,6 +10,6 @@ export declare class Msg91WhatsappQueueSubscriberRedis extends RedisSubscriber<a
10
10
  readonly mqMessageQueueService: MqMessageQueueService;
11
11
  constructor(whatsappService: Msg91WhatsappService, mqMessageService: MqMessageService, mqMessageQueueService: MqMessageQueueService);
12
12
  options(): QueuesModuleOptions;
13
- subscribe(message: QueueMessage<any>): void;
13
+ subscribe(message: QueueMessage<any>): Promise<void>;
14
14
  }
15
15
  //# sourceMappingURL=msg91-whatsapp-subscriber-redis.service.d.ts.map
@@ -32,7 +32,7 @@ let Msg91WhatsappQueueSubscriberRedis = class Msg91WhatsappQueueSubscriberRedis
32
32
  };
33
33
  }
34
34
  subscribe(message) {
35
- this.whatsappService.sendWhatsAppMessageSynchronously(message);
35
+ return this.whatsappService.sendWhatsAppMessageSynchronously(message);
36
36
  }
37
37
  };
38
38
  exports.Msg91WhatsappQueueSubscriberRedis = Msg91WhatsappQueueSubscriberRedis;
@@ -1 +1 @@
1
- {"version":3,"file":"msg91-whatsapp-subscriber-redis.service.js","sourceRoot":"","sources":["../../../src/jobs/redis/msg91-whatsapp-subscriber-redis.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6FAA+E;AAE/E,8GAAuE;AACvE,0EAAqE;AACrE,sFAAgF;AAEhF,uFAAoF;AAG7E,IAAM,iCAAiC,GAAvC,MAAM,iCAAkC,SAAQ,0CAAoB;IACvE,YACqB,eAAqC,EAC7C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAsB;QAC7C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,4CAAmB;SACzB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;CACJ,CAAA;AAlBY,8EAAiC;4CAAjC,iCAAiC;IAD7C,IAAA,mBAAU,GAAE;qCAG6B,2CAAoB;QAC3B,qCAAgB;QACX,gDAAqB;GAJhD,iCAAiC,CAkB7C","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RedisSubscriber } from 'src/services/queues/redis-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueConfig from './msg91-whatsapp-queue-options-redis';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { Msg91WhatsappService } from '../../services/whatsapp/Msg91WhatsappService';\n\n@Injectable()\nexport class Msg91WhatsappQueueSubscriberRedis extends RedisSubscriber<any> {\n constructor(\n private readonly whatsappService: Msg91WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueConfig\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
1
+ {"version":3,"file":"msg91-whatsapp-subscriber-redis.service.js","sourceRoot":"","sources":["../../../src/jobs/redis/msg91-whatsapp-subscriber-redis.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6FAA+E;AAE/E,8GAAuE;AACvE,0EAAqE;AACrE,sFAAgF;AAEhF,uFAAoF;AAG7E,IAAM,iCAAiC,GAAvC,MAAM,iCAAkC,SAAQ,0CAAoB;IACvE,YACqB,eAAqC,EAC7C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAsB;QAC7C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,4CAAmB;SACzB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ,CAAA;AAlBY,8EAAiC;4CAAjC,iCAAiC;IAD7C,IAAA,mBAAU,GAAE;qCAG6B,2CAAoB;QAC3B,qCAAgB;QACX,gDAAqB;GAJhD,iCAAiC,CAkB7C","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RedisSubscriber } from 'src/services/queues/redis-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueConfig from './msg91-whatsapp-queue-options-redis';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { Msg91WhatsappService } from '../../services/whatsapp/Msg91WhatsappService';\n\n@Injectable()\nexport class Msg91WhatsappQueueSubscriberRedis extends RedisSubscriber<any> {\n constructor(\n private readonly whatsappService: Msg91WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueConfig\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n return this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
@@ -10,6 +10,6 @@ export declare class Three60WhatsappQueueSubscriberRedis extends RedisSubscriber
10
10
  readonly mqMessageQueueService: MqMessageQueueService;
11
11
  constructor(whatsappService: Three60WhatsappService, mqMessageService: MqMessageService, mqMessageQueueService: MqMessageQueueService);
12
12
  options(): QueuesModuleOptions;
13
- subscribe(message: QueueMessage<any>): void;
13
+ subscribe(message: QueueMessage<any>): Promise<void>;
14
14
  }
15
15
  //# sourceMappingURL=three60-whatsapp-subscriber-redis.service.d.ts.map
@@ -32,7 +32,7 @@ let Three60WhatsappQueueSubscriberRedis = class Three60WhatsappQueueSubscriberRe
32
32
  };
33
33
  }
34
34
  subscribe(message) {
35
- this.whatsappService.sendWhatsAppMessageSynchronously(message);
35
+ return this.whatsappService.sendWhatsAppMessageSynchronously(message);
36
36
  }
37
37
  };
38
38
  exports.Three60WhatsappQueueSubscriberRedis = Three60WhatsappQueueSubscriberRedis;
@@ -1 +1 @@
1
- {"version":3,"file":"three60-whatsapp-subscriber-redis.service.js","sourceRoot":"","sources":["../../../src/jobs/redis/three60-whatsapp-subscriber-redis.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6FAA+E;AAE/E,kHAAgF;AAChF,0EAAqE;AACrE,sFAAgF;AAEhF,2FAAwF;AAGjF,IAAM,mCAAmC,GAAzC,MAAM,mCAAoC,SAAQ,0CAAoB;IACzE,YACqB,eAAuC,EAC/C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAwB;QAC/C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,8CAA0B;SAChC,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;CACJ,CAAA;AAlBY,kFAAmC;8CAAnC,mCAAmC;IAD/C,IAAA,mBAAU,GAAE;qCAG6B,+CAAsB;QAC7B,qCAAgB;QACX,gDAAqB;GAJhD,mCAAmC,CAkB/C","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RedisSubscriber } from 'src/services/queues/redis-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport three60WhatsappQueueConfig from './three60-whatsapp-queue-options-redis';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { Three60WhatsappService } from '../../services/whatsapp/Three60WhatsappService';\n\n@Injectable()\nexport class Three60WhatsappQueueSubscriberRedis extends RedisSubscriber<any> {\n constructor(\n private readonly whatsappService: Three60WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...three60WhatsappQueueConfig\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
1
+ {"version":3,"file":"three60-whatsapp-subscriber-redis.service.js","sourceRoot":"","sources":["../../../src/jobs/redis/three60-whatsapp-subscriber-redis.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6FAA+E;AAE/E,kHAAgF;AAChF,0EAAqE;AACrE,sFAAgF;AAEhF,2FAAwF;AAGjF,IAAM,mCAAmC,GAAzC,MAAM,mCAAoC,SAAQ,0CAAoB;IACzE,YACqB,eAAuC,EAC/C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAwB;QAC/C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,8CAA0B;SAChC,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ,CAAA;AAlBY,kFAAmC;8CAAnC,mCAAmC;IAD/C,IAAA,mBAAU,GAAE;qCAG6B,+CAAsB;QAC7B,qCAAgB;QACX,gDAAqB;GAJhD,mCAAmC,CAkB/C","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RedisSubscriber } from 'src/services/queues/redis-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport three60WhatsappQueueConfig from './three60-whatsapp-queue-options-redis';\nimport { MqMessageService } from '../../services/mq-message.service';\nimport { MqMessageQueueService } from '../../services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../../interfaces\";\nimport { Three60WhatsappService } from '../../services/whatsapp/Three60WhatsappService';\n\n@Injectable()\nexport class Three60WhatsappQueueSubscriberRedis extends RedisSubscriber<any> {\n constructor(\n private readonly whatsappService: Three60WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...three60WhatsappQueueConfig\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n return this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chatter-message-details.repository.d.ts","sourceRoot":"","sources":["../../src/repository/chatter-message-details.repository.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,WAAW,EACX,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAEpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,qBACa,+BAAgC,SAAQ,mBAAmB,CAAC,qBAAqB,CAAC;IAE3F,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;gBAF9C,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB;IAIvD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4C;IAQlE,mCAAmC,CAChD,KAAK,SAAW,EAChB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;IAqCrD,eAAe,CAAC,CAAC,EACf,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACzB,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,MAAkB,GAC/B,kBAAkB,CAAC,CAAC,CAAC;IAqBxB,OAAO,CAAC,sBAAsB;CAW/B"}
1
+ {"version":3,"file":"chatter-message-details.repository.d.ts","sourceRoot":"","sources":["../../src/repository/chatter-message-details.repository.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,WAAW,EACX,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAEpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,qBACa,+BAAgC,SAAQ,mBAAmB,CAAC,qBAAqB,CAAC;IAE3F,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;gBAF9C,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB;IAIvD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4C;IAQlE,mCAAmC,CAChD,KAAK,SAAW,EAChB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;IAqCrD,eAAe,CAAC,CAAC,EACf,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACzB,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,MAAkB,GAC/B,kBAAkB,CAAC,CAAC,CAAC;IAqBxB,OAAO,CAAC,sBAAsB;CAW/B"}
@@ -12,12 +12,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ChatterMessageDetailsRepository = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const typeorm_1 = require("typeorm");
15
- const strings_1 = require("@angular-devkit/core/src/utils/strings");
15
+ const lodash_1 = require("lodash");
16
+ const string_helper_1 = require("../helpers/string.helper");
16
17
  const chatter_message_details_entity_1 = require("../entities/chatter-message-details.entity");
17
18
  const request_context_service_1 = require("../services/request-context.service");
18
19
  const security_rule_repository_1 = require("./security-rule.repository");
19
20
  const solid_base_repository_1 = require("./solid-base.repository");
20
- const lodash_1 = require("lodash");
21
+ const lodash_2 = require("lodash");
21
22
  let ChatterMessageDetailsRepository = class ChatterMessageDetailsRepository extends solid_base_repository_1.SolidBaseRepository {
22
23
  constructor(dataSource, requestContextService, securityRuleRepository) {
23
24
  super(chatter_message_details_entity_1.ChatterMessageDetails, dataSource, requestContextService, securityRuleRepository);
@@ -39,9 +40,9 @@ let ChatterMessageDetailsRepository = class ChatterMessageDetailsRepository exte
39
40
  return this.securityRuleRepository.applySecurityRules(qb, coModelName, activeUser, coModelAlias);
40
41
  }
41
42
  leftJoinCoModel(qb, coModelName, messageAlias = 'message') {
42
- const entityName = (0, strings_1.classify)(coModelName);
43
+ const entityName = (0, string_helper_1.classify)(coModelName);
43
44
  const meta = this.dataSource.getMetadata(entityName);
44
- const coAlias = (0, strings_1.camelize)(meta.name);
45
+ const coAlias = (0, lodash_1.camelCase)(meta.name);
45
46
  qb.leftJoin(entityName, coAlias, `"${coAlias}"."id" = "${messageAlias}"."co_model_entity_id" AND "${messageAlias}"."co_model_name" = :model`, { model: coModelName });
46
47
  return qb;
47
48
  }
@@ -49,10 +50,10 @@ let ChatterMessageDetailsRepository = class ChatterMessageDetailsRepository exte
49
50
  const requestFilter = this.requestContextService.getRequestFilter();
50
51
  if (!requestFilter)
51
52
  return [undefined, undefined];
52
- const coModelName = (0, lodash_1.get)(requestFilter, this.CO_MODEL_NAME_PATH);
53
+ const coModelName = (0, lodash_2.get)(requestFilter, this.CO_MODEL_NAME_PATH);
53
54
  if (!coModelName)
54
55
  return [undefined, undefined];
55
- const alias = (0, strings_1.camelize)(coModelName);
56
+ const alias = (0, lodash_1.camelCase)(coModelName);
56
57
  return [coModelName, alias];
57
58
  }
58
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"chatter-message-details.repository.js","sourceRoot":"","sources":["../../src/repository/chatter-message-details.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,qCAIiB;AACjB,oEAA4E;AAE5E,+FAAoF;AAEpF,iFAA6E;AAC7E,yEAAoE;AACpE,mEAA8D;AAC9D,mCAA0B;AAInB,IAAM,+BAA+B,GAArC,MAAM,+BAAgC,SAAQ,2CAA0C;IAC7F,YACW,UAAsB,EACtB,qBAA4C,EAC5C,sBAA8C;QAEvD,KAAK,CAAC,sDAAqB,EAAE,UAAU,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;QAJ/E,eAAU,GAAV,UAAU,CAAY;QACtB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,2BAAsB,GAAtB,sBAAsB,CAAwB;QAItC,uBAAkB,GAAG,wCAAwC,CAAC;IADjF,CAAC;IASQ,KAAK,CAAC,mCAAmC,CAChD,KAAK,GAAG,QAAQ,EAChB,WAAyB;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QAC9D,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,mCAAmC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAG3B,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClE,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAG5B,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAC9D,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAI7D,OAAO,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CACnD,EAAE,EACF,WAAW,EACX,UAA4B,EAC5B,YAAY,CACb,CAAC;IACJ,CAAC;IAgBD,eAAe,CACb,EAAyB,EACzB,WAAmB,EACnB,eAAuB,SAAS;QAGhC,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,WAAW,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAKpC,EAAE,CAAC,QAAQ,CACT,UAAU,EACV,OAAO,EACP,IAAI,OAAO,aAAa,YAAY,+BAA+B,YAAY,4BAA4B,EAC3G,EAAE,KAAK,EAAE,WAAW,EAAE,CACvB,CAAC;QAEF,OAAO,EAAE,CAAC;IACZ,CAAC;IAGO,sBAAsB;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QACpE,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAElD,MAAM,WAAW,GAAG,IAAA,YAAG,EAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,WAAW,CAAC,CAAC;QACpC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;CAEF,CAAA;AA5FY,0EAA+B;0CAA/B,+BAA+B;IAD3C,IAAA,mBAAU,GAAE;qCAGY,oBAAU;QACC,+CAAqB;QACpB,iDAAsB;GAJ9C,+BAA+B,CA4F3C","sourcesContent":["import { Injectable } from '@nestjs/common';\nimport {\n DataSource,\n QueryRunner,\n SelectQueryBuilder,\n} from 'typeorm';\nimport { camelize, classify } from '@angular-devkit/core/src/utils/strings';\n\nimport { ChatterMessageDetails } from 'src/entities/chatter-message-details.entity';\nimport { ActiveUserData } from 'src/interfaces/active-user-data.interface';\nimport { RequestContextService } from 'src/services/request-context.service';\nimport { SecurityRuleRepository } from './security-rule.repository';\nimport { SolidBaseRepository } from './solid-base.repository';\nimport {get} from \"lodash\"\n\n\n@Injectable()\nexport class ChatterMessageDetailsRepository extends SolidBaseRepository<ChatterMessageDetails> {\n constructor(\n readonly dataSource: DataSource,\n readonly requestContextService: RequestContextService,\n readonly securityRuleRepository: SecurityRuleRepository,\n ) {\n super(ChatterMessageDetails, dataSource, requestContextService, securityRuleRepository);\n }\n private readonly CO_MODEL_NAME_PATH = 'filters.chatterMessage.coModelName.$eq';\n\n /**\n * Build a security-aware QB:\n * - join the real relation to ChatterMessage (alias: \"message\")\n * - left join the polymorphic co-model table using message.co_model_* fields\n * - (optionally) apply security rules on the co-model alias\n */\n override async createSecurityRuleAwareQueryBuilder(\n alias = 'detail',\n queryRunner?: QueryRunner,\n ): Promise<SelectQueryBuilder<ChatterMessageDetails>> {\n const activeUser = this.requestContextService.getActiveUser();\n let qb = await super.createSecurityRuleAwareQueryBuilder(alias, queryRunner);\n if (!activeUser) return qb;\n\n // Example: join the \"client\" co-model (pass whatever co-model name you need)\n const [coModelName, coModelAlias] = this.getCoModelNameAndAlias();\n if (!coModelName) return qb;\n\n // Join the real relation so we can access co_model_* fields\n qb = qb.leftJoin(`${alias}.chatterMessage`, 'chatterMessage');\n qb = this.leftJoinCoModel(qb, coModelName, 'chatterMessage');\n\n // If your security rules should apply to the co-model rows, pass the co-model alias.\n // Here we use the co-model name \"client\" both as model key and alias base for consistency.\n return this.securityRuleRepository.applySecurityRules(\n qb,\n coModelName, // modelSingularName (or whatever your rules expect)\n activeUser as ActiveUserData,\n coModelAlias, // the alias we used inside leftJoinCoModel\n );\n }\n\n /**\n * Left-join the polymorphic co-model table, matching:\n * <coModelAlias>.id = <messageAlias>.co_model_entity_id\n * AND <messageAlias>.co_model_name = :model\n *\n * @param qb QB built on ChatterMessageDetails\n * @param coModelName e.g. \"client\" | \"invoice\" | ...\n * @param messageAlias alias used for joined ChatterMessage (default: \"message\")\n *\n * Notes:\n * - We resolve the entity metadata from the classified name (e.g., \"Client\"),\n * then use metadata.tablePath to get schema-qualified table.\n * - We build a stable alias from metadata.name (camelized).\n */\n leftJoinCoModel<T>(\n qb: SelectQueryBuilder<T>,\n coModelName: string,\n messageAlias: string = 'message',\n ): SelectQueryBuilder<T> {\n // Resolve entity metadata from your naming convention\n const entityName = classify(coModelName); // \"client\" -> \"Client\"\n const meta = this.dataSource.getMetadata(entityName); // throws if not registered\n // const table = meta.tablePath; // schema-qualified\n const coAlias = camelize(meta.name); // stable alias, e.g., \"client\"\n\n // LEFT JOIN \"<schema>\".\"<table>\" \"<coAlias>\"\n // ON \"<coAlias>\".\"id\" = \"message\".\"co_model_entity_id\"\n // AND \"message\".\"co_model_name\" = :model\n qb.leftJoin(\n entityName,\n coAlias,\n `\"${coAlias}\".\"id\" = \"${messageAlias}\".\"co_model_entity_id\" AND \"${messageAlias}\".\"co_model_name\" = :model`,\n { model: coModelName },\n );\n\n return qb;\n }\n\n // This uses the requestContextService.getRequestFilter method and extracts the coModelName and creates the alias and returns the name and alias tuple\n private getCoModelNameAndAlias() {\n const requestFilter = this.requestContextService.getRequestFilter();\n if (!requestFilter) return [undefined, undefined];\n\n const coModelName = get(requestFilter, this.CO_MODEL_NAME_PATH);\n if (!coModelName) return [undefined, undefined];\n\n const alias = camelize(coModelName);\n return [coModelName, alias];\n }\n\n}"]}
1
+ {"version":3,"file":"chatter-message-details.repository.js","sourceRoot":"","sources":["../../src/repository/chatter-message-details.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,qCAIiB;AACjB,mCAA+C;AAC/C,4DAAoD;AAEpD,+FAAoF;AAEpF,iFAA6E;AAC7E,yEAAoE;AACpE,mEAA8D;AAC9D,mCAA0B;AAInB,IAAM,+BAA+B,GAArC,MAAM,+BAAgC,SAAQ,2CAA0C;IAC7F,YACW,UAAsB,EACtB,qBAA4C,EAC5C,sBAA8C;QAEvD,KAAK,CAAC,sDAAqB,EAAE,UAAU,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;QAJ/E,eAAU,GAAV,UAAU,CAAY;QACtB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,2BAAsB,GAAtB,sBAAsB,CAAwB;QAItC,uBAAkB,GAAG,wCAAwC,CAAC;IADjF,CAAC;IASQ,KAAK,CAAC,mCAAmC,CAChD,KAAK,GAAG,QAAQ,EAChB,WAAyB;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QAC9D,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,mCAAmC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAG3B,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClE,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAG5B,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAC9D,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAI7D,OAAO,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CACnD,EAAE,EACF,WAAW,EACX,UAA4B,EAC5B,YAAY,CACb,CAAC;IACJ,CAAC;IAgBD,eAAe,CACb,EAAyB,EACzB,WAAmB,EACnB,eAAuB,SAAS;QAGhC,MAAM,UAAU,GAAG,IAAA,wBAAQ,EAAC,WAAW,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,IAAA,kBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAKrC,EAAE,CAAC,QAAQ,CACT,UAAU,EACV,OAAO,EACP,IAAI,OAAO,aAAa,YAAY,+BAA+B,YAAY,4BAA4B,EAC3G,EAAE,KAAK,EAAE,WAAW,EAAE,CACvB,CAAC;QAEF,OAAO,EAAE,CAAC;IACZ,CAAC;IAGO,sBAAsB;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QACpE,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAElD,MAAM,WAAW,GAAG,IAAA,YAAG,EAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,IAAA,kBAAS,EAAC,WAAW,CAAC,CAAC;QACrC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;CAEF,CAAA;AA5FY,0EAA+B;0CAA/B,+BAA+B;IAD3C,IAAA,mBAAU,GAAE;qCAGY,oBAAU;QACC,+CAAqB;QACpB,iDAAsB;GAJ9C,+BAA+B,CA4F3C","sourcesContent":["import { Injectable } from '@nestjs/common';\nimport {\n DataSource,\n QueryRunner,\n SelectQueryBuilder,\n} from 'typeorm';\nimport { upperFirst, camelCase } from 'lodash';\nimport { classify } from '../helpers/string.helper';\n\nimport { ChatterMessageDetails } from 'src/entities/chatter-message-details.entity';\nimport { ActiveUserData } from 'src/interfaces/active-user-data.interface';\nimport { RequestContextService } from 'src/services/request-context.service';\nimport { SecurityRuleRepository } from './security-rule.repository';\nimport { SolidBaseRepository } from './solid-base.repository';\nimport {get} from \"lodash\"\n\n\n@Injectable()\nexport class ChatterMessageDetailsRepository extends SolidBaseRepository<ChatterMessageDetails> {\n constructor(\n readonly dataSource: DataSource,\n readonly requestContextService: RequestContextService,\n readonly securityRuleRepository: SecurityRuleRepository,\n ) {\n super(ChatterMessageDetails, dataSource, requestContextService, securityRuleRepository);\n }\n private readonly CO_MODEL_NAME_PATH = 'filters.chatterMessage.coModelName.$eq';\n\n /**\n * Build a security-aware QB:\n * - join the real relation to ChatterMessage (alias: \"message\")\n * - left join the polymorphic co-model table using message.co_model_* fields\n * - (optionally) apply security rules on the co-model alias\n */\n override async createSecurityRuleAwareQueryBuilder(\n alias = 'detail',\n queryRunner?: QueryRunner,\n ): Promise<SelectQueryBuilder<ChatterMessageDetails>> {\n const activeUser = this.requestContextService.getActiveUser();\n let qb = await super.createSecurityRuleAwareQueryBuilder(alias, queryRunner);\n if (!activeUser) return qb;\n\n // Example: join the \"client\" co-model (pass whatever co-model name you need)\n const [coModelName, coModelAlias] = this.getCoModelNameAndAlias();\n if (!coModelName) return qb;\n\n // Join the real relation so we can access co_model_* fields\n qb = qb.leftJoin(`${alias}.chatterMessage`, 'chatterMessage');\n qb = this.leftJoinCoModel(qb, coModelName, 'chatterMessage');\n\n // If your security rules should apply to the co-model rows, pass the co-model alias.\n // Here we use the co-model name \"client\" both as model key and alias base for consistency.\n return this.securityRuleRepository.applySecurityRules(\n qb,\n coModelName, // modelSingularName (or whatever your rules expect)\n activeUser as ActiveUserData,\n coModelAlias, // the alias we used inside leftJoinCoModel\n );\n }\n\n /**\n * Left-join the polymorphic co-model table, matching:\n * <coModelAlias>.id = <messageAlias>.co_model_entity_id\n * AND <messageAlias>.co_model_name = :model\n *\n * @param qb QB built on ChatterMessageDetails\n * @param coModelName e.g. \"client\" | \"invoice\" | ...\n * @param messageAlias alias used for joined ChatterMessage (default: \"message\")\n *\n * Notes:\n * - We resolve the entity metadata from the classified name (e.g., \"Client\"),\n * then use metadata.tablePath to get schema-qualified table.\n * - We build a stable alias from metadata.name (camelized).\n */\n leftJoinCoModel<T>(\n qb: SelectQueryBuilder<T>,\n coModelName: string,\n messageAlias: string = 'message',\n ): SelectQueryBuilder<T> {\n // Resolve entity metadata from your naming convention\n const entityName = classify(coModelName); // \"client\" -> \"Client\"\n const meta = this.dataSource.getMetadata(entityName); // throws if not registered\n // const table = meta.tablePath; // schema-qualified\n const coAlias = camelCase(meta.name); // stable alias, e.g., \"client\"\n\n // LEFT JOIN \"<schema>\".\"<table>\" \"<coAlias>\"\n // ON \"<coAlias>\".\"id\" = \"message\".\"co_model_entity_id\"\n // AND \"message\".\"co_model_name\" = :model\n qb.leftJoin(\n entityName,\n coAlias,\n `\"${coAlias}\".\"id\" = \"${messageAlias}\".\"co_model_entity_id\" AND \"${messageAlias}\".\"co_model_name\" = :model`,\n { model: coModelName },\n );\n\n return qb;\n }\n\n // This uses the requestContextService.getRequestFilter method and extracts the coModelName and creates the alias and returns the name and alias tuple\n private getCoModelNameAndAlias() {\n const requestFilter = this.requestContextService.getRequestFilter();\n if (!requestFilter) return [undefined, undefined];\n\n const coModelName = get(requestFilter, this.CO_MODEL_NAME_PATH);\n if (!coModelName) return [undefined, undefined];\n\n const alias = camelCase(coModelName);\n return [coModelName, alias];\n }\n\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chatter-message.repository.d.ts","sourceRoot":"","sources":["../../src/repository/chatter-message.repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,qBACa,wBAAyB,SAAQ,mBAAmB,CAAC,cAAc,CAAC;IAEzE,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;gBAF9C,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB;IAK3D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IACjD,mCAAmC,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAkB1I,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,sBAAsB;CAUjC"}
1
+ {"version":3,"file":"chatter-message.repository.d.ts","sourceRoot":"","sources":["../../src/repository/chatter-message.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI9D,qBACa,wBAAyB,SAAQ,mBAAmB,CAAC,cAAc,CAAC;IAEzE,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;gBAF9C,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB;IAK3D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IACjD,mCAAmC,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAkB1I,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,sBAAsB;CAUjC"}
@@ -10,7 +10,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ChatterMessageRepository = void 0;
13
- const strings_1 = require("@angular-devkit/core/src/utils/strings");
14
13
  const common_1 = require("@nestjs/common");
15
14
  const chatter_message_entity_1 = require("../entities/chatter-message.entity");
16
15
  const request_context_service_1 = require("../services/request-context.service");
@@ -18,6 +17,7 @@ const typeorm_1 = require("typeorm");
18
17
  const security_rule_repository_1 = require("./security-rule.repository");
19
18
  const solid_base_repository_1 = require("./solid-base.repository");
20
19
  const lodash_1 = require("lodash");
20
+ const string_helper_1 = require("../helpers/string.helper");
21
21
  let ChatterMessageRepository = class ChatterMessageRepository extends solid_base_repository_1.SolidBaseRepository {
22
22
  constructor(dataSource, requestContextService, securityRuleRepository) {
23
23
  super(chatter_message_entity_1.ChatterMessage, dataSource, requestContextService, securityRuleRepository);
@@ -38,9 +38,9 @@ let ChatterMessageRepository = class ChatterMessageRepository extends solid_base
38
38
  return this.securityRuleRepository.applySecurityRules(qb, coModelName, activeUserOrUndefined, coModelAlias);
39
39
  }
40
40
  leftJoinCoModel(qb, coModelName) {
41
- const entityName = (0, strings_1.classify)(coModelName);
41
+ const entityName = (0, string_helper_1.classify)(coModelName);
42
42
  const meta = this.dataSource.getMetadata(entityName);
43
- const alias = (0, strings_1.camelize)(meta.name);
43
+ const alias = (0, lodash_1.camelCase)(meta.name);
44
44
  qb.leftJoin(entityName, alias, `${alias}.id = entity.co_model_entity_id AND entity.co_model_name = :model`, { model: coModelName });
45
45
  return qb;
46
46
  }
@@ -51,7 +51,7 @@ let ChatterMessageRepository = class ChatterMessageRepository extends solid_base
51
51
  const coModelName = (0, lodash_1.get)(requestFilter, this.CO_MODEL_NAME_PATH);
52
52
  if (!coModelName)
53
53
  return [undefined, undefined];
54
- const alias = (0, strings_1.camelize)(coModelName);
54
+ const alias = (0, lodash_1.camelCase)(coModelName);
55
55
  return [coModelName, alias];
56
56
  }
57
57
  };
@@ -1 +1 @@
1
- {"version":3,"file":"chatter-message.repository.js","sourceRoot":"","sources":["../../src/repository/chatter-message.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAA4E;AAC5E,2CAA4C;AAC5C,+EAAqE;AAErE,iFAA6E;AAC7E,qCAAsE;AACtE,yEAAoE;AACpE,mEAA8D;AAC9D,mCAA0B;AAGnB,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,2CAAmC;IAC7E,YACa,UAAsB,EACtB,qBAA4C,EAC5C,sBAA8C;QAEvD,KAAK,CAAC,uCAAc,EAAE,UAAU,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;QAJxE,eAAU,GAAV,UAAU,CAAY;QACtB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,2BAAsB,GAAtB,sBAAsB,CAAwB;QAK1C,uBAAkB,GAAG,yBAAyB,CAAC;IAFhE,CAAC;IAGQ,KAAK,CAAC,mCAAmC,CAAC,KAAc,EAAE,WAAyB;QACxF,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QACzE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,mCAAmC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC7E,IAAI,CAAC,qBAAqB;YAAE,OAAO,EAAE,CAAC;QAGtC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClE,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAC5B,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CACjD,EAAE,EACF,WAAW,EACX,qBAAuC,EACvC,YAAY,CACf,CAAC;IACN,CAAC;IAEO,eAAe,CACnB,EAAsC,EACtC,WAAmB;QAGnB,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,WAAW,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,EAAE,CAAC,QAAQ,CACP,UAAU,EACV,KAAK,EAEL,GAAG,KAAK,mEAAmE,EAC3E,EAAE,KAAK,EAAE,WAAW,EAAE,CACzB,CAAC;QACF,OAAO,EAAE,CAAC;IAEd,CAAC;IAGO,sBAAsB;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QACpE,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAElD,MAAM,WAAW,GAAG,IAAA,YAAG,EAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,WAAW,CAAC,CAAC;QACpC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;CAEJ,CAAA;AA1DY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAGgB,oBAAU;QACC,+CAAqB;QACpB,iDAAsB;GAJlD,wBAAwB,CA0DpC","sourcesContent":["import { camelize, classify } from \"@angular-devkit/core/src/utils/strings\";\nimport { Injectable } from \"@nestjs/common\";\nimport { ChatterMessage } from \"src/entities/chatter-message.entity\";\nimport { ActiveUserData } from \"src/interfaces/active-user-data.interface\";\nimport { RequestContextService } from \"src/services/request-context.service\";\nimport { DataSource, QueryRunner, SelectQueryBuilder } from \"typeorm\";\nimport { SecurityRuleRepository } from \"./security-rule.repository\";\nimport { SolidBaseRepository } from \"./solid-base.repository\";\nimport {get} from \"lodash\"\n\n@Injectable()\nexport class ChatterMessageRepository extends SolidBaseRepository<ChatterMessage> {\n constructor(\n readonly dataSource: DataSource,\n readonly requestContextService: RequestContextService,\n readonly securityRuleRepository: SecurityRuleRepository,\n ) {\n super(ChatterMessage, dataSource, requestContextService, securityRuleRepository);\n }\n\n private readonly CO_MODEL_NAME_PATH = 'filters.coModelName.$eq';\n override async createSecurityRuleAwareQueryBuilder(alias?: string, queryRunner?: QueryRunner): Promise<SelectQueryBuilder<ChatterMessage>> {\n const activeUserOrUndefined = this.requestContextService.getActiveUser();\n let qb = await super.createSecurityRuleAwareQueryBuilder(alias, queryRunner);\n if (!activeUserOrUndefined) return qb;\n \n //Left join on the associated chatter model entity\n const [coModelName, coModelAlias] = this.getCoModelNameAndAlias();\n if (!coModelName) return qb;\n qb = this.leftJoinCoModel(qb, coModelName);\n \n return this.securityRuleRepository.applySecurityRules(\n qb,\n coModelName,\n activeUserOrUndefined as ActiveUserData,\n coModelAlias\n );\n }\n\n private leftJoinCoModel<ChatterMessage>(\n qb: SelectQueryBuilder<ChatterMessage>,\n coModelName: string\n ) {\n // const Target = resolveEntityFromCoModelName(coModelName); // your mapping\n const entityName = classify(coModelName)\n const meta = this.dataSource.getMetadata(entityName);\n const alias = camelize(meta.name);\n qb.leftJoin(\n entityName,\n alias,\n // `${alias}.id = entity.co_model_entity_id`,\n `${alias}.id = entity.co_model_entity_id AND entity.co_model_name = :model`,\n { model: coModelName }\n );\n return qb;\n // return qb.leftJoin(Target, alias, `${alias}.id = entity.co_model_entity_id`);\n }\n\n // This uses the requestContextService.getRequestFilter method and extracts the coModelName and creates the alias and returns the name and alias tuple\n private getCoModelNameAndAlias() {\n const requestFilter = this.requestContextService.getRequestFilter();\n if (!requestFilter) return [undefined, undefined];\n\n const coModelName = get(requestFilter, this.CO_MODEL_NAME_PATH);\n if (!coModelName) return [undefined, undefined];\n const alias = camelize(coModelName);\n return [coModelName, alias];\n }\n\n}"]}
1
+ {"version":3,"file":"chatter-message.repository.js","sourceRoot":"","sources":["../../src/repository/chatter-message.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,+EAAqE;AAErE,iFAA6E;AAC7E,qCAAsE;AACtE,yEAAoE;AACpE,mEAA8D;AAC9D,mCAAwC;AACxC,4DAAoD;AAG7C,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,2CAAmC;IAC7E,YACa,UAAsB,EACtB,qBAA4C,EAC5C,sBAA8C;QAEvD,KAAK,CAAC,uCAAc,EAAE,UAAU,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;QAJxE,eAAU,GAAV,UAAU,CAAY;QACtB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,2BAAsB,GAAtB,sBAAsB,CAAwB;QAK1C,uBAAkB,GAAG,yBAAyB,CAAC;IAFhE,CAAC;IAGQ,KAAK,CAAC,mCAAmC,CAAC,KAAc,EAAE,WAAyB;QACxF,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QACzE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,mCAAmC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC7E,IAAI,CAAC,qBAAqB;YAAE,OAAO,EAAE,CAAC;QAGtC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClE,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAC5B,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CACjD,EAAE,EACF,WAAW,EACX,qBAAuC,EACvC,YAAY,CACf,CAAC;IACN,CAAC;IAEO,eAAe,CACnB,EAAsC,EACtC,WAAmB;QAGnB,MAAM,UAAU,GAAG,IAAA,wBAAQ,EAAC,WAAW,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,IAAA,kBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,EAAE,CAAC,QAAQ,CACP,UAAU,EACV,KAAK,EAEL,GAAG,KAAK,mEAAmE,EAC3E,EAAE,KAAK,EAAE,WAAW,EAAE,CACzB,CAAC;QACF,OAAO,EAAE,CAAC;IAEd,CAAC;IAGO,sBAAsB;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QACpE,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAElD,MAAM,WAAW,GAAG,IAAA,YAAG,EAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAA,kBAAS,EAAC,WAAW,CAAC,CAAC;QACrC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;CAEJ,CAAA;AA1DY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAGgB,oBAAU;QACC,+CAAqB;QACpB,iDAAsB;GAJlD,wBAAwB,CA0DpC","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { ChatterMessage } from \"src/entities/chatter-message.entity\";\nimport { ActiveUserData } from \"src/interfaces/active-user-data.interface\";\nimport { RequestContextService } from \"src/services/request-context.service\";\nimport { DataSource, QueryRunner, SelectQueryBuilder } from \"typeorm\";\nimport { SecurityRuleRepository } from \"./security-rule.repository\";\nimport { SolidBaseRepository } from \"./solid-base.repository\";\nimport { get, camelCase } from 'lodash';\nimport { classify } from '../helpers/string.helper';\n\n@Injectable()\nexport class ChatterMessageRepository extends SolidBaseRepository<ChatterMessage> {\n constructor(\n readonly dataSource: DataSource,\n readonly requestContextService: RequestContextService,\n readonly securityRuleRepository: SecurityRuleRepository,\n ) {\n super(ChatterMessage, dataSource, requestContextService, securityRuleRepository);\n }\n\n private readonly CO_MODEL_NAME_PATH = 'filters.coModelName.$eq';\n override async createSecurityRuleAwareQueryBuilder(alias?: string, queryRunner?: QueryRunner): Promise<SelectQueryBuilder<ChatterMessage>> {\n const activeUserOrUndefined = this.requestContextService.getActiveUser();\n let qb = await super.createSecurityRuleAwareQueryBuilder(alias, queryRunner);\n if (!activeUserOrUndefined) return qb;\n \n //Left join on the associated chatter model entity\n const [coModelName, coModelAlias] = this.getCoModelNameAndAlias();\n if (!coModelName) return qb;\n qb = this.leftJoinCoModel(qb, coModelName);\n \n return this.securityRuleRepository.applySecurityRules(\n qb,\n coModelName,\n activeUserOrUndefined as ActiveUserData,\n coModelAlias\n );\n }\n\n private leftJoinCoModel<ChatterMessage>(\n qb: SelectQueryBuilder<ChatterMessage>,\n coModelName: string\n ) {\n // const Target = resolveEntityFromCoModelName(coModelName); // your mapping\n const entityName = classify(coModelName)\n const meta = this.dataSource.getMetadata(entityName);\n const alias = camelCase(meta.name);\n qb.leftJoin(\n entityName,\n alias,\n // `${alias}.id = entity.co_model_entity_id`,\n `${alias}.id = entity.co_model_entity_id AND entity.co_model_name = :model`,\n { model: coModelName }\n );\n return qb;\n // return qb.leftJoin(Target, alias, `${alias}.id = entity.co_model_entity_id`);\n }\n\n // This uses the requestContextService.getRequestFilter method and extracts the coModelName and creates the alias and returns the name and alias tuple\n private getCoModelNameAndAlias() {\n const requestFilter = this.requestContextService.getRequestFilter();\n if (!requestFilter) return [undefined, undefined];\n\n const coModelName = get(requestFilter, this.CO_MODEL_NAME_PATH);\n if (!coModelName) return [undefined, undefined];\n const alias = camelCase(coModelName);\n return [coModelName, alias];\n }\n\n}"]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SolidBaseRepository = void 0;
4
- const strings_1 = require("@angular-devkit/core/src/utils/strings");
4
+ const lodash_1 = require("lodash");
5
5
  const common_1 = require("@nestjs/common");
6
6
  const model_metadata_entity_1 = require("../entities/model-metadata.entity");
7
7
  const typeorm_1 = require("typeorm");
@@ -13,7 +13,7 @@ class SolidBaseRepository extends typeorm_1.Repository {
13
13
  this.logger = new common_1.Logger(this.constructor.name);
14
14
  }
15
15
  modelSingularName() {
16
- return (0, strings_1.camelize)(this.metadata.name);
16
+ return (0, lodash_1.camelCase)(this.metadata.name);
17
17
  }
18
18
  async findOneByUserKey(userKeyValue) {
19
19
  const modelSingularName = this.modelSingularName();
@@ -1 +1 @@
1
- {"version":3,"file":"solid-base.repository.js","sourceRoot":"","sources":["../../src/repository/solid-base.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelize } from '@angular-devkit/core/src/utils/strings';\nimport { Logger } from '@nestjs/common';\nimport { CommonEntity } from 'src/entities/common.entity';\nimport { ModelMetadata } from 'src/entities/model-metadata.entity';\nimport { ActiveUserData } from 'src/interfaces/active-user-data.interface';\nimport { RequestContextService } from 'src/services/request-context.service';\nimport {\n DataSource,\n EntityNotFoundError,\n EntityTarget,\n FindManyOptions,\n FindOneOptions,\n FindOptionsWhere,\n QueryRunner,\n Repository,\n SelectQueryBuilder,\n UpdateResult\n} from 'typeorm';\nimport { SecurityRuleRepository } from './security-rule.repository';\nimport { PickKeysByType } from 'typeorm/common/PickKeysByType';\n\nexport class SolidBaseRepository<T extends CommonEntity> extends Repository<T> {\n protected readonly logger: Logger;\n\n constructor(\n entity: EntityTarget<T>,\n dataSource: DataSource,\n protected readonly requestContextService: RequestContextService | null,\n protected readonly securityRuleRepository: SecurityRuleRepository | null,\n ) {\n super(entity, dataSource.createEntityManager());\n this.logger = new Logger(this.constructor.name);\n }\n\n modelSingularName(): string {\n return camelize(this.metadata.name);\n }\n\n async findOneByUserKey(userKeyValue: string | number): Promise<T | null> {\n const modelSingularName = this.modelSingularName();\n const modelMetaRepo = this.manager.getRepository(ModelMetadata);\n const modelMeta = await modelMetaRepo.findOne({\n where: { singularName: modelSingularName },\n relations: { userKeyField: true },\n });\n\n if (!modelMeta?.userKeyField?.name) {\n throw new Error(`User key field not found for model ${modelSingularName}`);\n }\n\n return this.findOneBy({ [modelMeta.userKeyField.name]: userKeyValue } as FindOptionsWhere<T>);\n }\n\n override createQueryBuilder(alias?: string, queryRunner?: QueryRunner): SelectQueryBuilder<T> {\n throw new Error('createQueryBuilder() is disabled. Use createSecurityRuleAwareQueryBuilder instead');\n }\n\n async createSecurityRuleAwareQueryBuilder(alias?: string, queryRunner?: QueryRunner): Promise<SelectQueryBuilder<T>> {\n const qb = super.createQueryBuilder(alias, queryRunner);\n\n if (!this.securityRuleRepository) return qb;\n if (!this.requestContextService) return qb;\n\n const activeUserOrUndefined = this.requestContextService.getActiveUser();\n if (!activeUserOrUndefined) return qb;\n\n return await this.securityRuleRepository.applySecurityRules(\n qb,\n this.modelSingularName(),\n activeUserOrUndefined as ActiveUserData\n );\n }\n\n /**\n * Security-aware findOne: applies FindOneOptions via FindOptionsUtils,\n * but builds from our security-wrapped QueryBuilder.\n */\n override async findOne(options?: FindOneOptions<T>): Promise<T | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (options) {\n // Apply all standard find options (relations, selects, order, where, etc.)\n if (options) qb.setFindOptions(options); // <- applies where, relations, select, order, etc.\n }\n\n return qb.getOne();\n }\n\n /**\n * Convenience: route findOneBy through the same path so rules apply.\n */\n override async findOneBy(where: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<T | null> {\n return this.findOne({ where });\n }\n\n /**\n * Optional: an OrFail that still honors security rules.\n */\n override async findOneOrFail(options?: FindOneOptions<T>): Promise<T> {\n const entity = await this.findOne(options);\n if (!entity) {\n throw new EntityNotFoundError(this.metadata.target, options?.where ?? {});\n }\n return entity;\n }\n\n /**\n * Security-aware find(): builds from our secured QB and preserves all FindManyOptions\n * (where, relations, select, order, take/skip, withDeleted, etc.).\n */\n override async find(options?: FindManyOptions<T>): Promise<T[]> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (options) {\n qb.setFindOptions(options);\n }\n\n return qb.getMany();\n }\n\n /**\n * (Optional) Security-aware findAndCount(): same as find(), plus a total count.\n * Mirrors Repository.findAndCount semantics.\n */\n override async findAndCount(options?: FindManyOptions<T>): Promise<[T[], number]> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (options) {\n qb.setFindOptions(options);\n }\n\n return qb.getManyAndCount();\n }\n\n /**\n * Security-aware count(): applies security rules before counting.\n */\n override async count(options?: FindManyOptions<T>): Promise<number> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (options) {\n qb.setFindOptions(options);\n }\n\n return qb.getCount();\n }\n\n /**\n * Security-aware countBy(): convenience wrapper routed through count().\n */\n override async countBy(where: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number> {\n return this.count({ where });\n }\n\n /**\n * Security-aware average(): applies security rules before computing the average.\n */\n override async average(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (where) {\n qb.setFindOptions({ where });\n }\n\n const result = await qb\n .select(`AVG(CAST(${alias}.${String(columnName)} AS FLOAT))`, 'avg')\n .getRawOne<{ avg: string | number | null }>();\n\n if (result?.avg === null || result?.avg === undefined) {\n return null;\n }\n\n return typeof result.avg === 'number'\n ? result.avg\n : parseFloat(result.avg);\n }\n\n /**\n * Security-aware sum(): applies security rules before computing the sum.\n */\n override async sum(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (where) {\n qb.setFindOptions({ where });\n }\n\n const result = await qb\n .select(`SUM(CAST(${alias}.${String(columnName)} AS FLOAT))`, 'sum')\n .getRawOne<{ sum: string | number | null }>();\n\n if (result?.sum === null || result?.sum === undefined) {\n return null;\n }\n\n return typeof result.sum === 'number'\n ? result.sum\n : parseFloat(result.sum);\n }\n\n /**\n * Security-aware minimum(): applies security rules before computing the minimum.\n */\n override async minimum(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (where) {\n qb.setFindOptions({ where });\n }\n\n const result = await qb\n .select(`MIN(CAST(${alias}.${String(columnName)} AS FLOAT))`, 'min')\n .getRawOne<{ min: string | number | null }>();\n\n if (result?.min === null || result?.min === undefined) {\n return null;\n }\n\n return typeof result.min === 'number'\n ? result.min\n : parseFloat(result.min);\n }\n\n /**\n * Security-aware maximum(): applies security rules before computing the maximum.\n */\n override async maximum(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (where) {\n qb.setFindOptions({ where });\n }\n\n const result = await qb\n .select(`MAX(CAST(${alias}.${String(columnName)} AS FLOAT))`, 'max')\n .getRawOne<{ max: string | number | null }>();\n\n if (result?.max === null || result?.max === undefined) {\n return null;\n }\n\n return typeof result.max === 'number'\n ? result.max\n : parseFloat(result.max);\n }\n\n /**\n * Security-aware increment(): increments a column by a given value for all matching rows.\n * Security rules are applied to determine which rows the user is allowed to modify.\n */\n override async increment(where: FindOptionsWhere<T>, propertyPath: string, value: string | number,): Promise<UpdateResult> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n qb.setFindOptions({ where });\n\n const rows = await qb.select(`${alias}.id`).getMany();\n const ids = rows.map((r) => (r as any).id);\n\n if (ids.length === 0) {\n return { raw: [], affected: 0, generatedMaps: [] };\n }\n\n return this.manager\n .createQueryBuilder()\n .update(this.metadata.target)\n .set({ [propertyPath]: () => `${propertyPath} + :value` } as any)\n .whereInIds(ids)\n .setParameter('value', value)\n .execute();\n }\n\n /**\n * Security-aware decrement(): decrements a column by a given value for all matching rows.\n * Security rules are applied to determine which rows the user is allowed to modify.\n */\n override async decrement(where: FindOptionsWhere<T>, propertyPath: string, value: string | number,): Promise<UpdateResult> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n qb.setFindOptions({ where });\n\n const rows = await qb.select(`${alias}.id`).getMany();\n const ids = rows.map((r) => (r as any).id);\n\n if (ids.length === 0) {\n return { raw: [], affected: 0, generatedMaps: [] };\n }\n\n return this.manager\n .createQueryBuilder()\n .update(this.metadata.target)\n .set({ [propertyPath]: () => `${propertyPath} - :value` } as any)\n .whereInIds(ids)\n .setParameter('value', value)\n .execute();\n }\n}\n"]}
1
+ {"version":3,"file":"solid-base.repository.js","sourceRoot":"","sources":["../../src/repository/solid-base.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase } from 'lodash';\nimport { Logger } from '@nestjs/common';\nimport { CommonEntity } from 'src/entities/common.entity';\nimport { ModelMetadata } from 'src/entities/model-metadata.entity';\nimport { ActiveUserData } from 'src/interfaces/active-user-data.interface';\nimport { RequestContextService } from 'src/services/request-context.service';\nimport {\n DataSource,\n EntityNotFoundError,\n EntityTarget,\n FindManyOptions,\n FindOneOptions,\n FindOptionsWhere,\n QueryRunner,\n Repository,\n SelectQueryBuilder,\n UpdateResult\n} from 'typeorm';\nimport { SecurityRuleRepository } from './security-rule.repository';\nimport { PickKeysByType } from 'typeorm/common/PickKeysByType';\n\nexport class SolidBaseRepository<T extends CommonEntity> extends Repository<T> {\n protected readonly logger: Logger;\n\n constructor(\n entity: EntityTarget<T>,\n dataSource: DataSource,\n protected readonly requestContextService: RequestContextService | null,\n protected readonly securityRuleRepository: SecurityRuleRepository | null,\n ) {\n super(entity, dataSource.createEntityManager());\n this.logger = new Logger(this.constructor.name);\n }\n\n modelSingularName(): string {\n return camelCase(this.metadata.name);\n }\n\n async findOneByUserKey(userKeyValue: string | number): Promise<T | null> {\n const modelSingularName = this.modelSingularName();\n const modelMetaRepo = this.manager.getRepository(ModelMetadata);\n const modelMeta = await modelMetaRepo.findOne({\n where: { singularName: modelSingularName },\n relations: { userKeyField: true },\n });\n\n if (!modelMeta?.userKeyField?.name) {\n throw new Error(`User key field not found for model ${modelSingularName}`);\n }\n\n return this.findOneBy({ [modelMeta.userKeyField.name]: userKeyValue } as FindOptionsWhere<T>);\n }\n\n override createQueryBuilder(alias?: string, queryRunner?: QueryRunner): SelectQueryBuilder<T> {\n throw new Error('createQueryBuilder() is disabled. Use createSecurityRuleAwareQueryBuilder instead');\n }\n\n async createSecurityRuleAwareQueryBuilder(alias?: string, queryRunner?: QueryRunner): Promise<SelectQueryBuilder<T>> {\n const qb = super.createQueryBuilder(alias, queryRunner);\n\n if (!this.securityRuleRepository) return qb;\n if (!this.requestContextService) return qb;\n\n const activeUserOrUndefined = this.requestContextService.getActiveUser();\n if (!activeUserOrUndefined) return qb;\n\n return await this.securityRuleRepository.applySecurityRules(\n qb,\n this.modelSingularName(),\n activeUserOrUndefined as ActiveUserData\n );\n }\n\n /**\n * Security-aware findOne: applies FindOneOptions via FindOptionsUtils,\n * but builds from our security-wrapped QueryBuilder.\n */\n override async findOne(options?: FindOneOptions<T>): Promise<T | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (options) {\n // Apply all standard find options (relations, selects, order, where, etc.)\n if (options) qb.setFindOptions(options); // <- applies where, relations, select, order, etc.\n }\n\n return qb.getOne();\n }\n\n /**\n * Convenience: route findOneBy through the same path so rules apply.\n */\n override async findOneBy(where: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<T | null> {\n return this.findOne({ where });\n }\n\n /**\n * Optional: an OrFail that still honors security rules.\n */\n override async findOneOrFail(options?: FindOneOptions<T>): Promise<T> {\n const entity = await this.findOne(options);\n if (!entity) {\n throw new EntityNotFoundError(this.metadata.target, options?.where ?? {});\n }\n return entity;\n }\n\n /**\n * Security-aware find(): builds from our secured QB and preserves all FindManyOptions\n * (where, relations, select, order, take/skip, withDeleted, etc.).\n */\n override async find(options?: FindManyOptions<T>): Promise<T[]> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (options) {\n qb.setFindOptions(options);\n }\n\n return qb.getMany();\n }\n\n /**\n * (Optional) Security-aware findAndCount(): same as find(), plus a total count.\n * Mirrors Repository.findAndCount semantics.\n */\n override async findAndCount(options?: FindManyOptions<T>): Promise<[T[], number]> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (options) {\n qb.setFindOptions(options);\n }\n\n return qb.getManyAndCount();\n }\n\n /**\n * Security-aware count(): applies security rules before counting.\n */\n override async count(options?: FindManyOptions<T>): Promise<number> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (options) {\n qb.setFindOptions(options);\n }\n\n return qb.getCount();\n }\n\n /**\n * Security-aware countBy(): convenience wrapper routed through count().\n */\n override async countBy(where: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number> {\n return this.count({ where });\n }\n\n /**\n * Security-aware average(): applies security rules before computing the average.\n */\n override async average(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (where) {\n qb.setFindOptions({ where });\n }\n\n const result = await qb\n .select(`AVG(CAST(${alias}.${String(columnName)} AS FLOAT))`, 'avg')\n .getRawOne<{ avg: string | number | null }>();\n\n if (result?.avg === null || result?.avg === undefined) {\n return null;\n }\n\n return typeof result.avg === 'number'\n ? result.avg\n : parseFloat(result.avg);\n }\n\n /**\n * Security-aware sum(): applies security rules before computing the sum.\n */\n override async sum(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (where) {\n qb.setFindOptions({ where });\n }\n\n const result = await qb\n .select(`SUM(CAST(${alias}.${String(columnName)} AS FLOAT))`, 'sum')\n .getRawOne<{ sum: string | number | null }>();\n\n if (result?.sum === null || result?.sum === undefined) {\n return null;\n }\n\n return typeof result.sum === 'number'\n ? result.sum\n : parseFloat(result.sum);\n }\n\n /**\n * Security-aware minimum(): applies security rules before computing the minimum.\n */\n override async minimum(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (where) {\n qb.setFindOptions({ where });\n }\n\n const result = await qb\n .select(`MIN(CAST(${alias}.${String(columnName)} AS FLOAT))`, 'min')\n .getRawOne<{ min: string | number | null }>();\n\n if (result?.min === null || result?.min === undefined) {\n return null;\n }\n\n return typeof result.min === 'number'\n ? result.min\n : parseFloat(result.min);\n }\n\n /**\n * Security-aware maximum(): applies security rules before computing the maximum.\n */\n override async maximum(columnName: PickKeysByType<T, number>, where?: FindOptionsWhere<T> | FindOptionsWhere<T>[]): Promise<number | null> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n if (where) {\n qb.setFindOptions({ where });\n }\n\n const result = await qb\n .select(`MAX(CAST(${alias}.${String(columnName)} AS FLOAT))`, 'max')\n .getRawOne<{ max: string | number | null }>();\n\n if (result?.max === null || result?.max === undefined) {\n return null;\n }\n\n return typeof result.max === 'number'\n ? result.max\n : parseFloat(result.max);\n }\n\n /**\n * Security-aware increment(): increments a column by a given value for all matching rows.\n * Security rules are applied to determine which rows the user is allowed to modify.\n */\n override async increment(where: FindOptionsWhere<T>, propertyPath: string, value: string | number,): Promise<UpdateResult> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n qb.setFindOptions({ where });\n\n const rows = await qb.select(`${alias}.id`).getMany();\n const ids = rows.map((r) => (r as any).id);\n\n if (ids.length === 0) {\n return { raw: [], affected: 0, generatedMaps: [] };\n }\n\n return this.manager\n .createQueryBuilder()\n .update(this.metadata.target)\n .set({ [propertyPath]: () => `${propertyPath} + :value` } as any)\n .whereInIds(ids)\n .setParameter('value', value)\n .execute();\n }\n\n /**\n * Security-aware decrement(): decrements a column by a given value for all matching rows.\n * Security rules are applied to determine which rows the user is allowed to modify.\n */\n override async decrement(where: FindOptionsWhere<T>, propertyPath: string, value: string | number,): Promise<UpdateResult> {\n const alias = this.modelSingularName();\n const qb = await this.createSecurityRuleAwareQueryBuilder(alias);\n\n qb.setFindOptions({ where });\n\n const rows = await qb.select(`${alias}.id`).getMany();\n const ids = rows.map((r) => (r as any).id);\n\n if (ids.length === 0) {\n return { raw: [], affected: 0, generatedMaps: [] };\n }\n\n return this.manager\n .createQueryBuilder()\n .update(this.metadata.target)\n .set({ [propertyPath]: () => `${propertyPath} - :value` } as any)\n .whereInIds(ids)\n .setParameter('value', value)\n .execute();\n }\n}\n"]}