@lyxa.ai/marketing 1.0.41 → 1.0.42

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 (209) hide show
  1. package/dist/lib/event/event-initializations.d.ts.map +1 -1
  2. package/dist/lib/event/event-initializations.js +2 -0
  3. package/dist/lib/event/event-initializations.js.map +1 -1
  4. package/dist/lib/event/event-listeners/event-listeners.d.ts.map +1 -1
  5. package/dist/lib/event/event-listeners/event-listeners.js.map +1 -1
  6. package/dist/lib/index.d.ts +643 -0
  7. package/dist/lib/index.d.ts.map +1 -1
  8. package/dist/lib/index.js +6 -6
  9. package/dist/lib/index.js.map +1 -1
  10. package/dist/lib/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  11. package/dist/lib/modules/coupon/services/coupon.service.d.ts +1 -0
  12. package/dist/lib/modules/coupon/services/coupon.service.d.ts.map +1 -1
  13. package/dist/lib/modules/coupon/services/coupon.service.js +61 -40
  14. package/dist/lib/modules/coupon/services/coupon.service.js.map +1 -1
  15. package/dist/lib/modules/coupon/services/helper.service.d.ts.map +1 -1
  16. package/dist/lib/modules/coupon/services/helper.service.js +11 -6
  17. package/dist/lib/modules/coupon/services/helper.service.js.map +1 -1
  18. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.d.ts.map +1 -1
  19. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js +108 -149
  20. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js.map +1 -1
  21. package/dist/lib/modules/coupon/services/referral-code-coupon.service.d.ts.map +1 -1
  22. package/dist/lib/modules/coupon/services/referral-code-coupon.service.js +1 -1
  23. package/dist/lib/modules/coupon/services/referral-code-coupon.service.js.map +1 -1
  24. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  25. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js +5 -1
  26. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js.map +1 -1
  27. package/dist/lib/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  28. package/dist/lib/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  29. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts +339 -0
  30. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -0
  31. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js +77 -0
  32. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js.map +1 -0
  33. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.d.ts +4 -0
  34. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -0
  35. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js +24 -0
  36. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js.map +1 -0
  37. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.producer.d.ts +12 -0
  38. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.producer.d.ts.map +1 -0
  39. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.producer.js +29 -0
  40. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.producer.js.map +1 -0
  41. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +8 -0
  42. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -0
  43. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js +79 -0
  44. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js.map +1 -0
  45. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +851 -0
  46. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -0
  47. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js +100 -0
  48. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js.map +1 -0
  49. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +11 -0
  50. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -0
  51. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js +75 -0
  52. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js.map +1 -0
  53. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +9 -0
  54. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -0
  55. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js +42 -0
  56. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js.map +1 -0
  57. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +78 -0
  58. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -0
  59. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js +308 -0
  60. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js.map +1 -0
  61. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.service.d.ts +12 -0
  62. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.service.d.ts.map +1 -0
  63. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.service.js +94 -0
  64. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.service.js.map +1 -0
  65. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.validation.d.ts +189 -0
  66. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.validation.d.ts.map +1 -0
  67. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.validation.js +24 -0
  68. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.validation.js.map +1 -0
  69. package/dist/lib/modules/limited-time-offer/config/limited-time-offer.router.d.ts +122 -0
  70. package/dist/lib/modules/limited-time-offer/config/limited-time-offer.router.d.ts.map +1 -0
  71. package/dist/lib/modules/limited-time-offer/config/limited-time-offer.router.js +37 -0
  72. package/dist/lib/modules/limited-time-offer/config/limited-time-offer.router.js.map +1 -0
  73. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts +644 -0
  74. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -0
  75. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.js +13 -0
  76. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.js.map +1 -0
  77. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +170 -0
  78. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -0
  79. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js +51 -0
  80. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js.map +1 -0
  81. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +603 -0
  82. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -0
  83. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js +85 -0
  84. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js.map +1 -0
  85. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +12 -0
  86. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -0
  87. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js +98 -0
  88. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js.map +1 -0
  89. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +21 -0
  90. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -0
  91. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js +133 -0
  92. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js.map +1 -0
  93. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts +2 -1
  94. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
  95. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js +23 -15
  96. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js.map +1 -1
  97. package/dist/lib/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  98. package/dist/lib/modules/marketing/routers/marketing.router.js.map +1 -1
  99. package/dist/lib/modules/marketing/services/buy1-get1-marketing.service.d.ts +0 -2
  100. package/dist/lib/modules/marketing/services/buy1-get1-marketing.service.d.ts.map +1 -1
  101. package/dist/lib/modules/marketing/services/buy1-get1-marketing.service.js +18 -39
  102. package/dist/lib/modules/marketing/services/buy1-get1-marketing.service.js.map +1 -1
  103. package/dist/lib/modules/marketing/services/discount-marketing.service.d.ts +0 -3
  104. package/dist/lib/modules/marketing/services/discount-marketing.service.d.ts.map +1 -1
  105. package/dist/lib/modules/marketing/services/discount-marketing.service.js +26 -52
  106. package/dist/lib/modules/marketing/services/discount-marketing.service.js.map +1 -1
  107. package/dist/lib/modules/marketing/services/marketing.service.d.ts +1 -0
  108. package/dist/lib/modules/marketing/services/marketing.service.d.ts.map +1 -1
  109. package/dist/lib/modules/marketing/services/marketing.service.js +55 -25
  110. package/dist/lib/modules/marketing/services/marketing.service.js.map +1 -1
  111. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts +9 -2
  112. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  113. package/dist/lib/modules/marketing/services/product-marketing.service.js +132 -7
  114. package/dist/lib/modules/marketing/services/product-marketing.service.js.map +1 -1
  115. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
  116. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js +30 -24
  117. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js.map +1 -1
  118. package/dist/lib/modules/marketing/transformers/buy1-get1-marketing.transformer.d.ts +3 -0
  119. package/dist/lib/modules/marketing/transformers/buy1-get1-marketing.transformer.d.ts.map +1 -1
  120. package/dist/lib/modules/marketing/transformers/discount-marketing.transformer.d.ts +3 -0
  121. package/dist/lib/modules/marketing/transformers/discount-marketing.transformer.d.ts.map +1 -1
  122. package/dist/lib/modules/marketing/transformers/product-marketing.transformer.d.ts +1 -0
  123. package/dist/lib/modules/marketing/transformers/product-marketing.transformer.d.ts.map +1 -1
  124. package/dist/lib/modules/marketing/validations/buy1-get1-marketing.validation.d.ts +30 -0
  125. package/dist/lib/modules/marketing/validations/buy1-get1-marketing.validation.d.ts.map +1 -1
  126. package/dist/lib/modules/marketing/validations/discount-marketing.validation.d.ts +45 -9
  127. package/dist/lib/modules/marketing/validations/discount-marketing.validation.d.ts.map +1 -1
  128. package/dist/lib/modules/marketing/validations/product-marketing.validation.d.ts +77 -0
  129. package/dist/lib/modules/marketing/validations/product-marketing.validation.d.ts.map +1 -1
  130. package/dist/lib/modules/marketing/validations/product-marketing.validation.js +20 -1
  131. package/dist/lib/modules/marketing/validations/product-marketing.validation.js.map +1 -1
  132. package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  133. package/dist/types/event/event-initializations.d.ts.map +1 -1
  134. package/dist/types/event/event-listeners/event-listeners.d.ts.map +1 -1
  135. package/dist/types/index.d.ts +643 -0
  136. package/dist/types/index.d.ts.map +1 -1
  137. package/dist/types/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  138. package/dist/types/modules/coupon/services/coupon.service.d.ts +1 -0
  139. package/dist/types/modules/coupon/services/coupon.service.d.ts.map +1 -1
  140. package/dist/types/modules/coupon/services/helper.service.d.ts.map +1 -1
  141. package/dist/types/modules/coupon/services/patterns/repository/CouponRepository.d.ts.map +1 -1
  142. package/dist/types/modules/coupon/services/referral-code-coupon.service.d.ts.map +1 -1
  143. package/dist/types/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  144. package/dist/types/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  145. package/dist/types/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  146. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts +339 -0
  147. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -0
  148. package/dist/types/modules/limited-time-offer/campaign/jobs/index.d.ts +4 -0
  149. package/dist/types/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -0
  150. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.producer.d.ts +12 -0
  151. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.producer.d.ts.map +1 -0
  152. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +8 -0
  153. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -0
  154. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +851 -0
  155. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -0
  156. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +11 -0
  157. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -0
  158. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +9 -0
  159. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -0
  160. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +78 -0
  161. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -0
  162. package/dist/types/modules/limited-time-offer/config/limited-time-offer-config.service.d.ts +12 -0
  163. package/dist/types/modules/limited-time-offer/config/limited-time-offer-config.service.d.ts.map +1 -0
  164. package/dist/types/modules/limited-time-offer/config/limited-time-offer-config.validation.d.ts +189 -0
  165. package/dist/types/modules/limited-time-offer/config/limited-time-offer-config.validation.d.ts.map +1 -0
  166. package/dist/types/modules/limited-time-offer/config/limited-time-offer.router.d.ts +122 -0
  167. package/dist/types/modules/limited-time-offer/config/limited-time-offer.router.d.ts.map +1 -0
  168. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts +644 -0
  169. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -0
  170. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +170 -0
  171. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -0
  172. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +1 -0
  173. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +1 -0
  174. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +603 -0
  175. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -0
  176. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +12 -0
  177. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -0
  178. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +21 -0
  179. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -0
  180. package/dist/types/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts +2 -1
  181. package/dist/types/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
  182. package/dist/types/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  183. package/dist/types/modules/marketing/services/buy1-get1-marketing.service.d.ts +0 -2
  184. package/dist/types/modules/marketing/services/buy1-get1-marketing.service.d.ts.map +1 -1
  185. package/dist/types/modules/marketing/services/discount-marketing.service.d.ts +0 -3
  186. package/dist/types/modules/marketing/services/discount-marketing.service.d.ts.map +1 -1
  187. package/dist/types/modules/marketing/services/marketing.service.d.ts +1 -0
  188. package/dist/types/modules/marketing/services/marketing.service.d.ts.map +1 -1
  189. package/dist/types/modules/marketing/services/product-marketing.service.d.ts +13 -2
  190. package/dist/types/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  191. package/dist/types/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
  192. package/dist/types/modules/marketing/transformers/buy1-get1-marketing.transformer.d.ts +3 -0
  193. package/dist/types/modules/marketing/transformers/buy1-get1-marketing.transformer.d.ts.map +1 -1
  194. package/dist/types/modules/marketing/transformers/discount-marketing.transformer.d.ts +3 -0
  195. package/dist/types/modules/marketing/transformers/discount-marketing.transformer.d.ts.map +1 -1
  196. package/dist/types/modules/marketing/transformers/product-marketing.transformer.d.ts +1 -0
  197. package/dist/types/modules/marketing/transformers/product-marketing.transformer.d.ts.map +1 -1
  198. package/dist/types/modules/marketing/validations/buy1-get1-marketing.validation.d.ts +30 -0
  199. package/dist/types/modules/marketing/validations/buy1-get1-marketing.validation.d.ts.map +1 -1
  200. package/dist/types/modules/marketing/validations/discount-marketing.validation.d.ts +45 -9
  201. package/dist/types/modules/marketing/validations/discount-marketing.validation.d.ts.map +1 -1
  202. package/dist/types/modules/marketing/validations/product-marketing.validation.d.ts +77 -0
  203. package/dist/types/modules/marketing/validations/product-marketing.validation.d.ts.map +1 -1
  204. package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  205. package/package.json +2 -2
  206. package/dist/lib/events/event-initializations.d.ts +0 -2
  207. package/dist/lib/events/event-initializations.d.ts.map +0 -1
  208. package/dist/lib/events/event-initializations.js +0 -5
  209. package/dist/lib/events/event-initializations.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"marketing.router.js","sourceRoot":"/","sources":["modules/marketing/routers/marketing.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { createTRPCRouter, publicProcedure } from '@lyxa.ai/core/dist/libraries/trpc';\nimport { createAuthenticatedProcedure } from '@lyxa.ai/core/dist/libraries/trpc/middlewares/auth';\nimport { marketingService as service } from '@modules/marketing/services';\nimport { synchronizeProductMarketingService as syncMarketingProductInfoService } from '@modules/marketing/services';\nimport {\n\tAllMarketingsValidationSchema,\n\tMarketingResponseSchema as ResponseSchema,\n\tAllMarketingsUpdateSchema,\n\tProductEntireMenuMarketingHandlerSchema,\n\tMarketingSpendLimitsEvaluationSchema,\n\tSyncProductMarketingForMultipleProductsSchema,\n\tMarketingGraphInputSchema,\n} from '@modules/marketing/validations';\nimport { response } from '@lyxa.ai/core/dist/utilities/response';\nimport {\n\tFilterSchema,\n\tDeleteSchema,\n\tGetByIdInputSchema,\n\tIdSchema,\n} from '@lyxa.ai/core/dist/utilities/validation';\nimport { ErrorHandler } from '@lyxa.ai/core/dist/utilities/error-handler';\nimport { AuthEntityType } from '@lyxa.ai/core/dist/libraries/auth';\nimport { mongoose } from '@typegoose/typegoose';\nimport { marketingMetricsRepository } from '../patterns/repository/MarketingMetricsRepository';\n\nexport const marketingRouter = createTRPCRouter({\n\tcreate: createAuthenticatedProcedure({ entityTypes: [AuthEntityType.CRM, AuthEntityType.SELLER] })\n\t\t.input(AllMarketingsValidationSchema)\n\t\t.output(ResponseSchema)\n\t\t.mutation(async ({ ctx, input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\tconst isAdmin = ctx.entity?.type == AuthEntityType.CRM;\n\t\t\t\tawait service.create(input, isAdmin ? new mongoose.Types.ObjectId(ctx.entity?.id) : undefined);\n\t\t\t\treturn response('Marketing created successfully');\n\t\t\t})\n\t\t),\n\n\tgetById: publicProcedure.input(GetByIdInputSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.findById(input);\n\t\t\treturn response('Marketing fetched successfully', result);\n\t\t})\n\t),\n\n\tget: publicProcedure.input(FilterSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.find(input);\n\t\t\treturn response('Marketing fetched successfully', result);\n\t\t})\n\t),\n\n\tupdate: createAuthenticatedProcedure({ entityTypes: [AuthEntityType.CRM, AuthEntityType.SELLER] })\n\t\t.input(AllMarketingsUpdateSchema)\n\t\t.output(ResponseSchema)\n\t\t.mutation(async ({ ctx, input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\tconst { _id, ...rest } = input;\n\t\t\t\tconst isAdmin = ctx.entity?.type == AuthEntityType.CRM;\n\n\t\t\t\tawait service.update(_id, rest, isAdmin ? new mongoose.Types.ObjectId(ctx.entity?.id) : undefined);\n\t\t\t\treturn response('Marketing updated successfully');\n\t\t\t})\n\t\t),\n\n\tdeleteById: createAuthenticatedProcedure({ entityTypes: [AuthEntityType.CRM, AuthEntityType.SELLER] })\n\t\t.input(DeleteSchema)\n\t\t.output(ResponseSchema)\n\t\t.mutation(async ({ ctx, input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\tconst isAdmin = ctx.entity?.type == AuthEntityType.CRM;\n\t\t\t\tawait service.deleteById(input, isAdmin ? new mongoose.Types.ObjectId(ctx.entity?.id) : undefined);\n\t\t\t\treturn response('Marketing deleted successfully');\n\t\t\t})\n\t\t),\n\n\thandleNewProductForEntireMenuMarketing: publicProcedure\n\t\t.input(ProductEntireMenuMarketingHandlerSchema)\n\t\t.mutation(async ({ input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\tawait service.handleNewProductForEntireMenuMarketing(input);\n\t\t\t\treturn response('Product handled successfully');\n\t\t\t})\n\t\t),\n\n\tsyncAllProductsMarketingInfo: publicProcedure.query(async ({}) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\treturn await syncMarketingProductInfoService.publishAllProductsProductMarketingInfoProcessEvent();\n\t\t})\n\t),\n\n\tsyncAllProductsMarketingInfoLocal: publicProcedure.mutation(async ({}) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\treturn await syncMarketingProductInfoService.syncAllProductsMarketingInfo();\n\t\t})\n\t),\n\n\tsyncProductMarketingInfoByProductId: publicProcedure.query(async ({}) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst productId = new mongoose.Types.ObjectId('68f663c355f42c826a129fc6'); // Todo: use productId sent from param\n\t\t\treturn await syncMarketingProductInfoService.syncProductMarketingInfoByProductId(productId);\n\t\t})\n\t),\n\n\tsyncProductMarketingInfoByProductIds: publicProcedure\n\t\t.input(SyncProductMarketingForMultipleProductsSchema)\n\t\t.mutation(async ({ input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\treturn await syncMarketingProductInfoService.syncProductMarketingInfoByProductIds(input.productIds);\n\t\t\t})\n\t\t),\n\n\tcalculateMarketingSpent: publicProcedure.input(IdSchema).mutation(async ({ ctx, input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.calculateMarketingSpent(input);\n\t\t\treturn response('Marketing amount spent calculated successfully', result);\n\t\t})\n\t),\n\n\tincrementMarketingSpentFromOrder: publicProcedure.input(IdSchema).mutation(async ({ ctx, input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.incrementMarketingSpentFromOrder(input);\n\t\t\treturn response('Marketing amount spent incremented successfully', result);\n\t\t})\n\t),\n\n\tdecrementMarketingSpentFromOrder: publicProcedure.input(IdSchema).mutation(async ({ ctx, input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.decrementMarketingSpentFromOrder(input);\n\t\t\treturn response('Marketing amount spent decremented successfully', result);\n\t\t})\n\t),\n\n\trecomputeAndSyncAllMarketingSpent: publicProcedure.mutation(async ({}) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.recomputeAndSyncAllMarketingSpent();\n\t\t\treturn response('Marketing amount spent recomputed and synced successfully', result);\n\t\t})\n\t),\n\n\tgetMetrics: publicProcedure.input(IdSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.getMetrics(input);\n\t\t\treturn response('Marketing metrics fetched successfully', result);\n\t\t})\n\t),\n\n\tgetOrdersGraph: publicProcedure.input(MarketingGraphInputSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.getOrdersGraph(input);\n\t\t\treturn response('Marketing orders graph data fetched successfully', result);\n\t\t})\n\t),\n\n\tgetCustomersGraph: publicProcedure.input(MarketingGraphInputSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.getCustomersGraph(input);\n\t\t\treturn response('Marketing customers graph data fetched successfully', result);\n\t\t})\n\t),\n\n\tgetAmountSpentGraph: publicProcedure.input(MarketingGraphInputSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.getAmountSpentGraph(input);\n\t\t\treturn response('Marketing amount spent graph data fetched successfully', result);\n\t\t})\n\t),\n});\n"]}
