@lyxa.ai/marketing 1.0.57 → 1.0.59

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 (176) hide show
  1. package/dist/lib/event/event-initializations.d.ts.map +1 -1
  2. package/dist/lib/event/event-initializations.js +1 -0
  3. package/dist/lib/event/event-initializations.js.map +1 -1
  4. package/dist/lib/event/event-listeners/event-listeners.d.ts +1 -0
  5. package/dist/lib/event/event-listeners/event-listeners.d.ts.map +1 -1
  6. package/dist/lib/event/event-listeners/event-listeners.js +62 -12
  7. package/dist/lib/event/event-listeners/event-listeners.js.map +1 -1
  8. package/dist/lib/event/events/marketing-product-seed.event.d.ts +1 -2
  9. package/dist/lib/event/events/marketing-product-seed.event.d.ts.map +1 -1
  10. package/dist/lib/event/events/marketing-product-seed.event.js.map +1 -1
  11. package/dist/lib/event/events/marketing-product-sync.event.d.ts +11 -0
  12. package/dist/lib/event/events/marketing-product-sync.event.d.ts.map +1 -0
  13. package/dist/lib/event/events/marketing-product-sync.event.js +12 -0
  14. package/dist/lib/event/events/marketing-product-sync.event.js.map +1 -0
  15. package/dist/lib/index.d.ts +243 -12
  16. package/dist/lib/index.d.ts.map +1 -1
  17. package/dist/lib/index.js +3 -2
  18. package/dist/lib/index.js.map +1 -1
  19. package/dist/lib/modules/coupon/routers/coupon.router.d.ts +2 -2
  20. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js +2 -2
  21. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js.map +1 -1
  22. package/dist/lib/modules/coupon/validations/coupon.validation.d.ts +6 -6
  23. package/dist/lib/modules/coupon/validations/coupon.validation.js +2 -2
  24. package/dist/lib/modules/coupon/validations/coupon.validation.js.map +1 -1
  25. package/dist/lib/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  26. package/dist/lib/modules/deal-setting/services/deal-setting.service.js +4 -1
  27. package/dist/lib/modules/deal-setting/services/deal-setting.service.js.map +1 -1
  28. package/dist/lib/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  29. package/dist/lib/modules/featured-setting/services/featured-setting.service.js +3 -0
  30. package/dist/lib/modules/featured-setting/services/featured-setting.service.js.map +1 -1
  31. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts +54 -8
  32. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  33. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js +11 -0
  34. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js.map +1 -1
  35. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  36. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js +6 -0
  37. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js.map +1 -1
  38. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
  39. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  40. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js +2 -6
  41. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js.map +1 -1
  42. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +16 -3
  43. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  44. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js +22 -3
  45. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js.map +1 -1
  46. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +2 -0
  47. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
  48. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js +12 -0
  49. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js.map +1 -1
  50. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +242 -35
  51. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  52. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js +19 -1
  53. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js.map +1 -1
  54. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +6 -1
  55. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  56. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js +45 -1
  57. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js.map +1 -1
  58. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +3 -0
  59. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  60. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js +66 -8
  61. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js.map +1 -1
  62. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
  63. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  64. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js +37 -19
  65. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js.map +1 -1
  66. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.validation.d.ts +2 -2
  67. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts +241 -10
  68. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  69. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts +2 -0
  70. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  71. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js +15 -3
  72. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js.map +1 -1
  73. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
  74. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js +1 -1
  75. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js.map +1 -1
  76. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +10 -2
  77. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
  78. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js +4 -1
  79. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js.map +1 -1
  80. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +10 -0
  81. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  82. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js +43 -0
  83. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js.map +1 -1
  84. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +187 -2
  85. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  86. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js +29 -0
  87. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js.map +1 -1
  88. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +395 -0
  89. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
  90. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js +16 -6
  91. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js.map +1 -1
  92. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +7 -4
  93. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -1
  94. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js +31 -6
  95. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js.map +1 -1
  96. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +14 -3
  97. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  98. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js +76 -16
  99. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js.map +1 -1
  100. package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts +13 -0
  101. package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts.map +1 -0
  102. package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.js +75 -0
  103. package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.js.map +1 -0
  104. package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts +21 -0
  105. package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts.map +1 -0
  106. package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.js +83 -0
  107. package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.js.map +1 -0
  108. package/dist/lib/modules/marketing/services/marketing.service.d.ts +1 -0
  109. package/dist/lib/modules/marketing/services/marketing.service.d.ts.map +1 -1
  110. package/dist/lib/modules/marketing/services/marketing.service.js +60 -46
  111. package/dist/lib/modules/marketing/services/marketing.service.js.map +1 -1
  112. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts +2 -3
  113. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  114. package/dist/lib/modules/marketing/services/product-marketing.service.js +42 -13
  115. package/dist/lib/modules/marketing/services/product-marketing.service.js.map +1 -1
  116. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
  117. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js +95 -27
  118. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js.map +1 -1
  119. package/dist/types/event/event-initializations.d.ts.map +1 -1
  120. package/dist/types/event/event-listeners/event-listeners.d.ts +1 -0
  121. package/dist/types/event/event-listeners/event-listeners.d.ts.map +1 -1
  122. package/dist/types/event/events/marketing-product-seed.event.d.ts +1 -2
  123. package/dist/types/event/events/marketing-product-seed.event.d.ts.map +1 -1
  124. package/dist/types/event/events/marketing-product-sync.event.d.ts +11 -0
  125. package/dist/types/event/events/marketing-product-sync.event.d.ts.map +1 -0
  126. package/dist/types/index.d.ts +243 -12
  127. package/dist/types/index.d.ts.map +1 -1
  128. package/dist/types/modules/coupon/routers/coupon.router.d.ts +2 -2
  129. package/dist/types/modules/coupon/validations/coupon.validation.d.ts +6 -6
  130. package/dist/types/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  131. package/dist/types/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  132. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts +54 -8
  133. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  134. package/dist/types/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  135. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
  136. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  137. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +16 -3
  138. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  139. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +2 -0
  140. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
  141. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +242 -35
  142. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  143. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +6 -1
  144. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  145. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +3 -0
  146. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  147. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
  148. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  149. package/dist/types/modules/limited-time-offer/config/limited-time-offer-config.validation.d.ts +2 -2
  150. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts +241 -10
  151. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  152. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts +2 -0
  153. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  154. package/dist/types/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
  155. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +10 -2
  156. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
  157. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +10 -0
  158. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  159. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +187 -2
  160. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  161. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +395 -0
  162. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
  163. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +7 -4
  164. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -1
  165. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +14 -3
  166. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  167. package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts +13 -0
  168. package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts.map +1 -0
  169. package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts +21 -0
  170. package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts.map +1 -0
  171. package/dist/types/modules/marketing/services/marketing.service.d.ts +1 -0
  172. package/dist/types/modules/marketing/services/marketing.service.d.ts.map +1 -1
  173. package/dist/types/modules/marketing/services/product-marketing.service.d.ts +7 -3
  174. package/dist/types/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  175. package/dist/types/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
  176. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"featured-setting.service.js","sourceRoot":"/","sources":["modules/featured-setting/services/featured-setting.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { TRPCError } from '@trpc/server';\nimport { DocumentType, mongoose, ReturnModelType } from '@typegoose/typegoose';\nimport { FilterDTO, PaginatedResponse, DeleteDTO } from '@lyxa.ai/core/dist/utilities/validation';\nimport { createRawDocumentPaginatorObject, PaginatorOptions } from '@lyxa.ai/core/dist/utilities/pagination';\nimport { ModelType } from '@typegoose/typegoose/lib/types';\nimport { FeaturedSettingModel, FeaturedSetting as Model } from '@lyxa.ai/core/dist/libraries/mongo/models/';\nimport {\n\tCreateFeaturedSettingDTO as CreateDTO,\n\tUpdateFeaturedSettingDTO as UpdateDTO,\n} from '@modules/featured-setting/validations';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport { publishEvent } from '@lyxa.ai/core/dist/libraries/event';\nimport { BaseEvent } from '@lyxa.ai/core/dist/libraries/event/BaseEvent';\nimport { AdminActivityLogsEvent } from '@lyxa.ai/core/dist/libraries/event/events/admin-logs-event';\nimport { AdminLogsUpdatedFieldsType, ItemType, Status } from '@lyxa.ai/core/dist/utilities/enum';\n\n@Service()\nexport class FeaturedSettingService {\n\tprivate model: typeof FeaturedSettingModel & SoftDeleteModel<Model>;\n\tprivate ITEM_TYPES = [\n\t\tItemType.FOOD,\n\t\tItemType.GROCERY,\n\t\tItemType.COFFEE,\n\t\tItemType.FLOWER,\n\t\tItemType.PET,\n\t\t// ItemType.PHARMACY,\n\t\t// ItemType.HEALTHY_CORNER,\n\t];\n\n\tconstructor() {\n\t\tthis.model = FeaturedSettingModel as typeof FeaturedSettingModel & SoftDeleteModel<Model>;\n\t}\n\n\t/**\n\t * Create a new record\n\t * @param data Data for the new record\n\t */\n\tpublic async create(data: CreateDTO, admin?: string): Promise<DocumentType<Model>> {\n\t\tconst exists = await this.model.exists({\n\t\t\titemType: data.itemType,\n\t\t});\n\t\tif (exists) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'CONFLICT',\n\t\t\t\tmessage: `Featured settings for itemType ${data.itemType} already exists. Please update the existing settings.`,\n\t\t\t});\n\t\t}\n\t\tconst result = await this.model.create(data);\n\n\t\tif (admin) {\n\t\t\tthis.logMarketingSettingAdminAction(\n\t\t\t\tnew mongoose.Types.ObjectId(admin),\n\t\t\t\tAdminLogsUpdatedFieldsType.CREATED_MARKETING_SETTINGS,\n\t\t\t\t'',\n\t\t\t\tresult\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get record by ID\n\t * @param id ID of the record\n\t */\n\tpublic async findById(id: string | mongoose.Types.ObjectId): Promise<DocumentType<Model>> {\n\t\tconst result = await this.model.findOne({\n\t\t\t_id: id,\n\t\t\tdeletedAt: null,\n\t\t});\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Record not found',\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get records\n\t * @param query Query to find records\n\t */\n\tpublic async find(data?: Partial<FilterDTO>): Promise<PaginatedResponse<DocumentType<ModelType<Model>>>> {\n\t\ttry {\n\t\t\tconst paginate = createRawDocumentPaginatorObject(this.model as ReturnModelType<typeof this.model>);\n\t\t\tconst options: PaginatorOptions<typeof Model> = {\n\t\t\t\tpage: data?.page,\n\t\t\t\tsize: data?.size,\n\t\t\t\tsort: data?.sort,\n\t\t\t\tquery: data?.query,\n\t\t\t\tselect: data?.select,\n\t\t\t\tpopulate: data?.populate,\n\t\t\t};\n\t\t\tlet paginatedResult = await paginate(options);\n\n\t\t\tif (!data?.query && paginatedResult.metadata.totalElements < this.ITEM_TYPES.length) {\n\t\t\t\tawait this.createDefaultFeaturedSettings(\n\t\t\t\t\tpaginatedResult.documents as unknown as DocumentType<Model>[]\n\t\t\t\t);\n\t\t\t\tpaginatedResult = await paginate(options);\n\t\t\t}\n\n\t\t\treturn paginatedResult;\n\t\t} catch (err) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: `err: ${err}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async createDefaultFeaturedSettings(documents: DocumentType<Model>[]): Promise<void> {\n\t\tconst existingItemTypes = documents.map(setting => setting.itemType);\n\t\tconst newItemTypes = this.ITEM_TYPES.filter(item => !existingItemTypes.includes(item));\n\t\tconst defaultSetting = {\n\t\t\tfeaturedItems: [\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 3,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 7,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 14,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 21,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 28,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tfor (const item of newItemTypes) {\n\t\t\tawait this.create({\n\t\t\t\t...defaultSetting,\n\t\t\t\titemType: item as ItemType,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Update record\n\t * @param id ID of the record\n\t * @param data Data to update\n\t * @param admin Admin id\n\t */\n\tpublic async update(id: string, data: UpdateDTO, admin?: string): Promise<DocumentType<Model>> {\n\t\tif (!admin) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: `Admin not found`,\n\t\t\t});\n\t\t}\n\n\t\tconst record = await this.model.findById(id);\n\t\tif (!record) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: `Record not found`,\n\t\t\t});\n\t\t}\n\n\t\tconst result = await this.model.findByIdAndUpdate(id, data, {\n\t\t\tnew: true,\n\t\t\trunValidators: true,\n\t\t});\n\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: `Record not found`,\n\t\t\t});\n\t\t}\n\n\t\tthis.logMarketingSettingAdminAction(\n\t\t\tnew mongoose.Types.ObjectId(admin),\n\t\t\tAdminLogsUpdatedFieldsType.CHANGE_IN_MARKETING_SETTINGS,\n\t\t\trecord,\n\t\t\tresult\n\t\t);\n\n\t\treturn result;\n\t}\n\n\tprivate async logMarketingSettingAdminAction(\n\t\tadmin: mongoose.Types.ObjectId,\n\t\tactionType: AdminLogsUpdatedFieldsType,\n\t\toldDocument?: any,\n\t\tnewDocument?: any\n\t) {\n\t\tconst adminActivityLogsEvent: BaseEvent<Record<string, unknown>> = new AdminActivityLogsEvent({\n\t\t\tadmin,\n\t\t\tupdatedField: actionType,\n\t\t\toldDocument: oldDocument ?? '',\n\t\t\tnewDocument: newDocument ?? '',\n\t\t});\n\t\tawait publishEvent(adminActivityLogsEvent);\n\t}\n\n\t/**\n\t * Delete record\n\t * @param data Data for delete\n\t */\n\tpublic async deleteById(data: DeleteDTO, admin?: string): Promise<string> {\n\t\tconst { _id, softDelete } = data;\n\n\t\tif (!admin) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Admin not found',\n\t\t\t});\n\t\t}\n\n\t\tconst record = await this.model.findById(_id);\n\n\t\tif (!record) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Record not found',\n\t\t\t});\n\t\t}\n\n\t\tconst result = await this.model.deleteRecord({ _id, deletedAt: null }, softDelete);\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Unable to delete record',\n\t\t\t});\n\t\t}\n\n\t\tthis.logMarketingSettingAdminAction(\n\t\t\tnew mongoose.Types.ObjectId(admin),\n\t\t\tAdminLogsUpdatedFieldsType.DELETED_MARKETING_SETTINGS,\n\t\t\trecord,\n\t\t\tresult\n\t\t);\n\n\t\treturn 'Record deleted successfully';\n\t}\n}\n\nexport const featuredSettingService = Container.get(FeaturedSettingService);\n"]}