1
+ {"version":3,"file":"marketing.router.js","sourceRoot":"/","sources":["modules/marketing/routers/marketing.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { createTRPCRouter, publicProcedure } from '@lyxa.ai/core/dist/libraries/trpc';\nimport { createAuthenticatedProcedure } from '@lyxa.ai/core/dist/libraries/trpc/middlewares/auth';\nimport { marketingService as service } from '@modules/marketing/services';\nimport { synchronizeProductMarketingService as syncMarketingProductInfoService } from '@modules/marketing/services';\nimport {\n\tAllMarketingsValidationSchema,\n\tMarketingResponseSchema as ResponseSchema,\n\tAllMarketingsUpdateSchema,\n\tProductEntireMenuMarketingHandlerSchema,\n\tMarketingSpendLimitsEvaluationSchema,\n\tSyncProductMarketingForMultipleProductsSchema,\n\tMarketingGraphInputSchema,\n} from '@modules/marketing/validations';\nimport { response } from '@lyxa.ai/core/dist/utilities/response';\nimport {\n\tFilterSchema,\n\tDeleteSchema,\n\tGetByIdInputSchema,\n\tIdSchema,\n} from '@lyxa.ai/core/dist/utilities/validation';\nimport { ErrorHandler } from '@lyxa.ai/core/dist/utilities/error-handler';\nimport { AuthEntityType } from '@lyxa.ai/core/dist/libraries/auth';\nimport { mongoose } from '@typegoose/typegoose';\nimport { marketingMetricsRepository } from '../patterns/repository/MarketingMetricsRepository';\n\nexport const marketingRouter = createTRPCRouter({\n\tcreate: createAuthenticatedProcedure({ entityTypes: [AuthEntityType.CRM, AuthEntityType.SELLER] })\n\t\t.input(AllMarketingsValidationSchema)\n\t\t.output(ResponseSchema)\n\t\t.mutation(async ({ ctx, input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\tconst isAdmin = ctx.entity?.type == AuthEntityType.CRM;\n\t\t\t\tawait service.create(input, isAdmin ? new mongoose.Types.ObjectId(ctx.entity?.id) : undefined);\n\t\t\t\treturn response('Marketing created successfully');\n\t\t\t})\n\t\t),\n\n\tgetById: publicProcedure.input(GetByIdInputSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.findById(input);\n\t\t\treturn response('Marketing fetched successfully', result);\n\t\t})\n\t),\n\n\tget: publicProcedure.input(FilterSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.find(input);\n\t\t\treturn response('Marketing fetched successfully', result);\n\t\t})\n\t),\n\n\tupdate: createAuthenticatedProcedure({ entityTypes: [AuthEntityType.CRM, AuthEntityType.SELLER] })\n\t\t.input(AllMarketingsUpdateSchema)\n\t\t.output(ResponseSchema)\n\t\t.mutation(async ({ ctx, input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\tconst { _id, ...rest } = input;\n\t\t\t\tconst isAdmin = ctx.entity?.type == AuthEntityType.CRM;\n\n\t\t\t\tawait service.update(_id, rest, isAdmin ? new mongoose.Types.ObjectId(ctx.entity?.id) : undefined);\n\t\t\t\treturn response('Marketing updated successfully');\n\t\t\t})\n\t\t),\n\n\tdeleteById: createAuthenticatedProcedure({ entityTypes: [AuthEntityType.CRM, AuthEntityType.SELLER] })\n\t\t.input(DeleteSchema)\n\t\t.output(ResponseSchema)\n\t\t.mutation(async ({ ctx, input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\tconst isAdmin = ctx.entity?.type == AuthEntityType.CRM;\n\t\t\t\tawait service.deleteById(input, isAdmin ? new mongoose.Types.ObjectId(ctx.entity?.id) : undefined);\n\t\t\t\treturn response('Marketing deleted successfully');\n\t\t\t})\n\t\t),\n\n\thandleNewProductForEntireMenuMarketing: publicProcedure\n\t\t.input(ProductEntireMenuMarketingHandlerSchema)\n\t\t.mutation(async ({ input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\tawait service.handleNewProductForEntireMenuMarketing(input);\n\t\t\t\treturn response('Product handled successfully');\n\t\t\t})\n\t\t),\n\n\tsyncAllProductsMarketingInfo: publicProcedure.query(async ({}) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\treturn await syncMarketingProductInfoService.publishAllProductsProductMarketingInfoProcessEvent();\n\t\t})\n\t),\n\n\tsyncAllProductsMarketingInfoLocal: publicProcedure.mutation(async ({}) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\treturn await syncMarketingProductInfoService.syncAllProductsMarketingInfo();\n\t\t})\n\t),\n\n\t// DEV purpose only\n\tsyncProductMarketingInfoByProductId: publicProcedure.query(async ({}) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst productId = new mongoose.Types.ObjectId('68f663c355f42c826a129fc6'); // Todo: use productId sent from param\n\t\t\treturn await syncMarketingProductInfoService.syncProductMarketingInfoByProductId(productId);\n\t\t})\n\t),\n\n\tsyncProductMarketingInfoByProductIds: publicProcedure\n\t\t.input(SyncProductMarketingForMultipleProductsSchema)\n\t\t.mutation(async ({ input }) =>\n\t\t\tErrorHandler.wrapAsync(async () => {\n\t\t\t\treturn await syncMarketingProductInfoService.syncProductMarketingInfoByProductIds(input.productIds);\n\t\t\t})\n\t\t),\n\n\tcalculateMarketingSpent: publicProcedure.input(IdSchema).mutation(async ({ ctx, input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.calculateMarketingSpent(input);\n\t\t\treturn response('Marketing amount spent calculated successfully', result);\n\t\t})\n\t),\n\n\tincrementMarketingSpentFromOrder: publicProcedure.input(IdSchema).mutation(async ({ ctx, input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.incrementMarketingSpentFromOrder(input);\n\t\t\treturn response('Marketing amount spent incremented successfully', result);\n\t\t})\n\t),\n\n\tdecrementMarketingSpentFromOrder: publicProcedure.input(IdSchema).mutation(async ({ ctx, input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.decrementMarketingSpentFromOrder(input);\n\t\t\treturn response('Marketing amount spent decremented successfully', result);\n\t\t})\n\t),\n\n\trecomputeAndSyncAllMarketingSpent: publicProcedure.mutation(async ({}) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await service.recomputeAndSyncAllMarketingSpent();\n\t\t\treturn response('Marketing amount spent recomputed and synced successfully', result);\n\t\t})\n\t),\n\n\tgetMetrics: publicProcedure.input(IdSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.getMetrics(input);\n\t\t\treturn response('Marketing metrics fetched successfully', result);\n\t\t})\n\t),\n\n\tgetOrdersGraph: publicProcedure.input(MarketingGraphInputSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.getOrdersGraph(input);\n\t\t\treturn response('Marketing orders graph data fetched successfully', result);\n\t\t})\n\t),\n\n\tgetCustomersGraph: publicProcedure.input(MarketingGraphInputSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.getCustomersGraph(input);\n\t\t\treturn response('Marketing customers graph data fetched successfully', result);\n\t\t})\n\t),\n\n\tgetAmountSpentGraph: publicProcedure.input(MarketingGraphInputSchema).query(async ({ input }) =>\n\t\tErrorHandler.wrapAsync(async () => {\n\t\t\tconst result = await marketingMetricsRepository.getAmountSpentGraph(input);\n\t\t\treturn response('Marketing amount spent graph data fetched successfully', result);\n\t\t})\n\t),\n});\n"]}
@@ -7,8 +7,6 @@ export declare class Buy1Get1MarketingService {
7
7
  constructor();
8
8
  create(data: CreateDTO): Promise<DocumentType<Model>>;
9
9
  update(_id: mongoose.Types.ObjectId, data: UpdateDTO): Promise<DocumentType<Model>>;
10
- private createSingleProductMarketing;
11
- private createProductMarketings;
12
10
  }