1
+ {"version":3,"file":"featured-setting.service.js","sourceRoot":"/","sources":["modules/featured-setting/services/featured-setting.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { TRPCError } from '@trpc/server';\nimport { DocumentType, mongoose, ReturnModelType } from '@typegoose/typegoose';\nimport { FilterDTO, PaginatedResponse, DeleteDTO } from '@lyxa.ai/core/dist/utilities/validation';\nimport { createRawDocumentPaginatorObject, PaginatorOptions } from '@lyxa.ai/core/dist/utilities/pagination';\nimport { ModelType } from '@typegoose/typegoose/lib/types';\nimport { FeaturedSettingModel, FeaturedSetting as Model } from '@lyxa.ai/core/dist/libraries/mongo/models/';\nimport {\n\tCreateFeaturedSettingDTO as CreateDTO,\n\tUpdateFeaturedSettingDTO as UpdateDTO,\n} from '@modules/featured-setting/validations';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport { publishEvent } from '@lyxa.ai/core/dist/libraries/event';\nimport { BaseEvent } from '@lyxa.ai/core/dist/libraries/event/BaseEvent';\nimport { AdminActivityLogsEvent } from '@lyxa.ai/core/dist/libraries/event/events/admin-logs-event';\nimport { AdminLogsUpdatedFieldsType, ItemType, Status } from '@lyxa.ai/core/dist/utilities/enum';\n\n@Service()\nexport class FeaturedSettingService {\n\tprivate model: typeof FeaturedSettingModel & SoftDeleteModel<Model>;\n\tprivate ITEM_TYPES = [\n\t\tItemType.FOOD,\n\t\tItemType.GROCERY,\n\t\tItemType.COFFEE,\n\t\tItemType.FLOWER,\n\t\tItemType.PET,\n\t\t// ItemType.PHARMACY,\n\t\t// ItemType.HEALTHY_CORNER,\n\t\tItemType.WELLNESS,\n\t\tItemType.ELECTRONICS,\n\t\tItemType.BEAUTY,\n\t];\n\n\tconstructor() {\n\t\tthis.model = FeaturedSettingModel as typeof FeaturedSettingModel & SoftDeleteModel<Model>;\n\t}\n\n\t/**\n\t * Create a new record\n\t * @param data Data for the new record\n\t */\n\tpublic async create(data: CreateDTO, admin?: string): Promise<DocumentType<Model>> {\n\t\tconst exists = await this.model.exists({\n\t\t\titemType: data.itemType,\n\t\t});\n\t\tif (exists) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'CONFLICT',\n\t\t\t\tmessage: `Featured settings for itemType ${data.itemType} already exists. Please update the existing settings.`,\n\t\t\t});\n\t\t}\n\t\tconst result = await this.model.create(data);\n\n\t\tif (admin) {\n\t\t\tthis.logMarketingSettingAdminAction(\n\t\t\t\tnew mongoose.Types.ObjectId(admin),\n\t\t\t\tAdminLogsUpdatedFieldsType.CREATED_MARKETING_SETTINGS,\n\t\t\t\t'',\n\t\t\t\tresult\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get record by ID\n\t * @param id ID of the record\n\t */\n\tpublic async findById(id: string | mongoose.Types.ObjectId): Promise<DocumentType<Model>> {\n\t\tconst result = await this.model.findOne({\n\t\t\t_id: id,\n\t\t\tdeletedAt: null,\n\t\t});\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Record not found',\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get records\n\t * @param query Query to find records\n\t */\n\tpublic async find(data?: Partial<FilterDTO>): Promise<PaginatedResponse<DocumentType<ModelType<Model>>>> {\n\t\ttry {\n\t\t\tconst paginate = createRawDocumentPaginatorObject(this.model as ReturnModelType<typeof this.model>);\n\t\t\tconst options: PaginatorOptions<typeof Model> = {\n\t\t\t\tpage: data?.page,\n\t\t\t\tsize: data?.size,\n\t\t\t\tsort: data?.sort,\n\t\t\t\tquery: data?.query,\n\t\t\t\tselect: data?.select,\n\t\t\t\tpopulate: data?.populate,\n\t\t\t};\n\t\t\tlet paginatedResult = await paginate(options);\n\n\t\t\tif (!data?.query && paginatedResult.metadata.totalElements < this.ITEM_TYPES.length) {\n\t\t\t\tawait this.createDefaultFeaturedSettings(\n\t\t\t\t\tpaginatedResult.documents as unknown as DocumentType<Model>[]\n\t\t\t\t);\n\t\t\t\tpaginatedResult = await paginate(options);\n\t\t\t}\n\n\t\t\treturn paginatedResult;\n\t\t} catch (err) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: `err: ${err}`,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async createDefaultFeaturedSettings(documents: DocumentType<Model>[]): Promise<void> {\n\t\tconst existingItemTypes = documents.map(setting => setting.itemType);\n\t\tconst newItemTypes = this.ITEM_TYPES.filter(item => !existingItemTypes.includes(item));\n\t\tconst defaultSetting = {\n\t\t\tfeaturedItems: [\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 3,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 7,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 14,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 21,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdurationInDays: 28,\n\t\t\t\t\tamount: 0,\n\t\t\t\t\tstatus: Status.INACTIVE,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tfor (const item of newItemTypes) {\n\t\t\tawait this.create({\n\t\t\t\t...defaultSetting,\n\t\t\t\titemType: item as ItemType,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Update record\n\t * @param id ID of the record\n\t * @param data Data to update\n\t * @param admin Admin id\n\t */\n\tpublic async update(id: string, data: UpdateDTO, admin?: string): Promise<DocumentType<Model>> {\n\t\tif (!admin) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: `Admin not found`,\n\t\t\t});\n\t\t}\n\n\t\tconst record = await this.model.findById(id);\n\t\tif (!record) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: `Record not found`,\n\t\t\t});\n\t\t}\n\n\t\tconst result = await this.model.findByIdAndUpdate(id, data, {\n\t\t\tnew: true,\n\t\t\trunValidators: true,\n\t\t});\n\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: `Record not found`,\n\t\t\t});\n\t\t}\n\n\t\tthis.logMarketingSettingAdminAction(\n\t\t\tnew mongoose.Types.ObjectId(admin),\n\t\t\tAdminLogsUpdatedFieldsType.CHANGE_IN_MARKETING_SETTINGS,\n\t\t\trecord,\n\t\t\tresult\n\t\t);\n\n\t\treturn result;\n\t}\n\n\tprivate async logMarketingSettingAdminAction(\n\t\tadmin: mongoose.Types.ObjectId,\n\t\tactionType: AdminLogsUpdatedFieldsType,\n\t\toldDocument?: any,\n\t\tnewDocument?: any\n\t) {\n\t\tconst adminActivityLogsEvent: BaseEvent<Record<string, unknown>> = new AdminActivityLogsEvent({\n\t\t\tadmin,\n\t\t\tupdatedField: actionType,\n\t\t\toldDocument: oldDocument ?? '',\n\t\t\tnewDocument: newDocument ?? '',\n\t\t});\n\t\tawait publishEvent(adminActivityLogsEvent);\n\t}\n\n\t/**\n\t * Delete record\n\t * @param data Data for delete\n\t */\n\tpublic async deleteById(data: DeleteDTO, admin?: string): Promise<string> {\n\t\tconst { _id, softDelete } = data;\n\n\t\tif (!admin) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Admin not found',\n\t\t\t});\n\t\t}\n\n\t\tconst record = await this.model.findById(_id);\n\n\t\tif (!record) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Record not found',\n\t\t\t});\n\t\t}\n\n\t\tconst result = await this.model.deleteRecord({ _id, deletedAt: null }, softDelete);\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: 'Unable to delete record',\n\t\t\t});\n\t\t}\n\n\t\tthis.logMarketingSettingAdminAction(\n\t\t\tnew mongoose.Types.ObjectId(admin),\n\t\t\tAdminLogsUpdatedFieldsType.DELETED_MARKETING_SETTINGS,\n\t\t\trecord,\n\t\t\tresult\n\t\t);\n\n\t\treturn 'Record deleted successfully';\n\t}\n}\n\nexport const featuredSettingService = Container.get(FeaturedSettingService);\n"]}
@@ -19,7 +19,9 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
19
19
  startDate: string | Date;