13
11
  export declare const buy1Get1MarketingService: Buy1Get1MarketingService;
14
12
  //# sourceMappingURL=buy1-get1-marketing.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buy1-get1-marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/buy1-get1-marketing.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAEN,iBAAiB,IAAI,KAAK,EAE1B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACN,0BAA0B,IAAI,SAAS,EACvC,0BAA0B,IAAI,SAAS,EACvC,MAAM,gCAAgC,CAAC;AAIxC,qBACa,wBAAwB;IACpC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,YAAY,CAAsB;;IAW7B,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAuBrD,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YA6ClF,4BAA4B;YAW5B,uBAAuB;CAoCrC;AAED,eAAO,MAAM,wBAAwB,0BAA0C,CAAC"}
1
+ {"version":3,"file":"buy1-get1-marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/buy1-get1-marketing.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAEN,iBAAiB,IAAI,KAAK,EAE1B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACN,0BAA0B,IAAI,SAAS,EACvC,0BAA0B,IAAI,SAAS,EACvC,MAAM,gCAAgC,CAAC;AAIxC,qBACa,wBAAwB;IACpC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,YAAY,CAAsB;;IAW7B,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAyBrD,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;CA8ChG;AAED,eAAO,MAAM,wBAAwB,0BAA0C,CAAC"}
@@ -44,7 +44,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.buy1Get1MarketingService = exports.Buy1Get1MarketingService = void 0;
46
46
  const typedi_1 = __importStar(require("typedi"));