20
20
  endDate: string | Date;
21
21
  title?: string | undefined;
22
+ campaignType?: import("@lyxa.ai/core/dist/utilities/enum").MarketingType | undefined;
22
23
  subTitle?: string | undefined;
24
+ repeatDays?: number[] | undefined;
23
25
  };
24
26
  output: {
25
27
  message: string;
@@ -34,9 +36,10 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
34
36
  updatedAt?: Date | null | undefined;
35
37
  title?: string | undefined;
36
38
  subTitle?: string | undefined;
37
- archivedAt?: Date | null | undefined;
39
+ repeatDays?: number[] | undefined;
38
40
  discountOptions?: number[] | undefined;
39
41
  maxDiscountCaps?: number[] | undefined;
42
+ archivedAt?: Date | null | undefined;
40
43
  } | {
41
44
  documents: {
42
45
  status: import("@lyxa.ai/core/dist/utilities/enum").LimitedTimeOfferCampaignStatus;
@@ -48,9 +51,10 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
48
51
  updatedAt?: Date | null | undefined;
49
52
  title?: string | undefined;
50
53
  subTitle?: string | undefined;
51
- archivedAt?: Date | null | undefined;
54
+ repeatDays?: number[] | undefined;
52
55
  discountOptions?: number[] | undefined;
53
56
  maxDiscountCaps?: number[] | undefined;
57
+ archivedAt?: Date | null | undefined;
54
58
  }[];
55
59
  metadata?: {
56
60
  page: number;
@@ -77,9 +81,10 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
77
81
  updatedAt?: Date | null | undefined;
78
82
  title?: string | undefined;
79
83
  subTitle?: string | undefined;
80
- archivedAt?: Date | null | undefined;
84
+ repeatDays?: number[] | undefined;
81
85
  discountOptions?: number[] | undefined;
82
86
  maxDiscountCaps?: number[] | undefined;
87
+ archivedAt?: Date | null | undefined;
83
88
  } | {
84
89
  documents: ({
85
90
  status: import("@lyxa.ai/core/dist/utilities/enum").LimitedTimeOfferCampaignStatus;
@@ -91,9 +96,10 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
91
96
  updatedAt?: Date | null | undefined;
92
97
  title?: string | undefined;
93
98
  subTitle?: string | undefined;
94
- archivedAt?: Date | null | undefined;
99
+ repeatDays?: number[] | undefined;
95
100
  discountOptions?: number[] | undefined;
96
101
  maxDiscountCaps?: number[] | undefined;
102
+ archivedAt?: Date | null | undefined;
97
103
  } | null)[];
98
104
  metadata?: {
99
105
  page: number;
@@ -122,9 +128,10 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
122
128
  updatedAt?: Date | null | undefined;
123
129
  title?: string | undefined;
124
130
  subTitle?: string | undefined;
125
- archivedAt?: Date | null | undefined;
131
+ repeatDays?: number[] | undefined;
126
132
  discountOptions?: number[] | undefined;
127
133
  maxDiscountCaps?: number[] | undefined;
134
+ archivedAt?: Date | null | undefined;
128
135
  } | {
129
136
  documents: {
130
137
  status: import("@lyxa.ai/core/dist/utilities/enum").LimitedTimeOfferCampaignStatus;
@@ -136,9 +143,10 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
136
143
  updatedAt?: Date | null | undefined;
137
144
  title?: string | undefined;
138
145
  subTitle?: string | undefined;
139
- archivedAt?: Date | null | undefined;
146
+ repeatDays?: number[] | undefined;
140
147
  discountOptions?: number[] | undefined;
141
148
  maxDiscountCaps?: number[] | undefined;
149
+ archivedAt?: Date | null | undefined;
142
150
  }[];
143
151
  metadata?: {
144
152
  page: number;
@@ -194,6 +202,7 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
194
202
  endDate: string | Date;
195
203
  title?: string | undefined;
196
204
  subTitle?: string | undefined;
205
+ repeatDays?: number[] | undefined;
197
206
  discountOptions?: number[] | undefined;
198
207
  maxDiscountCaps?: number[] | undefined;
199
208
  confirmActive?: boolean | undefined;
@@ -211,9 +220,10 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
211
220
  updatedAt?: Date | null | undefined;
212
221
  title?: string | undefined;
213
222
  subTitle?: string | undefined;
214
- archivedAt?: Date | null | undefined;
223
+ repeatDays?: number[] | undefined;
215
224
  discountOptions?: number[] | undefined;
216
225
  maxDiscountCaps?: number[] | undefined;
226
+ archivedAt?: Date | null | undefined;
217
227
  } | {
218
228
  documents: {
219
229
  status: import("@lyxa.ai/core/dist/utilities/enum").LimitedTimeOfferCampaignStatus;
@@ -225,9 +235,10 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
225
235
  updatedAt?: Date | null | undefined;
226
236
  title?: string | undefined;
227
237
  subTitle?: string | undefined;
228
- archivedAt?: Date | null | undefined;
238
+ repeatDays?: number[] | undefined;
229
239
  discountOptions?: number[] | undefined;
230
240
  maxDiscountCaps?: number[] | undefined;
241
+ archivedAt?: Date | null | undefined;
231
242
  }[];
232
243
  metadata?: {
233
244
  page: number;
@@ -271,6 +282,41 @@ export declare const campaignRouter: import("@trpc/server").TRPCBuiltRouter<{
271
282
  };
272
283
  meta: object;
273
284
  }>;
285
+ getSessions: import("@trpc/server").TRPCQueryProcedure<{
286
+ input: {
287
+ campaignId: string | import("mongoose").Types.ObjectId;
288
+ page?: number | undefined;
289
+ size?: number | undefined;
290
+ };
291
+ output: {
292
+ message: string;
293
+ success: boolean;
294
+ data?: {
295
+ _id: string | import("mongoose").Types.ObjectId;
296
+ startDate: Date;
297
+ endDate: Date;
298
+ shopCount: number;
299
+ archivedAt: Date;
300
+ campaign: string | import("mongoose").Types.ObjectId;
301
+ } | {
302
+ documents: {
303
+ _id: string | import("mongoose").Types.ObjectId;
304
+ startDate: Date;
305
+ endDate: Date;
306
+ shopCount: number;
307
+ archivedAt: Date;
308
+ campaign: string | import("mongoose").Types.ObjectId;
309
+ }[];
310
+ metadata?: {
311
+ page: number;
312
+ size: number;
313
+ totalElements: number;
314
+ totalPages: number;
315
+ } | undefined;
316
+ } | undefined;
317
+ };
318
+ meta: object;
319
+ }>;
274
320
  cancel: import("@trpc/server").TRPCMutationProcedure<{
275
321
  input: {
276
322
  campaignId: string | import("mongoose").Types.ObjectId;
@@ -1 +1 @@
1
- {"version":3,"file":"campaign.router.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/campaign.router.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEzB,CAAC"}
1
+ {"version":3,"file":"campaign.router.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/campaign.router.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFzB,CAAC"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.campaignRouter = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const limited_time_offer_campaign_service_1 = require("./services/limited-time-offer-campaign.service");
6
+ const limited_time_offer_campaign_session_service_1 = require("../../limited-time-offer/session/limited-time-offer-campaign-session.service");
6
7
  const limited_time_offer_campaign_validation_1 = require("./limited-time-offer-campaign.validation");
7
8
  const trpc_1 = require("@lyxa.ai/core/dist/libraries/trpc");
8
9
  const auth_1 = require("@lyxa.ai/core/dist/libraries/trpc/middlewares/auth");
@@ -54,6 +55,16 @@ exports.campaignRouter = (0, trpc_1.createTRPCRouter)({
54
55
  const result = await limited_time_offer_service_1.limitedTimeOfferService.getActiveCampaign(input);
55
56
  return (0, response_1.response)('Active campaign fetched successfully', result);
56
57
  })),
58
+ getSessions: crmProcedure
59
+ .input(limited_time_offer_campaign_validation_1.GetLtoCampaignSessionsSchema)
60
+ .output(limited_time_offer_campaign_validation_1.LtoCampaignSessionsResponseSchema)
61
+ .query(async ({ input }) => error_handler_1.ErrorHandler.wrapAsync(async () => {
62
+ const { documents, total } = await limited_time_offer_campaign_session_service_1.ltoCampaignSessionService.getSessionsByCampaign(input.campaignId, input.page, input.size);
63
+ return (0, response_1.response)('Campaign sessions fetched successfully', {
64
+ documents,
65
+ metadata: { page: input.page, size: input.size, totalElements: total, totalPages: Math.ceil(total / input.size) },
66
+ });
67
+ })),
57
68
  cancel: crmProcedure
58
69
  .input(zod_1.z.object({ campaignId: validation_1.ZodValidation.objectId() }))
59
70
  .output(limited_time_offer_campaign_validation_1.LtoEmptyResponseSchema)
@@ -1 +1 @@
1
- {"version":3,"file":"campaign.router.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/campaign.router.ts"],"names":[],"mappings":"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","sourcesContent":["import {z} from 'zod';\nimport {ltoCampaignService as service} from './services/limited-time-offer-campaign.service';\nimport {\n CreateLtoCampaignSchema,\n GetActiveCampaignSchema,\n GetLtoCampaignHistorySchema,\n LtoActiveCampaignResponseSchema,\n LtoCampaignHistoryResponseSchema,\n LtoCampaignNullableResponseSchema,\n LtoCampaignResponseSchema,\n LtoEmptyResponseSchema,\n UpdateLtoCampaignSchema,\n} from './limited-time-offer-campaign.validation';\nimport {createTRPCRouter, publicProcedure} from '@lyxa.ai/core/dist/libraries/trpc';\nimport {createAuthenticatedProcedure} from '@lyxa.ai/core/dist/libraries/trpc/middlewares/auth';\nimport {AuthEntityType} from '@lyxa.ai/core/dist/utilities/enum';\nimport {ErrorHandler} from '@lyxa.ai/core/dist/utilities/error-handler';\nimport {response} from '@lyxa.ai/core/dist/utilities/response';\nimport {ZodValidation} from '@lyxa.ai/core/dist/utilities/validation';\nimport {limitedTimeOfferService as orchestrator} from '@modules/limited-time-offer/limited-time-offer.service';\n\nconst crmProcedure = createAuthenticatedProcedure({entityTypes: [AuthEntityType.CRM]});\n\nexport const campaignRouter = createTRPCRouter({\n create: crmProcedure\n .input(CreateLtoCampaignSchema)\n .output(LtoCampaignResponseSchema)\n .mutation(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.create(input);\n return response('Campaign created successfully', result);\n })\n ),\n\n getCurrent: createAuthenticatedProcedure({entityTypes: [AuthEntityType.CRM, AuthEntityType.SELLER]})\n .output(LtoCampaignNullableResponseSchema)\n .query(async () =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.getCurrent();\n return response('Current campaign fetched successfully', result);\n })\n ),\n\n getById: crmProcedure\n .input(z.object({campaignId: ZodValidation.objectId()}))\n .output(LtoCampaignResponseSchema)\n .query(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.getById(input.campaignId);\n return response('Campaign fetched successfully', result);\n })\n ),\n\n getHistory: crmProcedure\n .input(GetLtoCampaignHistorySchema)\n .output(LtoCampaignHistoryResponseSchema)\n .query(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.getHistory(input);\n return response('Campaign history fetched successfully', result);\n })\n ),\n\n update: crmProcedure\n .input(UpdateLtoCampaignSchema)\n .output(LtoCampaignResponseSchema)\n .mutation(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.update(input);\n return response('Campaign updated successfully', result);\n })\n ),\n\n /** @deprecated use lto.getActive */\n getActive: publicProcedure\n .input(GetActiveCampaignSchema)\n .output(LtoActiveCampaignResponseSchema)\n .query(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await orchestrator.getActiveCampaign(input);\n return response('Active campaign fetched successfully', result);\n })\n ),\n\n /** @deprecated use lto.cancel */\n cancel: crmProcedure\n .input(z.object({campaignId: ZodValidation.objectId()}))\n .output(LtoEmptyResponseSchema)\n .mutation(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n await orchestrator.cancelCampaign(input.campaignId);\n return response('Campaign cancelled successfully');\n })\n ),\n});\n"]}
1
+ {"version":3,"file":"campaign.router.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/campaign.router.ts"],"names":[],"mappings":";;;AAAA,6BAAsB;AACtB,wGAA6F;AAC7F,iJAA4I;AAC5I,qGAYkD;AAClD,4DAAoF;AACpF,6EAAgG;AAChG,4DAAiE;AACjE,8EAAwE;AACxE,oEAA+D;AAC/D,wEAAsE;AACtE,uGAA+G;AAE/G,MAAM,YAAY,GAAG,IAAA,mCAA4B,EAAC,EAAC,WAAW,EAAE,CAAC,qBAAc,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;AAE1E,QAAA,cAAc,GAAG,IAAA,uBAAgB,EAAC;IAC3C,MAAM,EAAE,YAAY;SACf,KAAK,CAAC,gEAAuB,CAAC;SAC9B,MAAM,CAAC,kEAAyB,CAAC;SACjC,QAAQ,CAAC,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE,CACxB,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,wDAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,IAAA,mBAAQ,EAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CACL;IAEL,UAAU,EAAE,IAAA,mCAA4B,EAAC,EAAC,WAAW,EAAE,CAAC,qBAAc,CAAC,GAAG,EAAE,qBAAc,CAAC,MAAM,CAAC,EAAC,CAAC;SAC/F,MAAM,CAAC,0EAAiC,CAAC;SACzC,KAAK,CAAC,KAAK,IAAI,EAAE,CACd,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,wDAAO,CAAC,UAAU,EAAE,CAAC;QAC1C,OAAO,IAAA,mBAAQ,EAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC,CAAC,CACL;IAEL,OAAO,EAAE,YAAY;SAChB,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC,EAAC,UAAU,EAAE,0BAAa,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;SACvD,MAAM,CAAC,kEAAyB,CAAC;SACjC,KAAK,CAAC,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE,CACrB,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,wDAAO,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,IAAA,mBAAQ,EAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CACL;IAEL,UAAU,EAAE,YAAY;SACnB,KAAK,CAAC,oEAA2B,CAAC;SAClC,MAAM,CAAC,yEAAgC,CAAC;SACxC,KAAK,CAAC,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE,CACrB,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,wDAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,IAAA,mBAAQ,EAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC,CAAC,CACL;IAEL,MAAM,EAAE,YAAY;SACf,KAAK,CAAC,gEAAuB,CAAC;SAC9B,MAAM,CAAC,kEAAyB,CAAC;SACjC,QAAQ,CAAC,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE,CACxB,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,wDAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,IAAA,mBAAQ,EAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CACL;IAGL,SAAS,EAAE,sBAAe;SACrB,KAAK,CAAC,gEAAuB,CAAC;SAC9B,MAAM,CAAC,wEAA+B,CAAC;SACvC,KAAK,CAAC,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE,CACrB,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,oDAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO,IAAA,mBAAQ,EAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC,CACL;IAEL,WAAW,EAAE,YAAY;SACpB,KAAK,CAAC,qEAA4B,CAAC;SACnC,MAAM,CAAC,0EAAiC,CAAC;SACzC,KAAK,CAAC,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE,CACrB,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,EAAC,SAAS,EAAE,KAAK,EAAC,GAAG,MAAM,uEAAc,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChH,OAAO,IAAA,mBAAQ,EAAC,wCAAwC,EAAE;YACtD,SAAS;YACT,QAAQ,EAAE,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC;SAClH,CAAC,CAAC;IACP,CAAC,CAAC,CACL;IAGL,MAAM,EAAE,YAAY;SACf,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC,EAAC,UAAU,EAAE,0BAAa,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;SACvD,MAAM,CAAC,+DAAsB,CAAC;SAC9B,QAAQ,CAAC,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE,CACxB,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,oDAAY,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,IAAA,mBAAQ,EAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC,CAAC,CACL;CACR,CAAC,CAAC","sourcesContent":["import {z} from 'zod';\nimport {ltoCampaignService as service} from './services/limited-time-offer-campaign.service';\nimport {ltoCampaignSessionService as sessionService} from '@modules/limited-time-offer/session/limited-time-offer-campaign-session.service';\nimport {\n CreateLtoCampaignSchema,\n GetActiveCampaignSchema,\n GetLtoCampaignHistorySchema,\n GetLtoCampaignSessionsSchema,\n LtoActiveCampaignResponseSchema,\n LtoCampaignHistoryResponseSchema,\n LtoCampaignNullableResponseSchema,\n LtoCampaignResponseSchema,\n LtoCampaignSessionsResponseSchema,\n LtoEmptyResponseSchema,\n UpdateLtoCampaignSchema,\n} from './limited-time-offer-campaign.validation';\nimport {createTRPCRouter, publicProcedure} from '@lyxa.ai/core/dist/libraries/trpc';\nimport {createAuthenticatedProcedure} from '@lyxa.ai/core/dist/libraries/trpc/middlewares/auth';\nimport {AuthEntityType} from '@lyxa.ai/core/dist/utilities/enum';\nimport {ErrorHandler} from '@lyxa.ai/core/dist/utilities/error-handler';\nimport {response} from '@lyxa.ai/core/dist/utilities/response';\nimport {ZodValidation} from '@lyxa.ai/core/dist/utilities/validation';\nimport {limitedTimeOfferService as orchestrator} from '@modules/limited-time-offer/limited-time-offer.service';\n\nconst crmProcedure = createAuthenticatedProcedure({entityTypes: [AuthEntityType.CRM]});\n\nexport const campaignRouter = createTRPCRouter({\n create: crmProcedure\n .input(CreateLtoCampaignSchema)\n .output(LtoCampaignResponseSchema)\n .mutation(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.create(input);\n return response('Campaign created successfully', result);\n })\n ),\n\n getCurrent: createAuthenticatedProcedure({entityTypes: [AuthEntityType.CRM, AuthEntityType.SELLER]})\n .output(LtoCampaignNullableResponseSchema)\n .query(async () =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.getCurrent();\n return response('Current campaign fetched successfully', result);\n })\n ),\n\n getById: crmProcedure\n .input(z.object({campaignId: ZodValidation.objectId()}))\n .output(LtoCampaignResponseSchema)\n .query(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.getById(input.campaignId);\n return response('Campaign fetched successfully', result);\n })\n ),\n\n getHistory: crmProcedure\n .input(GetLtoCampaignHistorySchema)\n .output(LtoCampaignHistoryResponseSchema)\n .query(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.getHistory(input);\n return response('Campaign history fetched successfully', result);\n })\n ),\n\n update: crmProcedure\n .input(UpdateLtoCampaignSchema)\n .output(LtoCampaignResponseSchema)\n .mutation(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.update(input);\n return response('Campaign updated successfully', result);\n })\n ),\n\n /** @deprecated use lto.getActive */\n getActive: publicProcedure\n .input(GetActiveCampaignSchema)\n .output(LtoActiveCampaignResponseSchema)\n .query(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await orchestrator.getActiveCampaign(input);\n return response('Active campaign fetched successfully', result);\n })\n ),\n\n getSessions: crmProcedure\n .input(GetLtoCampaignSessionsSchema)\n .output(LtoCampaignSessionsResponseSchema)\n .query(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const {documents, total} = await sessionService.getSessionsByCampaign(input.campaignId, input.page, input.size);\n return response('Campaign sessions fetched successfully', {\n documents,\n metadata: {page: input.page, size: input.size, totalElements: total, totalPages: Math.ceil(total / input.size)},\n });\n })\n ),\n\n /** @deprecated use lto.cancel */\n cancel: crmProcedure\n .input(z.object({campaignId: ZodValidation.objectId()}))\n .output(LtoEmptyResponseSchema)\n .mutation(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n await orchestrator.cancelCampaign(input.campaignId);\n return response('Campaign cancelled successfully');\n })\n ),\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/index.ts"],"names":[],"mappings":"AAEA,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAErD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAExD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/index.ts"],"names":[],"mappings":"AAIA,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAErD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGxD"}
@@ -13,12 +13,18 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
13
13
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
16
19
  Object.defineProperty(exports, "__esModule", { value: true });
17
20
  exports.startBullMQWorkers = startBullMQWorkers;
21
+ const typedi_1 = __importDefault(require("typedi"));
18
22
  const limited_time_offer_campaign_worker_1 = require("./limited-time-offer-campaign.worker");
23
+ const limited_time_offer_campaign_scheduler_service_1 = require("../services/limited-time-offer-campaign-scheduler.service");
19
24
  __exportStar(require("./limited-time-offer-campaign.producer"), exports);
20
25
  __exportStar(require("./limited-time-offer-campaign.worker"), exports);
21
26
  async function startBullMQWorkers() {
22
27
  await limited_time_offer_campaign_worker_1.ltoCampaignQueueWorker.startWorker();
28
+ await typedi_1.default.get(limited_time_offer_campaign_scheduler_service_1.LtoCampaignSchedulerService).rescheduleOrphanedRecurring();
23
29
  }
24
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAKA,gDAEC;AAPD,6FAA8E;AAE9E,yEAAuD;AACvD,uEAAqD;AAE9C,KAAK,UAAU,kBAAkB;IACpC,MAAM,2DAAsB,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC","sourcesContent":["import { ltoCampaignQueueWorker } from './limited-time-offer-campaign.worker';\n\nexport * from './limited-time-offer-campaign.producer';\nexport * from './limited-time-offer-campaign.worker';\n\nexport async function startBullMQWorkers(): Promise<void> {\n await ltoCampaignQueueWorker.startWorker();\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAOA,gDAGC;AAVD,oDAA+B;AAC/B,6FAA8E;AAC9E,6HAAwG;AAExG,yEAAuD;AACvD,uEAAqD;AAE9C,KAAK,UAAU,kBAAkB;IACpC,MAAM,2DAAsB,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,gBAAS,CAAC,GAAG,CAAC,2EAA2B,CAAC,CAAC,2BAA2B,EAAE,CAAC;AACnF,CAAC","sourcesContent":["import Container from 'typedi';\nimport { ltoCampaignQueueWorker } from './limited-time-offer-campaign.worker';\nimport { LtoCampaignSchedulerService } from '../services/limited-time-offer-campaign-scheduler.service';\n\nexport * from './limited-time-offer-campaign.producer';\nexport * from './limited-time-offer-campaign.worker';\n\nexport async function startBullMQWorkers(): Promise<void> {\n await ltoCampaignQueueWorker.startWorker();\n await Container.get(LtoCampaignSchedulerService).rescheduleOrphanedRecurring();\n}\n"]}
@@ -1,5 +1,4 @@
1
1
  export declare class LtoCampaignQueueWorker {
2
- private lifecycle;
3
2
  constructor();
4
3
  startWorker(): Promise<void>;
5
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.worker.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.ts"],"names":[],"mappings":"AAOA,qBACa,sBAAsB;IAC/B,OAAO,CAAC,SAAS,CAA8B;;IAMlC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAW5C;AAED,eAAO,MAAM,sBAAsB,wBAAwC,CAAC"}
1
+ {"version":3,"file":"limited-time-offer-campaign.worker.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.ts"],"names":[],"mappings":"AAMA,qBACa,sBAAsB;;IAGlB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAW5C;AAED,eAAO,MAAM,sBAAsB,wBAAwC,CAAC"}
@@ -47,19 +47,15 @@ const typedi_1 = __importStar(require("typedi"));
47
47
  const typegoose_1 = require("@typegoose/typegoose");
48
48
  const core_1 = require("@lyxa.ai/core");
49
49
  const limited_time_offer_campaign_producer_1 = require("./limited-time-offer-campaign.producer");
50
- const limited_time_offer_campaign_lifecycle_service_1 = require("../services/limited-time-offer-campaign-lifecycle.service");
51
50
  const limited_time_offer_service_1 = require("../../../limited-time-offer/limited-time-offer.service");
52
51
  let LtoCampaignQueueWorker = class LtoCampaignQueueWorker {
53
- lifecycle;
54
- constructor() {
55
- this.lifecycle = typedi_1.default.get(limited_time_offer_campaign_lifecycle_service_1.LtoCampaignLifecycleService);
56
- }
52
+ constructor() { }
57
53
  async startWorker() {
58
54
  (0, core_1.getLibraries)().getBullMQService().createWorker(limited_time_offer_campaign_producer_1.LTO_CAMPAIGN_TRANSITIONS_QUEUE, async (job) => {
59
55
  const { campaignId: campaignIdStr } = job.data;
60
56
  const campaignId = new typegoose_1.mongoose.Types.ObjectId(campaignIdStr);
61
57
  if (job.name === limited_time_offer_campaign_producer_1.LtoCampaignJobName.ACTIVATE) {
62
- await this.lifecycle.activateCampaign(campaignId);
58
+ await limited_time_offer_service_1.limitedTimeOfferService.activateCampaign(campaignId);
63
59
  }
64
60
  else if (job.name === limited_time_offer_campaign_producer_1.LtoCampaignJobName.EXPIRE) {
65
61
  await limited_time_offer_service_1.limitedTimeOfferService.expireCampaign(campaignId);
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.worker.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAC5C,oDAAgD;AAChD,wCAA6C;AAC7C,iGAA4G;AAC5G,6HAAwG;AACxG,uGAAiG;AAG1F,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACvB,SAAS,CAA8B;IAE/C;QACI,IAAI,CAAC,SAAS,GAAG,gBAAS,CAAC,GAAG,CAAC,2EAA2B,CAAC,CAAC;IAChE,CAAC;IAEM,KAAK,CAAC,WAAW;QACpB,IAAA,mBAAY,GAAE,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,qEAA8B,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YACvF,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,IAA8B,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,oBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,yDAAkB,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,yDAAkB,CAAC,MAAM,EAAE,CAAC;gBAChD,MAAM,oDAAuB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAlBY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,gBAAO,GAAE;;GACG,sBAAsB,CAkBlC;AAEY,QAAA,sBAAsB,GAAG,gBAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { mongoose } from '@typegoose/typegoose';\nimport { getLibraries } from '@lyxa.ai/core';\nimport { LTO_CAMPAIGN_TRANSITIONS_QUEUE, LtoCampaignJobName } from './limited-time-offer-campaign.producer';\nimport { LtoCampaignLifecycleService } from '../services/limited-time-offer-campaign-lifecycle.service';\nimport { limitedTimeOfferService } from '@modules/limited-time-offer/limited-time-offer.service';\n\n@Service()\nexport class LtoCampaignQueueWorker {\n private lifecycle: LtoCampaignLifecycleService;\n\n constructor() {\n this.lifecycle = Container.get(LtoCampaignLifecycleService);\n }\n\n public async startWorker(): Promise<void> {\n getLibraries().getBullMQService().createWorker(LTO_CAMPAIGN_TRANSITIONS_QUEUE, async job => {\n const { campaignId: campaignIdStr } = job.data as { campaignId: string };\n const campaignId = new mongoose.Types.ObjectId(campaignIdStr);\n if (job.name === LtoCampaignJobName.ACTIVATE) {\n await this.lifecycle.activateCampaign(campaignId);\n } else if (job.name === LtoCampaignJobName.EXPIRE) {\n await limitedTimeOfferService.expireCampaign(campaignId);\n }\n });\n }\n}\n\nexport const ltoCampaignQueueWorker = Container.get(LtoCampaignQueueWorker);\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.worker.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAC5C,oDAAgD;AAChD,wCAA6C;AAC7C,iGAA4G;AAC5G,uGAAiG;AAG1F,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAC/B,gBAAe,CAAC;IAET,KAAK,CAAC,WAAW;QACpB,IAAA,mBAAY,GAAE,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,qEAA8B,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YACvF,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,IAA8B,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,oBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,yDAAkB,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,oDAAuB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,yDAAkB,CAAC,MAAM,EAAE,CAAC;gBAChD,MAAM,oDAAuB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAdY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,gBAAO,GAAE;;GACG,sBAAsB,CAclC;AAEY,QAAA,sBAAsB,GAAG,gBAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { mongoose } from '@typegoose/typegoose';\nimport { getLibraries } from '@lyxa.ai/core';\nimport { LTO_CAMPAIGN_TRANSITIONS_QUEUE, LtoCampaignJobName } from './limited-time-offer-campaign.producer';\nimport { limitedTimeOfferService } from '@modules/limited-time-offer/limited-time-offer.service';\n\n@Service()\nexport class LtoCampaignQueueWorker {\n constructor() {}\n\n public async startWorker(): Promise<void> {\n getLibraries().getBullMQService().createWorker(LTO_CAMPAIGN_TRANSITIONS_QUEUE, async job => {\n const { campaignId: campaignIdStr } = job.data as { campaignId: string };\n const campaignId = new mongoose.Types.ObjectId(campaignIdStr);\n if (job.name === LtoCampaignJobName.ACTIVATE) {\n await limitedTimeOfferService.activateCampaign(campaignId);\n } else if (job.name === LtoCampaignJobName.EXPIRE) {\n await limitedTimeOfferService.expireCampaign(campaignId);\n }\n });\n }\n}\n\nexport const ltoCampaignQueueWorker = Container.get(LtoCampaignQueueWorker);\n"]}
@@ -1,10 +1,21 @@
1
1
  import { LimitedTimeOfferCampaign } from '@lyxa.ai/core/dist/libraries/mongo/models';
2
2
  import { LimitedTimeOfferCampaignStatus } from '@lyxa.ai/core/dist/utilities/enum';
3
3
  import { CreateLtoCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO } from './limited-time-offer-campaign.validation';
4
+ export declare function nextOccurrenceDate(repeatDays: number[], refStart: Date, refEnd: Date): {
5
+ startDate: Date;
6
+ endDate: Date;
7
+ };
4
8
  export declare class LtoCampaignQueryBuilder {
5
- static buildCreateInput(dto: CreateLtoCampaignDTO, status: LimitedTimeOfferCampaignStatus, campaignNumber: number, config: {
6
- discountOptions: number[];
7
- maxDiscountCaps: number[];
9
+ static buildCreateInput(input: {
10
+ dto: CreateLtoCampaignDTO;
11
+ status: LimitedTimeOfferCampaignStatus;
12
+ campaignNumber: number;
13
+ config: {
14
+ discountOptions: number[];
15
+ maxDiscountCaps: number[];
16
+ };
17
+ startDate: Date;
18
+ endDate: Date;
8
19
  }): {
9
20
  campaignNumber: number;
10
21
  title: string | undefined;
@@ -14,9 +25,11 @@ export declare class LtoCampaignQueryBuilder {
14
25
  status: LimitedTimeOfferCampaignStatus;
15
26
  discountOptions: number[];
16
27
  maxDiscountCaps: number[];
28
+ repeatDays: number[];
17
29
  };
18
30
  static buildUpdateInput(campaign: LimitedTimeOfferCampaign, dto: UpdateLtoCampaignDTO): {
19
31
  status: LimitedTimeOfferCampaignStatus;
32
+ repeatDays?: number[] | undefined;
20
33
  maxDiscountCaps?: number[] | undefined;
21
34
  discountOptions?: number[] | undefined;
22
35
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.builder.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAC,oBAAoB,EAAE,wBAAwB,EAAE,oBAAoB,EAAC,MAAM,0CAA0C,CAAC;AAa9H,qBAAa,uBAAuB;IAChC,MAAM,CAAC,gBAAgB,CACnB,GAAG,EAAE,oBAAoB,EACzB,MAAM,EAAE,8BAA8B,EACtC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE;QAAC,eAAe,EAAE,MAAM,EAAE,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAA;KAAC;;;;;;;;;;IAclE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,GAAG,EAAE,oBAAoB;;;;;;;;;IAcrF,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,wBAAwB;;;;;;;IAIvD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAI9C,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;CAGxD"}
1
+ {"version":3,"file":"limited-time-offer-campaign.builder.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAC,oBAAoB,EAAE,wBAAwB,EAAE,oBAAoB,EAAC,MAAM,0CAA0C,CAAC;AAE9H,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAC,CAiBvH;AAaD,qBAAa,uBAAuB;IAChC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAC3B,GAAG,EAAE,oBAAoB,CAAC;QAC1B,MAAM,EAAE,8BAA8B,CAAC;QACvC,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE;YAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YAAC,eAAe,EAAE,MAAM,EAAE,CAAA;SAAC,CAAC;QAC/D,SAAS,EAAE,IAAI,CAAC;QAChB,OAAO,EAAE,IAAI,CAAC;KACjB;;;;;;;;;;;IAeD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,GAAG,EAAE,oBAAoB;;;;;;;;;;IAerF,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,wBAAwB;;;;;;;IAIvD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAI9C,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;CAGxD"}
@@ -1,7 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LtoCampaignQueryBuilder = void 0;
4
+ exports.nextOccurrenceDate = nextOccurrenceDate;
4
5
  const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
6
+ function nextOccurrenceDate(repeatDays, refStart, refEnd) {
7
+ const durationMs = refEnd.getTime() - refStart.getTime();
8
+ const now = new Date();
9
+ for (let daysAhead = 0; daysAhead < 8; daysAhead++) {
10
+ const candidate = new Date(now);
11
+ candidate.setDate(now.getDate() + daysAhead);
12
+ candidate.setHours(refStart.getHours(), refStart.getMinutes(), refStart.getSeconds(), 0);
13
+ if (repeatDays.includes(candidate.getDay()) && candidate.getTime() > now.getTime()) {
14
+ const startDate = candidate;
15
+ const endDate = new Date(startDate.getTime() + durationMs);
16
+ return { startDate, endDate };
17
+ }
18
+ }
19
+ return { startDate: refStart, endDate: refEnd };
20
+ }
5
21
  const ARCHIVED_STATUSES = [enum_1.LimitedTimeOfferCampaignStatus.EXPIRED, enum_1.LimitedTimeOfferCampaignStatus.CANCELLED];
6
22
  const SORT_FIELD_MAP = {
7
23
  id: '_id',
@@ -12,16 +28,18 @@ const SORT_FIELD_MAP = {
12
28
  status: 'status',
13
29
  };
14
30
  class LtoCampaignQueryBuilder {
15
- static buildCreateInput(dto, status, campaignNumber, config) {
31
+ static buildCreateInput(input) {
32
+ const { dto, status, campaignNumber, config, startDate, endDate } = input;
16
33
  return {
17
34
  campaignNumber,
18
35
  title: dto.title,
19
36
  subTitle: dto.subTitle,
20
- startDate: dto.startDate,
21
- endDate: dto.endDate,
37
+ startDate,
38
+ endDate,
22
39
  status,
23
40
  discountOptions: config.discountOptions,
24
41
  maxDiscountCaps: config.maxDiscountCaps,
42
+ repeatDays: dto.repeatDays ?? [],
25
43
  };
26
44
  }
27
45
  static buildUpdateInput(campaign, dto) {
@@ -33,6 +51,7 @@ class LtoCampaignQueryBuilder {
33
51
  endDate: dto.endDate,
34
52
  ...(dto.discountOptions && { discountOptions: dto.discountOptions }),
35
53
  ...(dto.maxDiscountCaps && { maxDiscountCaps: dto.maxDiscountCaps }),
54
+ ...(dto.repeatDays !== undefined && { repeatDays: dto.repeatDays }),
36
55
  status: isScheduledFromActive ? enum_1.LimitedTimeOfferCampaignStatus.SCHEDULED : campaign.status
37
56
  };
38
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.builder.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":";;;AACA,4DAAiF;AAGjF,MAAM,iBAAiB,GAAG,CAAC,qCAA8B,CAAC,OAAO,EAAE,qCAA8B,CAAC,SAAS,CAAC,CAAC;AAE7G,MAAM,cAAc,GAA2B;IAC3C,EAAE,EAAE,KAAK;IACT,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,WAAW;IAC1B,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAa,uBAAuB;IAChC,MAAM,CAAC,gBAAgB,CACnB,GAAyB,EACzB,MAAsC,EACtC,cAAsB,EACtB,MAA8D;QAE9D,OAAO;YACH,cAAc;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM;YACN,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,eAAe,EAAE,MAAM,CAAC,eAAe;SAC1C,CAAC;IACN,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,QAAkC,EAAE,GAAyB;QACjF,MAAM,qBAAqB,GAC9B,QAAQ,CAAC,MAAM,KAAK,qCAA8B,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC7F,OAAO;YACH,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;YAClC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;YAC3C,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAC,eAAe,EAAE,GAAG,CAAC,eAAe,EAAC,CAAC;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAC,eAAe,EAAE,GAAG,CAAC,eAAe,EAAC,CAAC;YAClE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,qCAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;SAC7F,CAAC;IACN,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAA6B;QACnD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAE,iBAAiB,EAAC,EAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAe;QACjC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,SAAkB;QACxC,OAAO,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;CACJ;AA5CD,0DA4CC","sourcesContent":["import {LimitedTimeOfferCampaign} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {CreateLtoCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO} from './limited-time-offer-campaign.validation';\n\nconst ARCHIVED_STATUSES = [LimitedTimeOfferCampaignStatus.EXPIRED, LimitedTimeOfferCampaignStatus.CANCELLED];\n\nconst SORT_FIELD_MAP: Record<string, string> = {\n id: '_id',\n campaignNumber: 'campaignNumber',\n startDateTime: 'startDate',\n endDateTime: 'endDate',\n shopsJoined: 'shopsJoined',\n status: 'status',\n};\n\nexport class LtoCampaignQueryBuilder {\n static buildCreateInput(\n dto: CreateLtoCampaignDTO,\n status: LimitedTimeOfferCampaignStatus,\n campaignNumber: number,\n config: {discountOptions: number[]; maxDiscountCaps: number[]},\n ) {\n return {\n campaignNumber,\n title: dto.title,\n subTitle: dto.subTitle,\n startDate: dto.startDate,\n endDate: dto.endDate,\n status,\n discountOptions: config.discountOptions,\n maxDiscountCaps: config.maxDiscountCaps,\n };\n }\n\n static buildUpdateInput(campaign: LimitedTimeOfferCampaign, dto: UpdateLtoCampaignDTO) {\n const isScheduledFromActive =\n\t\t\t\t\tcampaign.status === LimitedTimeOfferCampaignStatus.ACTIVE && dto.startDate > campaign.startDate;\n return {\n title: dto.title ?? campaign.title,\n subTitle: dto.subTitle ?? campaign.subTitle,\n startDate: dto.startDate,\n endDate: dto.endDate,\n ...(dto.discountOptions && {discountOptions: dto.discountOptions}),\n ...(dto.maxDiscountCaps && {maxDiscountCaps: dto.maxDiscountCaps}),\n status: isScheduledFromActive ? LimitedTimeOfferCampaignStatus.SCHEDULED : campaign.status\n };\n }\n\n static buildHistoryFilter(dto: GetLtoCampaignHistoryDTO) {\n return dto.status ? {status: dto.status} : {status: {$in: ARCHIVED_STATUSES}};\n }\n\n static buildSortField(sortBy?: string): string {\n return sortBy ? (SORT_FIELD_MAP[sortBy] ?? 'createdAt') : 'createdAt';\n }\n\n static buildSortDirection(sortOrder?: string): 1 | -1 {\n return sortOrder === 'asc' ? 1 : -1;\n }\n}\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.builder.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":"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","sourcesContent":["import {LimitedTimeOfferCampaign} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {CreateLtoCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO} from './limited-time-offer-campaign.validation';\n\nexport function nextOccurrenceDate(repeatDays: number[], refStart: Date, refEnd: Date): {startDate: Date; endDate: Date} {\n const durationMs = refEnd.getTime() - refStart.getTime();\n const now = new Date();\n\n for (let daysAhead = 0; daysAhead < 8; daysAhead++) {\n const candidate = new Date(now);\n candidate.setDate(now.getDate() + daysAhead);\n candidate.setHours(refStart.getHours(), refStart.getMinutes(), refStart.getSeconds(), 0);\n\n if (repeatDays.includes(candidate.getDay()) && candidate.getTime() > now.getTime()) {\n const startDate = candidate;\n const endDate = new Date(startDate.getTime() + durationMs);\n return {startDate, endDate};\n }\n }\n\n return {startDate: refStart, endDate: refEnd};\n}\n\nconst ARCHIVED_STATUSES = [LimitedTimeOfferCampaignStatus.EXPIRED, LimitedTimeOfferCampaignStatus.CANCELLED];\n\nconst SORT_FIELD_MAP: Record<string, string> = {\n id: '_id',\n campaignNumber: 'campaignNumber',\n startDateTime: 'startDate',\n endDateTime: 'endDate',\n shopsJoined: 'shopsJoined',\n status: 'status',\n};\n\nexport class LtoCampaignQueryBuilder {\n static buildCreateInput(input: {\n dto: CreateLtoCampaignDTO;\n status: LimitedTimeOfferCampaignStatus;\n campaignNumber: number;\n config: {discountOptions: number[]; maxDiscountCaps: number[]};\n startDate: Date;\n endDate: Date;\n }) {\n const {dto, status, campaignNumber, config, startDate, endDate} = input;\n return {\n campaignNumber,\n title: dto.title,\n subTitle: dto.subTitle,\n startDate,\n endDate,\n status,\n discountOptions: config.discountOptions,\n maxDiscountCaps: config.maxDiscountCaps,\n repeatDays: dto.repeatDays ?? [],\n };\n }\n\n static buildUpdateInput(campaign: LimitedTimeOfferCampaign, dto: UpdateLtoCampaignDTO) {\n const isScheduledFromActive =\n\t\t\t\t\tcampaign.status === LimitedTimeOfferCampaignStatus.ACTIVE && dto.startDate > campaign.startDate;\n return {\n title: dto.title ?? campaign.title,\n subTitle: dto.subTitle ?? campaign.subTitle,\n startDate: dto.startDate,\n endDate: dto.endDate,\n ...(dto.discountOptions && {discountOptions: dto.discountOptions}),\n ...(dto.maxDiscountCaps && {maxDiscountCaps: dto.maxDiscountCaps}),\n ...(dto.repeatDays !== undefined && {repeatDays: dto.repeatDays}),\n status: isScheduledFromActive ? LimitedTimeOfferCampaignStatus.SCHEDULED : campaign.status\n };\n }\n\n static buildHistoryFilter(dto: GetLtoCampaignHistoryDTO) {\n return dto.status ? {status: dto.status} : {status: {$in: ARCHIVED_STATUSES}};\n }\n\n static buildSortField(sortBy?: string): string {\n return sortBy ? (SORT_FIELD_MAP[sortBy] ?? 'createdAt') : 'createdAt';\n }\n\n static buildSortDirection(sortOrder?: string): 1 | -1 {\n return sortOrder === 'asc' ? 1 : -1;\n }\n}\n"]}
@@ -13,6 +13,8 @@ export declare class LtoCampaignRepository {
13
13
  updateById(id: mongoose.Types.ObjectId, updates: object): Promise<DocumentType<Model> | null>;
14
14
  setStatus(id: mongoose.Types.ObjectId, status: LimitedTimeOfferCampaignStatus, archive?: boolean): Promise<void>;
15
15
  nextCampaignNumber(): Promise<number>;
16
+ findScheduledRecurring(): Promise<DocumentType<Model>[]>;
17
+ findActiveRecurring(): Promise<DocumentType<Model>[]>;
16
18
  findHistory(dto: GetLtoCampaignHistoryDTO): Promise<{
17
19
  documents: LtoCampaignHistoryItemDTO[];
18
20
  total: number;
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.repository.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAEH,wBAAwB,IAAI,KAAK,EAGpC,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAc,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAC,wBAAwB,EAAE,yBAAyB,EAAC,MAAM,0CAA0C,CAAC;AAK7G,qBACa,qBAAqB;IAC9B,OAAO,CAAC,KAAK,CAAgE;;IAMvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAInD,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIlD,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIjD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI1E,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI7F,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,8BAA8B,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9G,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IASrC,WAAW,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,yBAAyB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;CA4CrH;AAED,eAAO,MAAM,qBAAqB,uBAAuC,CAAC"}
1
+ {"version":3,"file":"limited-time-offer-campaign.repository.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAEH,wBAAwB,IAAI,KAAK,EAGpC,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAc,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAC,wBAAwB,EAAE,yBAAyB,EAAC,MAAM,0CAA0C,CAAC;AAK7G,qBACa,qBAAqB;IAC9B,OAAO,CAAC,KAAK,CAAgE;;IAMvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAInD,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIlD,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIjD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI1E,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI7F,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,8BAA8B,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9G,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IASrC,sBAAsB,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAOxD,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAOrD,WAAW,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,yBAAyB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;CA4CrH;AAED,eAAO,MAAM,qBAAqB,uBAAuC,CAAC"}
@@ -80,6 +80,18 @@ let LtoCampaignRepository = class LtoCampaignRepository {
80
80
  const counter = await models_1.CounterModel.findOneAndUpdate({ counterType: enum_1.CounterType.LTO_CAMPAIGN }, { $inc: { value: 1 } }, { upsert: true, new: true, setDefaultsOnInsert: true });
81
81
  return counter.value;
82
82
  }
83
+ async findScheduledRecurring() {
84
+ return this.model.find({
85
+ status: enum_1.LimitedTimeOfferCampaignStatus.SCHEDULED,
86
+ repeatDays: { $exists: true, $not: { $size: 0 } },
87
+ });
88
+ }
89
+ async findActiveRecurring() {
90
+ return this.model.find({
91
+ status: enum_1.LimitedTimeOfferCampaignStatus.ACTIVE,
92
+ repeatDays: { $exists: true, $not: { $size: 0 } },
93
+ });
94
+ }
83
95
  async findHistory(dto) {
84
96
  const filter = limited_time_offer_campaign_builder_1.LtoCampaignQueryBuilder.buildHistoryFilter(dto);
85
97
  const sortField = limited_time_offer_campaign_builder_1.LtoCampaignQueryBuilder.buildSortField(dto.sortBy);
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.repository.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, {Service} from 'typedi';\nimport {DocumentType, mongoose} from '@typegoose/typegoose';\nimport {\n CounterModel,\n LimitedTimeOfferCampaign as Model,\n LimitedTimeOfferCampaignModel,\n LimitedTimeOfferParticipantModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {SoftDeleteModel} from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {CounterType, LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {GetLtoCampaignHistoryDTO, LtoCampaignHistoryItemDTO} from './limited-time-offer-campaign.validation';\nimport {LtoCampaignQueryBuilder} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.builder';\n\nconst ACTIVE_STATUSES = [LimitedTimeOfferCampaignStatus.SCHEDULED, LimitedTimeOfferCampaignStatus.ACTIVE];\n\n@Service()\nexport class LtoCampaignRepository {\n private model: typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n\n constructor() {\n this.model = LimitedTimeOfferCampaignModel as typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n }\n\n async create(input: object): Promise<DocumentType<Model>> {\n return this.model.create(input);\n }\n\n async findCurrent(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: {$in: ACTIVE_STATUSES}}).sort({createdAt: -1});\n }\n\n async findActive(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: LimitedTimeOfferCampaignStatus.ACTIVE}).sort({createdAt: -1});\n }\n\n async findById(id: mongoose.Types.ObjectId): Promise<DocumentType<Model> | null> {\n return this.model.findById(id);\n }\n\n async hasActiveCampaign(): Promise<boolean> {\n return !!(await this.model.exists({status: {$in: ACTIVE_STATUSES}}));\n }\n\n async updateById(id: mongoose.Types.ObjectId, updates: object): Promise<DocumentType<Model> | null> {\n return this.model.findByIdAndUpdate(id, {$set: updates}, {new: true});\n }\n\n async setStatus(id: mongoose.Types.ObjectId, status: LimitedTimeOfferCampaignStatus, archive = false): Promise<void> {\n await this.model.findByIdAndUpdate(id, {\n $set: {status, ...(archive && {archivedAt: new Date()})},\n });\n }\n\n async nextCampaignNumber(): Promise<number> {\n const counter = await CounterModel.findOneAndUpdate(\n {counterType: CounterType.LTO_CAMPAIGN},\n {$inc: {value: 1}},\n {upsert: true, new: true, setDefaultsOnInsert: true},\n );\n return counter.value;\n }\n\n async findHistory(dto: GetLtoCampaignHistoryDTO): Promise<{documents: LtoCampaignHistoryItemDTO[]; total: number}> {\n const filter = LtoCampaignQueryBuilder.buildHistoryFilter(dto);\n const sortField = LtoCampaignQueryBuilder.buildSortField(dto.sortBy);\n const sortDirection = LtoCampaignQueryBuilder.buildSortDirection(dto.sortOrder);\n\n const [result] = await this.model.aggregate([\n {$match: filter},\n {\n $lookup: {\n from: LimitedTimeOfferParticipantModel.collection.name,\n let: {campaignId: '$_id'},\n pipeline: [\n {$match: {$expr: {$and: [{$eq: ['$campaign', '$$campaignId']}, {$eq: ['$isWithdrawn', false]}]}}},\n {$count: 'count'},\n ],\n as: 'joinedStats',\n },\n },\n {$addFields: {shopsJoined: {$ifNull: [{$arrayElemAt: ['$joinedStats.count', 0]}, 0]}}},\n {$sort: {[sortField]: sortDirection, _id: sortDirection}},\n {\n $facet: {\n total: [{$count: 'count'}],\n documents: [\n {$skip: (dto.page - 1) * dto.size},\n {$limit: dto.size},\n {$project: {_id: 1, campaignNumber: 1, startDate: 1, endDate: 1, status: 1, shopsJoined: 1}},\n ],\n },\n },\n ]);\n\n const total: number = result?.total?.[0]?.count ?? 0;\n const documents: LtoCampaignHistoryItemDTO[] = (result?.documents ?? []).map((d: any) => ({\n id: d._id.toString(),\n campaignNumber: d.campaignNumber,\n startDateTime: d.startDate,\n endDateTime: d.endDate,\n shopsJoined: d.shopsJoined,\n status: d.status,\n }));\n\n return {documents, total};\n }\n}\n\nexport const ltoCampaignRepository = Container.get(LtoCampaignRepository);\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.repository.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, {Service} from 'typedi';\nimport {DocumentType, mongoose} from '@typegoose/typegoose';\nimport {\n CounterModel,\n LimitedTimeOfferCampaign as Model,\n LimitedTimeOfferCampaignModel,\n LimitedTimeOfferParticipantModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {SoftDeleteModel} from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {CounterType, LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {GetLtoCampaignHistoryDTO, LtoCampaignHistoryItemDTO} from './limited-time-offer-campaign.validation';\nimport {LtoCampaignQueryBuilder} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.builder';\n\nconst ACTIVE_STATUSES = [LimitedTimeOfferCampaignStatus.SCHEDULED, LimitedTimeOfferCampaignStatus.ACTIVE];\n\n@Service()\nexport class LtoCampaignRepository {\n private model: typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n\n constructor() {\n this.model = LimitedTimeOfferCampaignModel as typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n }\n\n async create(input: object): Promise<DocumentType<Model>> {\n return this.model.create(input);\n }\n\n async findCurrent(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: {$in: ACTIVE_STATUSES}}).sort({createdAt: -1});\n }\n\n async findActive(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: LimitedTimeOfferCampaignStatus.ACTIVE}).sort({createdAt: -1});\n }\n\n async findById(id: mongoose.Types.ObjectId): Promise<DocumentType<Model> | null> {\n return this.model.findById(id);\n }\n\n async hasActiveCampaign(): Promise<boolean> {\n return !!(await this.model.exists({status: {$in: ACTIVE_STATUSES}}));\n }\n\n async updateById(id: mongoose.Types.ObjectId, updates: object): Promise<DocumentType<Model> | null> {\n return this.model.findByIdAndUpdate(id, {$set: updates}, {new: true});\n }\n\n async setStatus(id: mongoose.Types.ObjectId, status: LimitedTimeOfferCampaignStatus, archive = false): Promise<void> {\n await this.model.findByIdAndUpdate(id, {\n $set: {status, ...(archive && {archivedAt: new Date()})},\n });\n }\n\n async nextCampaignNumber(): Promise<number> {\n const counter = await CounterModel.findOneAndUpdate(\n {counterType: CounterType.LTO_CAMPAIGN},\n {$inc: {value: 1}},\n {upsert: true, new: true, setDefaultsOnInsert: true},\n );\n return counter.value;\n }\n\n async findScheduledRecurring(): Promise<DocumentType<Model>[]> {\n return this.model.find({\n status: LimitedTimeOfferCampaignStatus.SCHEDULED,\n repeatDays: {$exists: true, $not: {$size: 0}},\n });\n }\n\n async findActiveRecurring(): Promise<DocumentType<Model>[]> {\n return this.model.find({\n status: LimitedTimeOfferCampaignStatus.ACTIVE,\n repeatDays: {$exists: true, $not: {$size: 0}},\n });\n }\n\n async findHistory(dto: GetLtoCampaignHistoryDTO): Promise<{documents: LtoCampaignHistoryItemDTO[]; total: number}> {\n const filter = LtoCampaignQueryBuilder.buildHistoryFilter(dto);\n const sortField = LtoCampaignQueryBuilder.buildSortField(dto.sortBy);\n const sortDirection = LtoCampaignQueryBuilder.buildSortDirection(dto.sortOrder);\n\n const [result] = await this.model.aggregate([\n {$match: filter},\n {\n $lookup: {\n from: LimitedTimeOfferParticipantModel.collection.name,\n let: {campaignId: '$_id'},\n pipeline: [\n {$match: {$expr: {$and: [{$eq: ['$campaign', '$$campaignId']}, {$eq: ['$isWithdrawn', false]}]}}},\n {$count: 'count'},\n ],\n as: 'joinedStats',\n },\n },\n {$addFields: {shopsJoined: {$ifNull: [{$arrayElemAt: ['$joinedStats.count', 0]}, 0]}}},\n {$sort: {[sortField]: sortDirection, _id: sortDirection}},\n {\n $facet: {\n total: [{$count: 'count'}],\n documents: [\n {$skip: (dto.page - 1) * dto.size},\n {$limit: dto.size},\n {$project: {_id: 1, campaignNumber: 1, startDate: 1, endDate: 1, status: 1, shopsJoined: 1}},\n ],\n },\n },\n ]);\n\n const total: number = result?.total?.[0]?.count ?? 0;\n const documents: LtoCampaignHistoryItemDTO[] = (result?.documents ?? []).map((d: any) => ({\n id: d._id.toString(),\n campaignNumber: d.campaignNumber,\n startDateTime: d.startDate,\n endDateTime: d.endDate,\n shopsJoined: d.shopsJoined,\n status: d.status,\n }));\n\n return {documents, total};\n }\n}\n\nexport const ltoCampaignRepository = Container.get(LtoCampaignRepository);\n"]}