47
- const typegoose_1 = require("@typegoose/typegoose");
48
47
  const models_1 = require("@lyxa.ai/core/dist/libraries/mongo/models/");
49
48
  const _1 = require("./");
50
49
  const error_common_1 = require("@lyxa.ai/core/dist/utilities/error-common");
@@ -60,7 +59,15 @@ let Buy1Get1MarketingService = class Buy1Get1MarketingService {
60
59
  if (!result) {
61
60
  (0, error_common_1.internalServerError)('Unable to create marketing');
62
61
  }
63
- await this.createProductMarketings(result.shop._id, result._id, data.products.map(p => p.product) ?? [], data.categories ?? [], data.isEntireMenu ?? false);
62
+ await _1.productMarketingService.createProductMarketings({
63
+ shop: result.shop._id,
64
+ marketingId: result._id,
65
+ isEntireMenu: data.isEntireMenu,
66
+ isAppliedByCompany: data.isAppliedByCompany,
67
+ categories: data.categories,
68
+ products: data.products,
69
+ isBuy1Get1: true,
70
+ });
64
71
  return result;
65
72
  }
66
73
  async update(_id, data) {
@@ -85,47 +92,19 @@ let Buy1Get1MarketingService = class Buy1Get1MarketingService {
85
92
  data.isEntireMenu) {
86
93
  await _1.productMarketingService.deleteMany({ marketing: _id }, true);
87
94
  }
88
- await this.createProductMarketings(record.shop._id, _id, data.products?.map((p) => p.product) ?? [], data.categories ?? [], data.isEntireMenu ?? false);
95
+ await _1.productMarketingService.createProductMarketings({
96
+ shop: record.shop._id,
97
+ marketingId: _id,
98
+ isEntireMenu: data.isEntireMenu,
99
+ isAppliedByCompany: data.isAppliedByCompany,
100
+ categories: data.categories,
101
+ products: data.products,
102
+ isBuy1Get1: true,
103
+ });
89
104
  if (!record)
90
105
  (0, error_common_1.notFoundError)('Record not found');
91
106
  return record;
92
107
  }
93
- async createSingleProductMarketing(marketingId, productId) {
94
- await _1.productMarketingService.create({
95
- marketing: marketingId,
96
- product: productId,
97
- isBuy1Get1: true,
98
- });
99
- }
100
- async createProductMarketings(shop, marketingId, products, categories, isEntireMenu) {
101
- if (isEntireMenu) {
102
- await this.productModel
103
- .find({ shop })
104
- .select('_id')
105
- .exec()
106
- .then(async (productDocuments) => {
107
- for (const product of productDocuments) {
108
- await this.createSingleProductMarketing(marketingId, product._id);
109
- }
110
- });
111
- }
112
- else {
113
- const productsToProcess = new Set(products.map(p => p._id.toString()));
114
- const categoryWiseProducts = await this.productModel
115
- .find({
116
- shopCategory: { $in: categories },
117
- })
118
- .lean();
119
- if (categoryWiseProducts) {
120
- categoryWiseProducts.forEach(p => {
121
- productsToProcess.add(p._id.toString());
122
- });
123
- }
124
- for (const product of productsToProcess) {
125
- await this.createSingleProductMarketing(marketingId, new typegoose_1.mongoose.Types.ObjectId(product));
126
- }
127
- }
128
- }
129
108
  };
130
109
  exports.Buy1Get1MarketingService = Buy1Get1MarketingService;
131
110
  exports.Buy1Get1MarketingService = Buy1Get1MarketingService = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"buy1-get1-marketing.service.js","sourceRoot":"/","sources":["modules/marketing/services/buy1-get1-marketing.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { TRPCError } from '@trpc/server';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport {\n\tBuy1Get1MarketingModel,\n\tBuy1Get1Marketing as Model,\n\tProductModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models/';\nimport {\n\tCreateBuy1Get1MarketingDTO as CreateDTO,\n\tUpdateBuy1Get1MarketingDTO as UpdateDTO,\n} from '@modules/marketing/validations';\nimport { productMarketingService } from './';\nimport { internalServerError, notFoundError } from '@lyxa.ai/core/dist/utilities/error-common';\n\n@Service()\nexport class Buy1Get1MarketingService {\n\tprivate model: typeof Buy1Get1MarketingModel;\n\tprivate productModel: typeof ProductModel;\n\n\tconstructor() {\n\t\tthis.model = Buy1Get1MarketingModel;\n\t\tthis.productModel = ProductModel;\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): Promise<DocumentType<Model>> {\n\t\tconst result = await this.model.create(data);\n\n\t\tif (!result) {\n\t\t\tinternalServerError('Unable to create marketing');\n\t\t}\n\n\t\tawait this.createProductMarketings(\n\t\t\tresult.shop._id,\n\t\t\tresult._id,\n\t\t\tdata.products.map(p => p.product) ?? [],\n\t\t\tdata.categories ?? [],\n\t\t\tdata.isEntireMenu ?? false\n\t\t);\n\n\t\treturn result;\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 */\n\tpublic async update(_id: mongoose.Types.ObjectId, data: UpdateDTO): Promise<DocumentType<Model>> {\n\t\tconst { products, ...rest } = data;\n\t\tconst record = await this.model\n\t\t\t.findOneAndUpdate(\n\t\t\t\t{\n\t\t\t\t\t_id: _id,\n\t\t\t\t\tdeletedAt: null,\n\t\t\t\t},\n\t\t\t\trest,\n\t\t\t\t{\n\t\t\t\t\tnew: true,\n\t\t\t\t\trunValidators: true,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.populate({\n\t\t\t\tpath: 'shop',\n\t\t\t\tselect: '_id name shopId',\n\t\t\t});\n\t\t\n\t\tif (!record) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\t\t\n\t\t// Remove all products from product-marketings collection\n\t\tif (\n\t\t\t(data.products && data.products.length > 0) ||\n\t\t\t(data.categories && data.categories.length > 0) ||\n\t\t\tdata.isEntireMenu\n\t\t) {\n\t\t\tawait productMarketingService.deleteMany({ marketing: _id }, true);\n\t\t}\n\n\t\tawait this.createProductMarketings(\n\t\t\trecord.shop._id,\n\t\t\t_id,\n\t\t\tdata.products?.map((p: any) => p.product) ?? [],\n\t\t\tdata.categories ?? [],\n\t\t\tdata.isEntireMenu ?? false\n\t\t);\n\n\t\tif (!record) notFoundError('Record not found');\n\n\t\treturn record;\n\t}\n\n\tprivate async createSingleProductMarketing(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tproductId: mongoose.Types.ObjectId\n\t): Promise<void> {\n\t\tawait productMarketingService.create({\n\t\t\tmarketing: marketingId,\n\t\t\tproduct: productId,\n\t\t\tisBuy1Get1: true,\n\t\t});\n\t}\n\n\tprivate async createProductMarketings(\n\t\tshop: mongoose.Types.ObjectId,\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tproducts: mongoose.Types.ObjectId[],\n\t\tcategories: mongoose.Types.ObjectId[],\n\t\tisEntireMenu: boolean\n\t): Promise<void> {\n\t\tif (isEntireMenu) {\n\t\t\tawait this.productModel\n\t\t\t\t.find({ shop })\n\t\t\t\t.select('_id')\n\t\t\t\t.exec()\n\t\t\t\t.then(async productDocuments => {\n\t\t\t\t\tfor (const product of productDocuments) {\n\t\t\t\t\t\tawait this.createSingleProductMarketing(marketingId, product._id);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t} else {\n\t\t\tconst productsToProcess = new Set(products.map(p => p._id.toString()));\n\t\t\tconst categoryWiseProducts = await this.productModel\n\t\t\t\t.find({\n\t\t\t\t\tshopCategory: { $in: categories },\n\t\t\t\t})\n\t\t\t\t.lean();\n\n\t\t\tif (categoryWiseProducts) {\n\t\t\t\tcategoryWiseProducts.forEach(p => {\n\t\t\t\t\tproductsToProcess.add(p._id.toString());\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (const product of productsToProcess) {\n\t\t\t\tawait this.createSingleProductMarketing(marketingId, new mongoose.Types.ObjectId(product));\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const buy1Get1MarketingService = Container.get(Buy1Get1MarketingService);\n"]}
1
+ {"version":3,"file":"buy1-get1-marketing.service.js","sourceRoot":"/","sources":["modules/marketing/services/buy1-get1-marketing.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAG5C,uEAIoD;AAKpD,yBAA6C;AAC7C,4EAA+F;AAGxF,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAC5B,KAAK,CAAgC;IACrC,YAAY,CAAsB;IAE1C;QACC,IAAI,CAAC,KAAK,GAAG,+BAAsB,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,qBAAY,CAAC;IAClC,CAAC;IAMM,KAAK,CAAC,MAAM,CAAC,IAAe;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,IAAA,kCAAmB,EAAC,4BAA4B,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,0BAAuB,CAAC,uBAAuB,CAAC;YACrD,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;YACrB,WAAW,EAAE,MAAM,CAAC,GAAG;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IACf,CAAC;IAOM,KAAK,CAAC,MAAM,CAAC,GAA4B,EAAE,IAAe;QAChE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK;aAC7B,gBAAgB,CAChB;YACC,GAAG,EAAE,GAAG;YACR,SAAS,EAAE,IAAI;SACf,EACD,IAAI,EACJ;YACC,GAAG,EAAE,IAAI;YACT,aAAa,EAAE,IAAI;SACnB,CACD;aACA,QAAQ,CAAC;YACT,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,iBAAiB;SACzB,CAAC,CAAC;QAEJ,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,IAAA,4BAAa,EAAC,qBAAqB,CAAC,CAAC;QACtC,CAAC;QAGD,IACC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,EAChB,CAAC;YACF,MAAM,0BAAuB,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,0BAAuB,CAAC,uBAAuB,CAAC;YACrD,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;YACrB,WAAW,EAAE,GAAG;YAChB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM;YAAE,IAAA,4BAAa,EAAC,kBAAkB,CAAC,CAAC;QAE/C,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AApFY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,gBAAO,GAAE;;GACG,wBAAwB,CAoFpC;AAEY,QAAA,wBAAwB,GAAG,gBAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { TRPCError } from '@trpc/server';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport {\n\tBuy1Get1MarketingModel,\n\tBuy1Get1Marketing as Model,\n\tProductModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models/';\nimport {\n\tCreateBuy1Get1MarketingDTO as CreateDTO,\n\tUpdateBuy1Get1MarketingDTO as UpdateDTO,\n} from '@modules/marketing/validations';\nimport { productMarketingService } from './';\nimport { internalServerError, notFoundError } from '@lyxa.ai/core/dist/utilities/error-common';\n\n@Service()\nexport class Buy1Get1MarketingService {\n\tprivate model: typeof Buy1Get1MarketingModel;\n\tprivate productModel: typeof ProductModel;\n\n\tconstructor() {\n\t\tthis.model = Buy1Get1MarketingModel;\n\t\tthis.productModel = ProductModel;\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): Promise<DocumentType<Model>> {\n\t\tconst result = await this.model.create(data);\n\n\t\tif (!result) {\n\t\t\tinternalServerError('Unable to create marketing');\n\t\t}\n\n\t\tawait productMarketingService.createProductMarketings({\n\t\t\tshop: result.shop._id,\n\t\t\tmarketingId: result._id,\n\t\t\tisEntireMenu: data.isEntireMenu,\n\t\t\tisAppliedByCompany: data.isAppliedByCompany,\n\t\t\tcategories: data.categories,\n\t\t\tproducts: data.products,\n\t\t\tisBuy1Get1: true,\n\t\t});\n\n\t\treturn result;\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 */\n\tpublic async update(_id: mongoose.Types.ObjectId, data: UpdateDTO): Promise<DocumentType<Model>> {\n\t\tconst { products, ...rest } = data;\n\t\tconst record = await this.model\n\t\t\t.findOneAndUpdate(\n\t\t\t\t{\n\t\t\t\t\t_id: _id,\n\t\t\t\t\tdeletedAt: null,\n\t\t\t\t},\n\t\t\t\trest,\n\t\t\t\t{\n\t\t\t\t\tnew: true,\n\t\t\t\t\trunValidators: true,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.populate({\n\t\t\t\tpath: 'shop',\n\t\t\t\tselect: '_id name shopId',\n\t\t\t});\n\n\t\tif (!record) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\n\t\t// Remove all products from product-marketings collection\n\t\tif (\n\t\t\t(data.products && data.products.length > 0) ||\n\t\t\t(data.categories && data.categories.length > 0) ||\n\t\t\tdata.isEntireMenu\n\t\t) {\n\t\t\tawait productMarketingService.deleteMany({ marketing: _id }, true);\n\t\t}\n\n\t\tawait productMarketingService.createProductMarketings({\n\t\t\tshop: record.shop._id,\n\t\t\tmarketingId: _id,\n\t\t\tisEntireMenu: data.isEntireMenu,\n\t\t\tisAppliedByCompany: data.isAppliedByCompany,\n\t\t\tcategories: data.categories,\n\t\t\tproducts: data.products,\n\t\t\tisBuy1Get1: true,\n\t\t});\n\n\t\tif (!record) notFoundError('Record not found');\n\n\t\treturn record;\n\t}\n}\n\nexport const buy1Get1MarketingService = Container.get(Buy1Get1MarketingService);\n"]}
@@ -1,15 +1,12 @@
1
1
  import { DocumentType, mongoose } from '@typegoose/typegoose';
2
2
  import { DiscountMarketing as Model } from '@lyxa.ai/core/dist/libraries/mongo/models';
3
3
  import { CreateDiscountMarketingDTO as CreateDTO, UpdateDiscountMarketingDTO as UpdateDTO } from '../../marketing/validations';
4
- import { ValueType } from '@lyxa.ai/core/dist/utilities/enum';
5
4
  export declare class DiscountMarketingService {
6
5
  private model;
7
6
  private productModel;
8
7
  constructor();
9
8
  create(data: CreateDTO): Promise<DocumentType<Model>>;
10
9
  update(_id: mongoose.Types.ObjectId, data: UpdateDTO): Promise<DocumentType<Model>>;
11
- createSingleProductMarketing(marketingId: mongoose.Types.ObjectId, productId: mongoose.Types.ObjectId, value: number, valueType: ValueType): Promise<void>;
12
- private createProductMarketings;
13
10
  }
14
11
  export declare const discountMarketingService: DiscountMarketingService;
15
12
  //# sourceMappingURL=discount-marketing.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"discount-marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/discount-marketing.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAEN,iBAAiB,IAAI,KAAK,EAE1B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACN,0BAA0B,IAAI,SAAS,EACvC,0BAA0B,IAAI,SAAS,EACvC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAO9D,qBACa,wBAAwB;IACpC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,YAAY,CAAsB;;IAW7B,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAuBrD,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAiDnF,4BAA4B,CACxC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EACpC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GAClB,OAAO,CAAC,IAAI,CAAC;YASF,uBAAuB;CAkErC;AAED,eAAO,MAAM,wBAAwB,0BAA0C,CAAC"}
1
+ {"version":3,"file":"discount-marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/discount-marketing.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAEN,iBAAiB,IAAI,KAAK,EAE1B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACN,0BAA0B,IAAI,SAAS,EACvC,0BAA0B,IAAI,SAAS,EACvC,MAAM,gCAAgC,CAAC;AASxC,qBACa,wBAAwB;IACpC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,YAAY,CAAsB;;IAW7B,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAyBrD,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;CAkDhG;AAED,eAAO,MAAM,wBAAwB,0BAA0C,CAAC"}
@@ -44,7 +44,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.discountMarketingService = exports.DiscountMarketingService = void 0;
46
46
  const typedi_1 = __importStar(require("typedi"));
47
- const typegoose_1 = require("@typegoose/typegoose");
48
47
  const models_1 = require("@lyxa.ai/core/dist/libraries/mongo/models");
49
48
  const _1 = require("./");
50
49
  const error_common_1 = require("@lyxa.ai/core/dist/utilities/error-common");
@@ -57,7 +56,19 @@ let DiscountMarketingService = class DiscountMarketingService {
57
56
  }
58
57
  async create(data) {
59
58
  const result = await this.model.create(data);
60
- await this.createProductMarketings(data.shop, result._id, data.products, data.categories, data.isEntireMenu, data.categoryValue, data.categoryValueType, data.value, data.valueType);
59
+ await _1.productMarketingService.createProductMarketings({
60
+ shop: data.shop,
61
+ marketingId: result._id,
62
+ isEntireMenu: data.isEntireMenu,
63
+ isAppliedByCompany: data.isAppliedByCompany,
64
+ categories: data.categories,
65
+ categoryValue: data.categoryValue,
66
+ categoryValueType: data.categoryValueType,
67
+ products: data.products,
68
+ value: data.value,
69
+ valueType: data.valueType,
70
+ isBuy1Get1: false,
71
+ });
61
72
  return result;
62
73
  }
63
74
  async update(_id, data) {
@@ -82,60 +93,23 @@ let DiscountMarketingService = class DiscountMarketingService {
82
93
  data.isEntireMenu) {
83
94
  await _1.productMarketingService.deleteMany({ marketing: _id }, true);
84
95
  }
85
- await this.createProductMarketings(record.shop._id, record._id, data.products, data.categories, data.isEntireMenu, data.categoryValue, data.categoryValueType, data.value, data.valueType);
96
+ await _1.productMarketingService.createProductMarketings({
97
+ shop: record.shop._id,
98
+ marketingId: record._id,
99
+ isEntireMenu: data.isEntireMenu,
100
+ isAppliedByCompany: data.isAppliedByCompany,
101
+ categories: data.categories,
102
+ categoryValue: data.categoryValue,
103
+ categoryValueType: data.categoryValueType,
104
+ products: data.products,
105
+ value: data.value,
106
+ valueType: data.valueType,
107
+ isBuy1Get1: false,
108
+ });
86
109
  if (!record)
87
110
  (0, error_common_1.notFoundError)('Record not found');
88
111
  return record;
89
112
  }
90
- async createSingleProductMarketing(marketingId, productId, value, valueType) {
91
- _1.productMarketingService.create({
92
- marketing: marketingId,
93
- product: productId,
94
- value: value,
95
- valueType: valueType,
96
- });
97
- }
98
- async createProductMarketings(shop, marketingId, products, categories, isEntireMenu, categoryValue, categoryValueType, value, valueType) {
99
- if (isEntireMenu) {
100
- await this.productModel
101
- .find({ shop })
102
- .select('_id')
103
- .exec()
104
- .then(async (productDocuments) => {
105
- for (const product of productDocuments) {
106
- await this.createSingleProductMarketing(marketingId, product._id, value, valueType);
107
- }
108
- });
109
- }
110
- else {
111
- const productsMap = (products || []).reduce((acc, p) => {
112
- const idStr = p.product.toString();
113
- if (p.value !== undefined && p.valueType !== undefined) {
114
- acc[idStr] = {
115
- value: Number(p.value),
116
- valueType: p.valueType,
117
- };
118
- }
119
- return acc;
120
- }, {});
121
- const categoryWiseProducts = (await this.productModel
122
- .find({
123
- shopCategory: { $in: categories },
124
- })
125
- .lean()).map(p => p._id.toString());
126
- for (const id of categoryWiseProducts) {
127
- if (!productsMap[id] && categoryValue !== undefined && categoryValueType !== undefined) {
128
- productsMap[id] = {
129
- value: Number(categoryValue),
130
- valueType: categoryValueType,
131
- };
132
- }
133
- }
134
- for (const [productId, info] of Object.entries(productsMap)) {
135
- await this.createSingleProductMarketing(marketingId, new typegoose_1.mongoose.Types.ObjectId(productId), info.value, info.valueType);
136
- }
137
- }
138
- }
139
113
  };
140
114
  exports.DiscountMarketingService = DiscountMarketingService;
141
115
  exports.DiscountMarketingService = DiscountMarketingService = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"discount-marketing.service.js","sourceRoot":"/","sources":["modules/marketing/services/discount-marketing.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport {\n\tDiscountMarketingModel,\n\tDiscountMarketing as Model,\n\tProductModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {\n\tCreateDiscountMarketingDTO as CreateDTO,\n\tUpdateDiscountMarketingDTO as UpdateDTO,\n} from '@modules/marketing/validations';\nimport { productMarketingService } from './';\nimport { ValueType } from '@lyxa.ai/core/dist/utilities/enum';\nimport {\n\tbadRequestError,\n\tinternalServerError,\n\tnotFoundError,\n} from '@lyxa.ai/core/dist/utilities/error-common';\n\n@Service()\nexport class DiscountMarketingService {\n\tprivate model: typeof DiscountMarketingModel;\n\tprivate productModel: typeof ProductModel;\n\n\tconstructor() {\n\t\tthis.model = DiscountMarketingModel;\n\t\tthis.productModel = ProductModel;\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): Promise<DocumentType<Model>> {\n\t\tconst result = await this.model.create(data);\n\n\t\tawait this.createProductMarketings(\n\t\t\tdata.shop,\n\t\t\tresult._id,\n\t\t\tdata.products,\n\t\t\tdata.categories,\n\t\t\tdata.isEntireMenu,\n\t\t\tdata.categoryValue,\n\t\t\tdata.categoryValueType,\n\t\t\tdata.value,\n\t\t\tdata.valueType\n\t\t);\n\n\t\treturn result;\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 */\n\tpublic async update(_id: mongoose.Types.ObjectId, data: UpdateDTO): Promise<DocumentType<Model>> {\n\t\tconst { categories, products, ...rest } = data;\n\t\tconst record = await this.model\n\t\t\t.findOneAndUpdate(\n\t\t\t\t{\n\t\t\t\t\t_id: _id,\n\t\t\t\t\tdeletedAt: null,\n\t\t\t\t},\n\t\t\t\t{ categories, ...rest },\n\t\t\t\t{\n\t\t\t\t\tnew: true,\n\t\t\t\t\trunValidators: true,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.populate({\n\t\t\t\tpath: 'shop',\n\t\t\t\tselect: '_id name shopId',\n\t\t\t});\n\n\t\tif (!record) {\n\t\t\tinternalServerError('Could not update marketing');\n\t\t}\n\n\t\t// Remove all products from product-marketings collection\n\t\tif (\n\t\t\t(data.products && data.products.length > 0) ||\n\t\t\t(data.categories && data.categories.length > 0) ||\n\t\t\tdata.isEntireMenu\n\t\t) {\n\t\t\tawait productMarketingService.deleteMany({ marketing: _id }, true);\n\t\t}\n\n\t\tawait this.createProductMarketings(\n\t\t\trecord.shop._id,\n\t\t\trecord._id,\n\t\t\tdata.products,\n\t\t\tdata.categories,\n\t\t\tdata.isEntireMenu,\n\t\t\tdata.categoryValue,\n\t\t\tdata.categoryValueType,\n\t\t\tdata.value,\n\t\t\tdata.valueType\n\t\t);\n\n\t\tif (!record) notFoundError('Record not found');\n\n\t\treturn record;\n\t}\n\n\tpublic async createSingleProductMarketing(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tproductId: mongoose.Types.ObjectId,\n\t\tvalue: number,\n\t\tvalueType: ValueType\n\t): Promise<void> {\n\t\tproductMarketingService.create({\n\t\t\tmarketing: marketingId,\n\t\t\tproduct: productId,\n\t\t\tvalue: value,\n\t\t\tvalueType: valueType,\n\t\t});\n\t}\n\n\tprivate async createProductMarketings(\n\t\tshop: mongoose.Types.ObjectId,\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tproducts: { product: mongoose.Types.ObjectId; value?: number; valueType?: ValueType | null }[],\n\t\tcategories: mongoose.Types.ObjectId[],\n\t\tisEntireMenu: boolean,\n\t\tcategoryValue?: number,\n\t\tcategoryValueType?: ValueType,\n\t\tvalue?: number,\n\t\tvalueType?: ValueType\n\t): Promise<void> {\n\t\tif (isEntireMenu) {\n\t\t\tawait this.productModel\n\t\t\t\t.find({ shop })\n\t\t\t\t.select('_id')\n\t\t\t\t.exec()\n\t\t\t\t.then(async productDocuments => {\n\t\t\t\t\tfor (const product of productDocuments) {\n\t\t\t\t\t\tawait this.createSingleProductMarketing(marketingId, product._id, value!, valueType!);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t} else {\n\t\t\tconst productsMap = (products || []).reduce(\n\t\t\t\t(acc, p) => {\n\t\t\t\t\tconst idStr = p.product.toString();\n\n\t\t\t\t\tif ((p as any).value !== undefined && (p as any).valueType !== undefined) {\n\t\t\t\t\t\tacc[idStr] = {\n\t\t\t\t\t\t\tvalue: Number((p as any).value),\n\t\t\t\t\t\t\tvalueType: (p as any).valueType,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{} as Record<string, { value: number; valueType: ValueType }>\n\t\t\t);\n\n\t\t\tconst categoryWiseProducts = (\n\t\t\t\tawait this.productModel\n\t\t\t\t\t.find({\n\t\t\t\t\t\tshopCategory: { $in: categories },\n\t\t\t\t\t})\n\t\t\t\t\t.lean()\n\t\t\t).map(p => p._id.toString());\n\n\t\t\t// ensure category products are present in the map with category values if not already set\n\t\t\tfor (const id of categoryWiseProducts) {\n\t\t\t\tif (!productsMap[id] && categoryValue !== undefined && categoryValueType !== undefined) {\n\t\t\t\t\tproductsMap[id] = {\n\t\t\t\t\t\tvalue: Number(categoryValue),\n\t\t\t\t\t\tvalueType: categoryValueType,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// process all entries\n\t\t\tfor (const [productId, info] of Object.entries(productsMap)) {\n\t\t\t\tawait this.createSingleProductMarketing(\n\t\t\t\t\tmarketingId,\n\t\t\t\t\tnew mongoose.Types.ObjectId(productId),\n\t\t\t\t\tinfo.value,\n\t\t\t\t\tinfo.valueType\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const discountMarketingService = Container.get(DiscountMarketingService);\n"]}
1
+ {"version":3,"file":"discount-marketing.service.js","sourceRoot":"/","sources":["modules/marketing/services/discount-marketing.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport {\n\tDiscountMarketingModel,\n\tDiscountMarketing as Model,\n\tProductModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {\n\tCreateDiscountMarketingDTO as CreateDTO,\n\tUpdateDiscountMarketingDTO as UpdateDTO,\n} from '@modules/marketing/validations';\nimport { productMarketingService } from './';\nimport { ValueType } from '@lyxa.ai/core/dist/utilities/enum';\nimport {\n\tbadRequestError,\n\tinternalServerError,\n\tnotFoundError,\n} from '@lyxa.ai/core/dist/utilities/error-common';\n\n@Service()\nexport class DiscountMarketingService {\n\tprivate model: typeof DiscountMarketingModel;\n\tprivate productModel: typeof ProductModel;\n\n\tconstructor() {\n\t\tthis.model = DiscountMarketingModel;\n\t\tthis.productModel = ProductModel;\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): Promise<DocumentType<Model>> {\n\t\tconst result = await this.model.create(data);\n\n\t\tawait productMarketingService.createProductMarketings({\n\t\t\tshop: data.shop,\n\t\t\tmarketingId: result._id,\n\t\t\tisEntireMenu: data.isEntireMenu,\n\t\t\tisAppliedByCompany: data.isAppliedByCompany,\n\t\t\tcategories: data.categories,\n\t\t\tcategoryValue: data.categoryValue,\n\t\t\tcategoryValueType: data.categoryValueType,\n\t\t\tproducts: data.products,\n\t\t\tvalue: data.value,\n\t\t\tvalueType: data.valueType,\n\t\t\tisBuy1Get1: false,\n\t\t});\n\n\t\treturn result;\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 */\n\tpublic async update(_id: mongoose.Types.ObjectId, data: UpdateDTO): Promise<DocumentType<Model>> {\n\t\tconst { categories, products, ...rest } = data;\n\t\tconst record = await this.model\n\t\t\t.findOneAndUpdate(\n\t\t\t\t{\n\t\t\t\t\t_id: _id,\n\t\t\t\t\tdeletedAt: null,\n\t\t\t\t},\n\t\t\t\t{ categories, ...rest },\n\t\t\t\t{\n\t\t\t\t\tnew: true,\n\t\t\t\t\trunValidators: true,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.populate({\n\t\t\t\tpath: 'shop',\n\t\t\t\tselect: '_id name shopId',\n\t\t\t});\n\n\t\tif (!record) {\n\t\t\tinternalServerError('Could not update marketing');\n\t\t}\n\n\t\t// Remove all products from product-marketings collection\n\t\tif (\n\t\t\t(data.products && data.products.length > 0) ||\n\t\t\t(data.categories && data.categories.length > 0) ||\n\t\t\tdata.isEntireMenu\n\t\t) {\n\t\t\tawait productMarketingService.deleteMany({ marketing: _id }, true);\n\t\t}\n\n\t\tawait productMarketingService.createProductMarketings({\n\t\t\tshop: record.shop._id,\n\t\t\tmarketingId: record._id,\n\t\t\tisEntireMenu: data.isEntireMenu,\n\t\t\tisAppliedByCompany: data.isAppliedByCompany,\n\t\t\tcategories: data.categories,\n\t\t\tcategoryValue: data.categoryValue,\n\t\t\tcategoryValueType: data.categoryValueType,\n\t\t\tproducts: data.products,\n\t\t\tvalue: data.value,\n\t\t\tvalueType: data.valueType,\n\t\t\tisBuy1Get1: false,\n\t\t});\n\n\t\tif (!record) notFoundError('Record not found');\n\n\t\treturn record;\n\t}\n}\n\nexport const discountMarketingService = Container.get(DiscountMarketingService);\n"]}
@@ -16,6 +16,7 @@ export declare class MarketingService {
16
16
  private verifyUnpauseConditions;
17
17
  private logMarketingAdminAction;
18
18
  deleteById(data: DeleteDTO, admin?: mongoose.Types.ObjectId): Promise<string>;
19
+ deleteManyByIds(marketingIds: mongoose.Types.ObjectId[], softDelete?: boolean): Promise<void>;
19
20
  handleNewProductForEntireMenuMarketing(data: ProductEntireMenuMarketingHandlerDTO): Promise<string>;
20
21
  incrementMarketingSpentFromOrder(orderId: mongoose.Types.ObjectId): Promise<any>;
21
22
  decrementMarketingSpentFromOrder(orderId: mongoose.Types.ObjectId): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/marketing.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAKN,SAAS,IAAI,KAAK,EAKlB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEN,0BAA0B,EAE1B,oCAAoC,EACpC,kBAAkB,IAAI,SAAS,EAC/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAmC3D,qBACa,gBAAgB;IAC5B,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,UAAU,CAA2D;IAC7E,OAAO,CAAC,0BAA0B,CAA6B;;IAalD,MAAM,CAClB,IAAI,EAAE,0BAA0B,EAChC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAC7B,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IA2HlB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAsB7D,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IA0B3F,MAAM,CAClB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC5B,IAAI,EAAE,SAAS,EACf,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAC7B,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAkHjB,uBAAuB;YAevB,uBAAuB;IAmBxB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAsC7E,sCAAsC,CAAC,IAAI,EAAE,oCAAoC;IAiCjF,gCAAgC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IA2BhF,gCAAgC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;YA2B/E,oCAAoC;YAYpC,kCAAkC;IAYnC,iCAAiC,IAAI,OAAO,CAAC,IAAI,CAAC;CA8C/D;AAED,eAAO,MAAM,gBAAgB,kBAAkC,CAAC"}
1
+ {"version":3,"file":"marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/marketing.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAMN,SAAS,IAAI,KAAK,EAKlB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEN,0BAA0B,EAE1B,oCAAoC,EACpC,kBAAkB,IAAI,SAAS,EAC/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAoC3D,qBACa,gBAAgB;IAC5B,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,UAAU,CAA2D;IAC7E,OAAO,CAAC,0BAA0B,CAA6B;;IAalD,MAAM,CAClB,IAAI,EAAE,0BAA0B,EAChC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAC7B,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAiIlB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAsB7D,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IA0B3F,MAAM,CAClB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC5B,IAAI,EAAE,SAAS,EACf,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAC7B,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAgHjB,uBAAuB;YAkBvB,uBAAuB;IAmBxB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAsC7E,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC1F,sCAAsC,CAAC,IAAI,EAAE,oCAAoC;IA8BjF,gCAAgC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAiChF,gCAAgC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;YAiC/E,oCAAoC;YAYpC,kCAAkC;IAYnC,iCAAiC,IAAI,OAAO,CAAC,IAAI,CAAC;CA8C/D;AAED,eAAO,MAAM,gBAAgB,kBAAkC,CAAC"}
@@ -46,6 +46,7 @@ exports.marketingService = exports.MarketingService = void 0;
46
46
  const typedi_1 = __importStar(require("typedi"));
47
47
  const server_1 = require("@trpc/server");
48
48
  const dayjs_1 = require("@lyxa.ai/core/dist/utilities/dayjs");
49
+ const typegoose_1 = require("@typegoose/typegoose");
49
50
  const models_1 = require("@lyxa.ai/core/dist/libraries/mongo/models");
50
51
  const pagination_1 = require("@lyxa.ai/core/dist/utilities/pagination");
51
52
  const events_common_methods_1 = require("@lyxa.ai/core/dist/utilities/events-common-methods");
@@ -75,6 +76,7 @@ let MarketingService = class MarketingService {
75
76
  marketingType: data.marketingType,
76
77
  'duration.end': { $gt: now },
77
78
  status: enum_1.MarketingStatus.ACTIVE,
79
+ isAppliedByCompany: data.isAppliedByCompany,
78
80
  });
79
81
  if (existingRecord) {
80
82
  throw new server_1.TRPCError({
@@ -88,7 +90,7 @@ let MarketingService = class MarketingService {
88
90
  'duration.start': { $lt: now },
89
91
  'duration.end': { $gt: now },
90
92
  status: enum_1.MarketingStatus.ACTIVE,
91
- marketingType: { $in: [enum_2.MarketingType.BUY1GET1, enum_2.MarketingType.DISCOUNT] },
93
+ marketingType: { $in: [enum_2.MarketingType.BUY1GET1, enum_2.MarketingType.DISCOUNT], $ne: data.marketingType },
92
94
  });
93
95
  if (existingMarketing) {
94
96
  throw new server_1.TRPCError({
@@ -106,7 +108,7 @@ let MarketingService = class MarketingService {
106
108
  message: `Product list contains duplicate products`,
107
109
  });
108
110
  }
109
- const isAvailable = await _1.productMarketingService.checkProductMarketingAvailability(productIds);
111
+ const isAvailable = await _1.productMarketingService.checkProductMarketingAvailability(productIds, data.isAppliedByCompany);
110
112
  if (!isAvailable) {
111
113
  throw new server_1.TRPCError({
112
114
  code: 'CONFLICT',
@@ -149,6 +151,7 @@ let MarketingService = class MarketingService {
149
151
  marketing = await this.model.create(data, admin);
150
152
  }
151
153
  }
154
+ await _1.productMarketingService.syncProductMarketingInfo(marketing._id);
152
155
  await this.model.populate(marketing, {
153
156
  path: 'shop',
154
157
  model: this.shopModel,
@@ -271,9 +274,7 @@ let MarketingService = class MarketingService {
271
274
  }
272
275
  this.logMarketingAdminAction(admin, enum_1.AdminLogsUpdatedFieldsType.EDITED_MARKETING_PROMOTIONS, oldMarketing, marketing);
273
276
  }
274
- if (data.status) {
275
- await _1.productMarketingService.syncProductMarketingInfo(_id);
276
- }
277
+ await _1.productMarketingService.syncProductMarketingInfo(_id);
277
278
  (0, events_common_methods_1.publishSyncSingleShopSectionsInCacheProcessEvent)({
278
279
  shopId: marketing.shop,
279
280
  operation: mongo_stream_changes_batch_process_shops_event_1.ChangeStreamOperationTypes.UPDATE,
@@ -287,7 +288,7 @@ let MarketingService = class MarketingService {
287
288
  if ([enum_2.MarketingType.BUY1GET1, enum_2.MarketingType.DISCOUNT].includes(marketing.marketingType)) {
288
289
  const typedMarketing = marketing;
289
290
  const productIds = typedMarketing.products.map((product) => product.product);
290
- const isAvailable = await _1.productMarketingService.checkProductMarketingAvailability(productIds);
291
+ const isAvailable = await _1.productMarketingService.checkProductMarketingAvailability(productIds, marketing.isAppliedByCompany);
291
292
  if (!isAvailable) {
292
293
  (0, error_common_1.conflictError)("You can't activate discount and B1G1 on the same items at the same time");
293
294
  }
@@ -333,6 +334,32 @@ let MarketingService = class MarketingService {
333
334
  });
334
335
  return 'Record deleted successfully';
335
336
  }
337
+ async deleteManyByIds(marketingIds, softDelete = true) {
338
+ if (marketingIds.length === 0)
339
+ return;
340
+ const marketings = await this.model
341
+ .find({ _id: { $in: marketingIds } })
342
+ .select('shop')
343
+ .lean();
344
+ await this.model.updateMany({ _id: { $in: marketingIds } }, { $set: { status: enum_1.MarketingStatus.DELETED } });
345
+ await this.model.deleteRecords({ _id: { $in: marketingIds } }, softDelete);
346
+ await _1.productMarketingService.deleteManyByMarketingIds(marketingIds, softDelete);
347
+ const uniqueShopIds = [
348
+ ...new Map(marketings
349
+ .map((m) => m.shop)
350
+ .filter(Boolean)
351
+ .map((s) => {
352
+ const id = s instanceof typegoose_1.mongoose.Types.ObjectId ? s : new typegoose_1.mongoose.Types.ObjectId(s);
353
+ return [id.toString(), id];
354
+ })).values(),
355
+ ];
356
+ for (const shopId of uniqueShopIds) {
357
+ (0, events_common_methods_1.publishSyncSingleShopSectionsInCacheProcessEvent)({
358
+ shopId,
359
+ operation: mongo_stream_changes_batch_process_shops_event_1.ChangeStreamOperationTypes.DELETE,
360
+ });
361
+ }
362
+ }
336
363
  async handleNewProductForEntireMenuMarketing(data) {
337
364
  const existingMarketing = await this.model.findOne({
338
365
  shop: data.shop,
@@ -342,29 +369,29 @@ let MarketingService = class MarketingService {
342
369
  isEntireMenu: true,
343
370
  });
344
371
  if (existingMarketing) {
345
- const isAvailable = await _1.productMarketingService.checkProductMarketingAvailability([data.product]);
346
- if (isAvailable) {
347
- const productMarketingData = {
348
- product: data.product,
349
- marketing: existingMarketing._id,
350
- };
351
- if (existingMarketing.marketingType == enum_2.MarketingType.BUY1GET1) {
352
- productMarketingData.isBuy1Get1 = true;
353
- }
354
- if (existingMarketing.marketingType == enum_2.MarketingType.DISCOUNT) {
355
- productMarketingData.value = existingMarketing.value;
356
- productMarketingData.valueType = existingMarketing.valueType;
357
- }
358
- const result = await _1.productMarketingService.create(productMarketingData);
359
- console.log(`Created product marketing: ${result}`);
372
+ const productMarketingData = {
373
+ product: data.product,
374
+ marketing: existingMarketing._id,
375
+ };
376
+ if (existingMarketing.marketingType == enum_2.MarketingType.BUY1GET1) {
377
+ productMarketingData.isBuy1Get1 = true;
378
+ }
379
+ if (existingMarketing.marketingType == enum_2.MarketingType.DISCOUNT) {
380
+ productMarketingData.value = existingMarketing.value;
381
+ productMarketingData.valueType = existingMarketing.valueType;
360
382
  }
383
+ await _1.productMarketingService.create(productMarketingData);
384
+ await _1.synchronizeProductMarketingService.syncProductMarketingInfoByProductId(data.product);
361
385
  }
362
386
  return 'Product handled successfully';
363
387
  }
364
388
  async incrementMarketingSpentFromOrder(orderId) {
365
389
  const order = (await this.orderModel
366
390
  .findById(orderId)
367
- .populate('lineItems'));
391
+ .populate([
392
+ { path: 'lineItems' },
393
+ { path: 'marketings', select: 'isAppliedByCompany' },
394
+ ]));
368
395
  if (!order || !order.marketings?.length) {
369
396
  return;
370
397
  }
@@ -384,7 +411,10 @@ let MarketingService = class MarketingService {
384
411
  async decrementMarketingSpentFromOrder(orderId) {
385
412
  const order = (await this.orderModel
386
413
  .findById(orderId)
387
- .populate('lineItems'));
414
+ .populate([
415
+ { path: 'lineItems' },
416
+ { path: 'marketings', select: 'isAppliedByCompany' },
417
+ ]));
388
418
  if (!order || !order.marketings?.length) {
389
419
  return;
390
420
  }
@@ -407,7 +437,7 @@ let MarketingService = class MarketingService {
407
437
  isSpendLimitEnabled: true,
408
438
  status: { $ne: enum_1.MarketingStatus.EXPIRED },
409
439
  $expr: { $gte: ['$amountSpent', '$spendLimit'] },
410
- }, { $set: { status: enum_1.MarketingStatus.EXPIRED } });
440
+ }, { $set: { status: enum_1.MarketingStatus.EXPIRED, expiredAt: (0, dayjs_1.dayjs)().toDate() } });
411
441
  }
412
442
  async unExpireMarketingsBelowSpendLimits(marketingIds) {
413
443
  await this.model.updateMany({
@@ -415,7 +445,7 @@ let MarketingService = class MarketingService {
415
445
  isSpendLimitEnabled: true,
416
446
  status: enum_1.MarketingStatus.EXPIRED,
417
447
  $expr: { $lt: ['$amountSpent', '$spendLimit'] },
418
- }, { $set: { status: enum_1.MarketingStatus.ACTIVE } });
448
+ }, { $set: { status: enum_1.MarketingStatus.ACTIVE }, $unset: { expiredAt: 1 } });
419
449
  }
420
450
  async recomputeAndSyncAllMarketingSpent() {
421
451
  console.time('Recomputing all marketing spend');