@lyxa.ai/marketing 1.0.62 → 1.0.63

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 (276) 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 +2 -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 +69 -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 +533 -18
  16. package/dist/lib/index.d.ts.map +1 -1
  17. package/dist/lib/index.js +5 -1
  18. package/dist/lib/index.js.map +1 -1
  19. package/dist/lib/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
  20. package/dist/lib/modules/coupon/validations/create-coupon.validation.js +4 -1
  21. package/dist/lib/modules/coupon/validations/create-coupon.validation.js.map +1 -1
  22. package/dist/lib/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  23. package/dist/lib/modules/deal-setting/services/deal-setting.service.js +4 -1
  24. package/dist/lib/modules/deal-setting/services/deal-setting.service.js.map +1 -1
  25. package/dist/lib/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  26. package/dist/lib/modules/featured-setting/services/featured-setting.service.js +3 -0
  27. package/dist/lib/modules/featured-setting/services/featured-setting.service.js.map +1 -1
  28. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts +54 -8
  29. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  30. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js +11 -0
  31. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js.map +1 -1
  32. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  33. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js +6 -0
  34. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js.map +1 -1
  35. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
  36. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  37. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js +2 -6
  38. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js.map +1 -1
  39. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +16 -3
  40. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  41. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js +22 -3
  42. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js.map +1 -1
  43. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +2 -0
  44. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
  45. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js +12 -0
  46. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js.map +1 -1
  47. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +242 -35
  48. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  49. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js +19 -1
  50. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js.map +1 -1
  51. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +8 -1
  52. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  53. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js +64 -1
  54. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js.map +1 -1
  55. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +3 -0
  56. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  57. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js +66 -8
  58. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js.map +1 -1
  59. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
  60. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  61. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js +37 -19
  62. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js.map +1 -1
  63. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts +249 -18
  64. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  65. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts +2 -0
  66. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  67. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js +15 -3
  68. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js.map +1 -1
  69. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
  70. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js +1 -1
  71. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js.map +1 -1
  72. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +24 -3
  73. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
  74. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js +19 -1
  75. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js.map +1 -1
  76. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +10 -0
  77. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  78. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js +43 -0
  79. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js.map +1 -1
  80. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +195 -10
  81. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  82. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js +29 -0
  83. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js.map +1 -1
  84. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +1 -0
  85. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +1 -0
  86. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js +2 -0
  87. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js.map +1 -0
  88. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +427 -32
  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 +42 -7
  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 +15 -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 +84 -18
  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/patterns/repository/MarketingMetricsRepository.d.ts +1 -0
  109. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
  110. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js +29 -0
  111. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js.map +1 -1
  112. package/dist/lib/modules/marketing/routers/marketing.router.d.ts +14 -0
  113. package/dist/lib/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  114. package/dist/lib/modules/marketing/routers/marketing.router.js +5 -0
  115. package/dist/lib/modules/marketing/routers/marketing.router.js.map +1 -1
  116. package/dist/lib/modules/marketing/services/index.d.ts +3 -0
  117. package/dist/lib/modules/marketing/services/index.d.ts.map +1 -1
  118. package/dist/lib/modules/marketing/services/index.js +3 -0
  119. package/dist/lib/modules/marketing/services/index.js.map +1 -1
  120. package/dist/lib/modules/marketing/services/marketing-conflict.repository.d.ts +9 -0
  121. package/dist/lib/modules/marketing/services/marketing-conflict.repository.d.ts.map +1 -0
  122. package/dist/lib/modules/marketing/services/marketing-conflict.repository.js +63 -0
  123. package/dist/lib/modules/marketing/services/marketing-conflict.repository.js.map +1 -0
  124. package/dist/lib/modules/marketing/services/marketing-conflict.service.d.ts +28 -0
  125. package/dist/lib/modules/marketing/services/marketing-conflict.service.d.ts.map +1 -0
  126. package/dist/lib/modules/marketing/services/marketing-conflict.service.js +139 -0
  127. package/dist/lib/modules/marketing/services/marketing-conflict.service.js.map +1 -0
  128. package/dist/lib/modules/marketing/services/marketing.service.d.ts +7 -2
  129. package/dist/lib/modules/marketing/services/marketing.service.d.ts.map +1 -1
  130. package/dist/lib/modules/marketing/services/marketing.service.js +100 -51
  131. package/dist/lib/modules/marketing/services/marketing.service.js.map +1 -1
  132. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts +2 -3
  133. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  134. package/dist/lib/modules/marketing/services/product-marketing.service.js +42 -13
  135. package/dist/lib/modules/marketing/services/product-marketing.service.js.map +1 -1
  136. package/dist/lib/modules/marketing/services/spend-to-get-marketing.repository.d.ts +14 -0
  137. package/dist/lib/modules/marketing/services/spend-to-get-marketing.repository.d.ts.map +1 -0
  138. package/dist/lib/modules/marketing/services/spend-to-get-marketing.repository.js +82 -0
  139. package/dist/lib/modules/marketing/services/spend-to-get-marketing.repository.js.map +1 -0
  140. package/dist/lib/modules/marketing/services/spend-to-get-marketing.service.d.ts +11 -0
  141. package/dist/lib/modules/marketing/services/spend-to-get-marketing.service.d.ts.map +1 -0
  142. package/dist/lib/modules/marketing/services/spend-to-get-marketing.service.js +100 -0
  143. package/dist/lib/modules/marketing/services/spend-to-get-marketing.service.js.map +1 -0
  144. package/dist/lib/modules/marketing/services/spend-to-get-progress.repository.d.ts +9 -0
  145. package/dist/lib/modules/marketing/services/spend-to-get-progress.repository.d.ts.map +1 -0
  146. package/dist/lib/modules/marketing/services/spend-to-get-progress.repository.js +69 -0
  147. package/dist/lib/modules/marketing/services/spend-to-get-progress.repository.js.map +1 -0
  148. package/dist/lib/modules/marketing/services/spend-to-get-progress.service.d.ts +31 -0
  149. package/dist/lib/modules/marketing/services/spend-to-get-progress.service.d.ts.map +1 -0
  150. package/dist/lib/modules/marketing/services/spend-to-get-progress.service.js +123 -0
  151. package/dist/lib/modules/marketing/services/spend-to-get-progress.service.js.map +1 -0
  152. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
  153. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js +95 -27
  154. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js.map +1 -1
  155. package/dist/lib/modules/marketing/validations/all-marketings.validation.d.ts.map +1 -1
  156. package/dist/lib/modules/marketing/validations/all-marketings.validation.js +3 -0
  157. package/dist/lib/modules/marketing/validations/all-marketings.validation.js.map +1 -1
  158. package/dist/lib/modules/marketing/validations/index.d.ts +1 -0
  159. package/dist/lib/modules/marketing/validations/index.d.ts.map +1 -1
  160. package/dist/lib/modules/marketing/validations/index.js +1 -0
  161. package/dist/lib/modules/marketing/validations/index.js.map +1 -1
  162. package/dist/lib/modules/marketing/validations/marketing.validation.d.ts +17 -0
  163. package/dist/lib/modules/marketing/validations/marketing.validation.d.ts.map +1 -1
  164. package/dist/lib/modules/marketing/validations/marketing.validation.js +7 -1
  165. package/dist/lib/modules/marketing/validations/marketing.validation.js.map +1 -1
  166. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.d.ts +617 -0
  167. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.d.ts.map +1 -0
  168. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.js +119 -0
  169. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.js.map +1 -0
  170. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +24 -0
  171. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -0
  172. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js +97 -0
  173. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js.map +1 -0
  174. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts +271 -0
  175. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -0
  176. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.js +62 -0
  177. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.js.map +1 -0
  178. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts +24 -0
  179. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -0
  180. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.js +116 -0
  181. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.js.map +1 -0
  182. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +232 -0
  183. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -0
  184. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js +30 -0
  185. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js.map +1 -0
  186. package/dist/types/event/event-initializations.d.ts.map +1 -1
  187. package/dist/types/event/event-listeners/event-listeners.d.ts +2 -0
  188. package/dist/types/event/event-listeners/event-listeners.d.ts.map +1 -1
  189. package/dist/types/event/events/marketing-product-seed.event.d.ts +1 -2
  190. package/dist/types/event/events/marketing-product-seed.event.d.ts.map +1 -1
  191. package/dist/types/event/events/marketing-product-sync.event.d.ts +11 -0
  192. package/dist/types/event/events/marketing-product-sync.event.d.ts.map +1 -0
  193. package/dist/types/index.d.ts +533 -18
  194. package/dist/types/index.d.ts.map +1 -1
  195. package/dist/types/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
  196. package/dist/types/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  197. package/dist/types/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  198. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts +54 -8
  199. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  200. package/dist/types/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  201. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
  202. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  203. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +16 -3
  204. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  205. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +2 -0
  206. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
  207. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +242 -35
  208. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  209. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +8 -1
  210. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  211. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +3 -0
  212. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  213. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
  214. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  215. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts +249 -18
  216. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  217. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts +2 -0
  218. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  219. package/dist/types/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
  220. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +24 -3
  221. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
  222. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +10 -0
  223. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  224. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +195 -10
  225. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  226. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +1 -0
  227. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +1 -0
  228. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +427 -32
  229. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
  230. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +7 -4
  231. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -1
  232. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +15 -3
  233. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  234. package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts +13 -0
  235. package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts.map +1 -0
  236. package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts +21 -0
  237. package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts.map +1 -0
  238. package/dist/types/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts +1 -0
  239. package/dist/types/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
  240. package/dist/types/modules/marketing/routers/marketing.router.d.ts +14 -0
  241. package/dist/types/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  242. package/dist/types/modules/marketing/services/index.d.ts +3 -0
  243. package/dist/types/modules/marketing/services/index.d.ts.map +1 -1
  244. package/dist/types/modules/marketing/services/marketing-conflict.repository.d.ts +9 -0
  245. package/dist/types/modules/marketing/services/marketing-conflict.repository.d.ts.map +1 -0
  246. package/dist/types/modules/marketing/services/marketing-conflict.service.d.ts +46 -0
  247. package/dist/types/modules/marketing/services/marketing-conflict.service.d.ts.map +1 -0
  248. package/dist/types/modules/marketing/services/marketing.service.d.ts +7 -2
  249. package/dist/types/modules/marketing/services/marketing.service.d.ts.map +1 -1
  250. package/dist/types/modules/marketing/services/product-marketing.service.d.ts +7 -3
  251. package/dist/types/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  252. package/dist/types/modules/marketing/services/spend-to-get-marketing.repository.d.ts +14 -0
  253. package/dist/types/modules/marketing/services/spend-to-get-marketing.repository.d.ts.map +1 -0
  254. package/dist/types/modules/marketing/services/spend-to-get-marketing.service.d.ts +20 -0
  255. package/dist/types/modules/marketing/services/spend-to-get-marketing.service.d.ts.map +1 -0
  256. package/dist/types/modules/marketing/services/spend-to-get-progress.repository.d.ts +9 -0
  257. package/dist/types/modules/marketing/services/spend-to-get-progress.repository.d.ts.map +1 -0
  258. package/dist/types/modules/marketing/services/spend-to-get-progress.service.d.ts +37 -0
  259. package/dist/types/modules/marketing/services/spend-to-get-progress.service.d.ts.map +1 -0
  260. package/dist/types/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
  261. package/dist/types/modules/marketing/validations/all-marketings.validation.d.ts.map +1 -1
  262. package/dist/types/modules/marketing/validations/index.d.ts +1 -0
  263. package/dist/types/modules/marketing/validations/index.d.ts.map +1 -1
  264. package/dist/types/modules/marketing/validations/marketing.validation.d.ts +17 -0
  265. package/dist/types/modules/marketing/validations/marketing.validation.d.ts.map +1 -1
  266. package/dist/types/modules/marketing/validations/spend-to-get-marketing.validation.d.ts +630 -0
  267. package/dist/types/modules/marketing/validations/spend-to-get-marketing.validation.d.ts.map +1 -0
  268. package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +24 -0
  269. package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -0
  270. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts +271 -0
  271. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -0
  272. package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts +56 -0
  273. package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -0
  274. package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +241 -0
  275. package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -0
  276. package/package.json +2 -2
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.spendToGetMarketingService = exports.SpendToGetMarketingService = void 0;
46
+ const typedi_1 = __importStar(require("typedi"));
47
+ const server_1 = require("@trpc/server");
48
+ const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
49
+ const marketing_conflict_service_1 = require("./marketing-conflict.service");
50
+ const spend_to_get_marketing_repository_1 = require("./spend-to-get-marketing.repository");
51
+ let SpendToGetMarketingService = class SpendToGetMarketingService {
52
+ repository;
53
+ constructor() {
54
+ this.repository = typedi_1.default.get(spend_to_get_marketing_repository_1.SpendToGetMarketingRepository);
55
+ }
56
+ async create(data) {
57
+ const shop = await this.repository.findShopById(data.shop);
58
+ if (!shop) {
59
+ throw new server_1.TRPCError({
60
+ code: 'NOT_FOUND',
61
+ message: `Shop not found`,
62
+ });
63
+ }
64
+ return await this.repository.create(data);
65
+ }
66
+ async update(_id, data) {
67
+ if (data.tiers) {
68
+ const existing = await this.repository.findById(_id);
69
+ if (existing && existing.status === enum_1.MarketingStatus.ACTIVE) {
70
+ const oldGroups = marketing_conflict_service_1.marketingConflictService.getRewardTypeGroups(existing.marketingType, existing.tiers);
71
+ const newGroups = marketing_conflict_service_1.marketingConflictService.getRewardTypeGroups(existing.marketingType, data.tiers);
72
+ const addedGroups = newGroups.filter(group => !oldGroups.includes(group));
73
+ if (addedGroups.length > 0) {
74
+ await marketing_conflict_service_1.marketingConflictService.assertNoConflict({
75
+ shop: existing.shop,
76
+ marketingType: existing.marketingType,
77
+ duration: data.duration ?? existing.duration,
78
+ rewardTypeGroups: addedGroups,
79
+ excludeMarketingId: _id,
80
+ });
81
+ }
82
+ }
83
+ }
84
+ const record = await this.repository.updateById(_id, data);
85
+ if (!record) {
86
+ throw new server_1.TRPCError({
87
+ code: 'NOT_FOUND',
88
+ message: `Record not found`,
89
+ });
90
+ }
91
+ return record;
92
+ }
93
+ };
94
+ exports.SpendToGetMarketingService = SpendToGetMarketingService;
95
+ exports.SpendToGetMarketingService = SpendToGetMarketingService = __decorate([
96
+ (0, typedi_1.Service)(),
97
+ __metadata("design:paramtypes", [])
98
+ ], SpendToGetMarketingService);
99
+ exports.spendToGetMarketingService = typedi_1.default.get(SpendToGetMarketingService);
100
+ //# sourceMappingURL=spend-to-get-marketing.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spend-to-get-marketing.service.js","sourceRoot":"/","sources":["modules/marketing/services/spend-to-get-marketing.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAC5C,yCAAyC;AAGzC,4DAAoE;AAKpE,6EAAwE;AACxE,2FAAoF;AAG7E,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAC9B,UAAU,CAAgC;IAElD;QACC,IAAI,CAAC,UAAU,GAAG,gBAAS,CAAC,GAAG,CAAC,iEAA6B,CAAC,CAAC;IAChE,CAAC;IAMM,KAAK,CAAC,MAAM,CAAC,IAAe;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,IAAI,kBAAS,CAAC;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAOM,KAAK,CAAC,MAAM,CAAC,GAA4B,EAAE,IAAe;QAChE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAErD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,sBAAe,CAAC,MAAM,EAAE,CAAC;gBAC5D,MAAM,SAAS,GAAG,qDAAwB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACvG,MAAM,SAAS,GAAG,qDAAwB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnG,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBAE1E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,qDAAwB,CAAC,gBAAgB,CAAC;wBAC/C,IAAI,EAAE,QAAQ,CAAC,IAA+B;wBAC9C,aAAa,EAAE,QAAQ,CAAC,aAAa;wBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;wBAC5C,gBAAgB,EAAE,WAAW;wBAC7B,kBAAkB,EAAE,GAAG;qBACvB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,kBAAS,CAAC;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AA3DY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,gBAAO,GAAE;;GACG,0BAA0B,CA2DtC;AAEY,QAAA,0BAA0B,GAAG,gBAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { TRPCError } from '@trpc/server';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport { SpendToGetMarketing as Model } from '@lyxa.ai/core/dist/libraries/mongo/models/';\nimport { MarketingStatus } from '@lyxa.ai/core/dist/utilities/enum';\nimport {\n\tCreateSpendToGetMarketingDTO as CreateDTO,\n\tUpdateSpendToGetMarketingDTO as UpdateDTO,\n} from '@modules/marketing/validations';\nimport { marketingConflictService } from './marketing-conflict.service';\nimport { SpendToGetMarketingRepository } from './spend-to-get-marketing.repository';\n\n@Service()\nexport class SpendToGetMarketingService {\n\tprivate repository: SpendToGetMarketingRepository;\n\n\tconstructor() {\n\t\tthis.repository = Container.get(SpendToGetMarketingRepository);\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 shop = await this.repository.findShopById(data.shop);\n\t\tif (!shop) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: `Shop not found`,\n\t\t\t});\n\t\t}\n\t\treturn await this.repository.create(data);\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\tif (data.tiers) {\n\t\t\tconst existing = await this.repository.findById(_id);\n\n\t\t\tif (existing && existing.status === MarketingStatus.ACTIVE) {\n\t\t\t\tconst oldGroups = marketingConflictService.getRewardTypeGroups(existing.marketingType, existing.tiers);\n\t\t\t\tconst newGroups = marketingConflictService.getRewardTypeGroups(existing.marketingType, data.tiers);\n\t\t\t\tconst addedGroups = newGroups.filter(group => !oldGroups.includes(group));\n\n\t\t\t\tif (addedGroups.length > 0) {\n\t\t\t\t\tawait marketingConflictService.assertNoConflict({\n\t\t\t\t\t\tshop: existing.shop as mongoose.Types.ObjectId,\n\t\t\t\t\t\tmarketingType: existing.marketingType,\n\t\t\t\t\t\tduration: data.duration ?? existing.duration,\n\t\t\t\t\t\trewardTypeGroups: addedGroups,\n\t\t\t\t\t\texcludeMarketingId: _id,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst record = await this.repository.updateById(_id, data);\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\treturn record;\n\t}\n}\n\nexport const spendToGetMarketingService = Container.get(SpendToGetMarketingService);\n"]}
@@ -0,0 +1,9 @@
1
+ import { DocumentType, mongoose } from '@typegoose/typegoose';
2
+ import { SpendToGetMarketing } from '@lyxa.ai/core/dist/libraries/mongo/models';
3
+ export declare class SpendToGetProgressRepository {
4
+ private model;
5
+ constructor();
6
+ findActiveByShop(shop: mongoose.Types.ObjectId, now: Date): Promise<DocumentType<SpendToGetMarketing> | null>;
7
+ }
8
+ export declare const spendToGetProgressRepository: SpendToGetProgressRepository;
9
+ //# sourceMappingURL=spend-to-get-progress.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spend-to-get-progress.repository.d.ts","sourceRoot":"/","sources":["modules/marketing/services/spend-to-get-progress.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAA4B,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAI1G,qBACa,4BAA4B;IACxC,OAAO,CAAC,KAAK,CAAyE;;IAOhF,gBAAgB,CACrB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC7B,GAAG,EAAE,IAAI,GACP,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;CAQpD;AAED,eAAO,MAAM,4BAA4B,8BAA8C,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.spendToGetProgressRepository = exports.SpendToGetProgressRepository = void 0;
46
+ const typedi_1 = __importStar(require("typedi"));
47
+ const models_1 = require("@lyxa.ai/core/dist/libraries/mongo/models");
48
+ const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
49
+ let SpendToGetProgressRepository = class SpendToGetProgressRepository {
50
+ model;
51
+ constructor() {
52
+ this.model = models_1.SpendToGetMarketingModel;
53
+ }
54
+ async findActiveByShop(shop, now) {
55
+ return this.model.findOne({
56
+ shop,
57
+ status: enum_1.MarketingStatus.ACTIVE,
58
+ 'duration.start': { $lte: now },
59
+ $or: [{ 'duration.end': { $exists: false } }, { 'duration.end': { $gt: now } }],
60
+ });
61
+ }
62
+ };
63
+ exports.SpendToGetProgressRepository = SpendToGetProgressRepository;
64
+ exports.SpendToGetProgressRepository = SpendToGetProgressRepository = __decorate([
65
+ (0, typedi_1.Service)(),
66
+ __metadata("design:paramtypes", [])
67
+ ], SpendToGetProgressRepository);
68
+ exports.spendToGetProgressRepository = typedi_1.default.get(SpendToGetProgressRepository);
69
+ //# sourceMappingURL=spend-to-get-progress.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spend-to-get-progress.repository.js","sourceRoot":"/","sources":["modules/marketing/services/spend-to-get-progress.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAE5C,sEAA0G;AAC1G,4DAAoE;AAI7D,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IAChC,KAAK,CAAyE;IAEtF;QACC,IAAI,CAAC,KAAK,GAAG,iCACwB,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,gBAAgB,CACrB,IAA6B,EAC7B,GAAS;QAET,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACzB,IAAI;YACJ,MAAM,EAAE,sBAAe,CAAC,MAAM;YAC9B,gBAAgB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;YAC/B,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;SAC/E,CAAC,CAAC;IACJ,CAAC;CACD,CAAA;AAnBY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,gBAAO,GAAE;;GACG,4BAA4B,CAmBxC;AAEY,QAAA,4BAA4B,GAAG,gBAAS,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport { SpendToGetMarketingModel, SpendToGetMarketing } from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport { MarketingStatus } from '@lyxa.ai/core/dist/utilities/enum';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\n\n@Service()\nexport class SpendToGetProgressRepository {\n\tprivate model: typeof SpendToGetMarketingModel & SoftDeleteModel<SpendToGetMarketing>;\n\n\tconstructor() {\n\t\tthis.model = SpendToGetMarketingModel as typeof SpendToGetMarketingModel &\n\t\t\tSoftDeleteModel<SpendToGetMarketing>;\n\t}\n\n\tasync findActiveByShop(\n\t\tshop: mongoose.Types.ObjectId,\n\t\tnow: Date\n\t): Promise<DocumentType<SpendToGetMarketing> | null> {\n\t\treturn this.model.findOne({\n\t\t\tshop,\n\t\t\tstatus: MarketingStatus.ACTIVE,\n\t\t\t'duration.start': { $lte: now },\n\t\t\t$or: [{ 'duration.end': { $exists: false } }, { 'duration.end': { $gt: now } }],\n\t\t});\n\t}\n}\n\nexport const spendToGetProgressRepository = Container.get(SpendToGetProgressRepository);\n"]}
@@ -0,0 +1,31 @@
1
+ import { mongoose } from '@typegoose/typegoose';
2
+ import { SpendToGetRewardType } from '@lyxa.ai/core/dist/utilities/enum';
3
+ export interface SpendToGetTierProgress {
4
+ minSpend: number;
5
+ rewardType: SpendToGetRewardType;
6
+ rewardValue?: number;
7
+ maxDiscountCap?: number;
8
+ isMaxDiscountCapEnabled?: boolean;
9
+ isUnlocked: boolean;
10
+ }
11
+ export interface SpendToGetProgressResult {
12
+ marketing?: mongoose.Types.ObjectId;
13
+ tiers: SpendToGetTierProgress[];
14
+ appliedTier?: SpendToGetTierProgress;
15
+ discountAmount: number;
16
+ nextTier?: SpendToGetTierProgress;
17
+ amountToNextTier?: number;
18
+ isRedeemable: boolean;
19
+ }
20
+ export declare class SpendToGetProgressService {
21
+ private repository;
22
+ constructor();
23
+ getProgress(params: {
24
+ shop: mongoose.Types.ObjectId;
25
+ basketTotal: number;
26
+ userId?: mongoose.Types.ObjectId;
27
+ }): Promise<SpendToGetProgressResult>;
28
+ private calculateDiscountAmount;
29
+ }
30
+ export declare const spendToGetProgressService: SpendToGetProgressService;
31
+ //# sourceMappingURL=spend-to-get-progress.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spend-to-get-progress.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/spend-to-get-progress.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAKzE,MAAM,WAAW,sBAAsB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACxC,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IACpC,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACtB;AAQD,qBACa,yBAAyB;IACrC,OAAO,CAAC,UAAU,CAA+B;;IAYpC,WAAW,CAAC,MAAM,EAAE;QAChC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9B,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;KACjC,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA2DrC,OAAO,CAAC,uBAAuB;CAgB/B;AAED,eAAO,MAAM,yBAAyB,2BAA2C,CAAC"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.spendToGetProgressService = exports.SpendToGetProgressService = void 0;
46
+ const typedi_1 = __importStar(require("typedi"));
47
+ const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
48
+ const dayjs_1 = require("@lyxa.ai/core/dist/utilities/dayjs");
49
+ const spend_to_get_history_service_1 = require("../../spend-to-get-history/spend-to-get-history.service");
50
+ const spend_to_get_progress_repository_1 = require("./spend-to-get-progress.repository");
51
+ const EMPTY_PROGRESS = {
52
+ tiers: [],
53
+ discountAmount: 0,
54
+ isRedeemable: false,
55
+ };
56
+ let SpendToGetProgressService = class SpendToGetProgressService {
57
+ repository;
58
+ constructor() {
59
+ this.repository = typedi_1.default.get(spend_to_get_progress_repository_1.SpendToGetProgressRepository);
60
+ }
61
+ async getProgress(params) {
62
+ const now = (0, dayjs_1.dayjs)().toDate();
63
+ const marketing = await this.repository.findActiveByShop(params.shop, now);
64
+ if (!marketing || marketing.tiers.length === 0) {
65
+ return EMPTY_PROGRESS;
66
+ }
67
+ const budgetExhausted = Boolean(marketing.isSpendLimitEnabled && marketing.spendLimit && (marketing.amountSpent ?? 0) >= marketing.spendLimit);
68
+ const userLimitReached = Boolean(params.userId) && Boolean(marketing.isPerUserLimitEnabled) && Boolean(marketing.perUserLimit)
69
+ ? await spend_to_get_history_service_1.spendToGetHistoryService.hasUserReachedLimit(params.userId, marketing._id, marketing.perUserLimit)
70
+ : false;
71
+ const isRedeemable = !budgetExhausted && !userLimitReached;
72
+ const tierProgressList = [...marketing.tiers]
73
+ .sort((a, b) => a.minSpend - b.minSpend)
74
+ .map(tier => ({
75
+ minSpend: tier.minSpend,
76
+ rewardType: tier.rewardType,
77
+ rewardValue: tier.rewardValue,
78
+ maxDiscountCap: tier.maxDiscountCap,
79
+ isMaxDiscountCapEnabled: tier.isMaxDiscountCapEnabled,
80
+ isUnlocked: params.basketTotal >= tier.minSpend,
81
+ }));
82
+ let appliedTier;
83
+ let nextTier;
84
+ for (const tier of tierProgressList) {
85
+ if (tier.isUnlocked) {
86
+ appliedTier = tier;
87
+ }
88
+ else if (!nextTier) {
89
+ nextTier = tier;
90
+ }
91
+ }
92
+ const discountAmount = isRedeemable && appliedTier ? this.calculateDiscountAmount(appliedTier, params.basketTotal) : 0;
93
+ return {
94
+ marketing: marketing._id,
95
+ tiers: tierProgressList,
96
+ appliedTier: isRedeemable ? appliedTier : undefined,
97
+ discountAmount,
98
+ nextTier,
99
+ amountToNextTier: nextTier ? Math.max(nextTier.minSpend - params.basketTotal, 0) : undefined,
100
+ isRedeemable: isRedeemable && Boolean(appliedTier),
101
+ };
102
+ }
103
+ calculateDiscountAmount(tier, basketTotal) {
104
+ if (tier.rewardType === enum_1.SpendToGetRewardType.FREE_DELIVERY) {
105
+ return 0;
106
+ }
107
+ if (tier.rewardType === enum_1.SpendToGetRewardType.FIXED) {
108
+ return tier.rewardValue ?? 0;
109
+ }
110
+ let amount = ((tier.rewardValue ?? 0) / 100) * basketTotal;
111
+ if (tier.isMaxDiscountCapEnabled && tier.maxDiscountCap) {
112
+ amount = Math.min(amount, tier.maxDiscountCap);
113
+ }
114
+ return amount;
115
+ }
116
+ };
117
+ exports.SpendToGetProgressService = SpendToGetProgressService;
118
+ exports.SpendToGetProgressService = SpendToGetProgressService = __decorate([
119
+ (0, typedi_1.Service)(),
120
+ __metadata("design:paramtypes", [])
121
+ ], SpendToGetProgressService);
122
+ exports.spendToGetProgressService = typedi_1.default.get(SpendToGetProgressService);
123
+ //# sourceMappingURL=spend-to-get-progress.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spend-to-get-progress.service.js","sourceRoot":"/","sources":["modules/marketing/services/spend-to-get-progress.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { mongoose } from '@typegoose/typegoose';\nimport { SpendToGetRewardType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { dayjs } from '@lyxa.ai/core/dist/utilities/dayjs';\nimport { spendToGetHistoryService } from '../../spend-to-get-history/spend-to-get-history.service';\nimport { SpendToGetProgressRepository } from './spend-to-get-progress.repository';\n\nexport interface SpendToGetTierProgress {\n\tminSpend: number;\n\trewardType: SpendToGetRewardType;\n\trewardValue?: number;\n\tmaxDiscountCap?: number;\n\tisMaxDiscountCapEnabled?: boolean;\n\tisUnlocked: boolean;\n}\n\nexport interface SpendToGetProgressResult {\n\tmarketing?: mongoose.Types.ObjectId;\n\ttiers: SpendToGetTierProgress[];\n\tappliedTier?: SpendToGetTierProgress;\n\tdiscountAmount: number;\n\tnextTier?: SpendToGetTierProgress;\n\tamountToNextTier?: number;\n\tisRedeemable: boolean;\n}\n\nconst EMPTY_PROGRESS: SpendToGetProgressResult = {\n\ttiers: [],\n\tdiscountAmount: 0,\n\tisRedeemable: false,\n};\n\n@Service()\nexport class SpendToGetProgressService {\n\tprivate repository: SpendToGetProgressRepository;\n\n\tconstructor() {\n\t\tthis.repository = Container.get(SpendToGetProgressRepository);\n\t}\n\n\t/**\n\t * Live progress + eligibility for a shop's active Spend-to-Get promotion, given a basket total.\n\t * Only the highest qualifying tier's reward ever applies (no stacking). Global spend-limit\n\t * exhaustion is read off the existing amountSpent/spendLimit status-flip fields (Marketing base\n\t * model), same source of truth the checkout path uses — no separate live aggregation here.\n\t */\n\tpublic async getProgress(params: {\n\t\tshop: mongoose.Types.ObjectId;\n\t\tbasketTotal: number;\n\t\tuserId?: mongoose.Types.ObjectId;\n\t}): Promise<SpendToGetProgressResult> {\n\t\tconst now = dayjs().toDate();\n\n\t\tconst marketing = await this.repository.findActiveByShop(params.shop, now);\n\n\t\tif (!marketing || marketing.tiers.length === 0) {\n\t\t\treturn EMPTY_PROGRESS;\n\t\t}\n\n\t\tconst budgetExhausted = Boolean(\n\t\t\tmarketing.isSpendLimitEnabled && marketing.spendLimit && (marketing.amountSpent ?? 0) >= marketing.spendLimit\n\t\t);\n\n\t\tconst userLimitReached =\n\t\t\tBoolean(params.userId) && Boolean(marketing.isPerUserLimitEnabled) && Boolean(marketing.perUserLimit)\n\t\t\t\t? await spendToGetHistoryService.hasUserReachedLimit(\n\t\t\t\t\t\tparams.userId as mongoose.Types.ObjectId,\n\t\t\t\t\t\tmarketing._id,\n\t\t\t\t\t\tmarketing.perUserLimit as number\n\t\t\t\t\t)\n\t\t\t\t: false;\n\n\t\tconst isRedeemable = !budgetExhausted && !userLimitReached;\n\n\t\tconst tierProgressList: SpendToGetTierProgress[] = [...marketing.tiers]\n\t\t\t.sort((a, b) => a.minSpend - b.minSpend)\n\t\t\t.map(tier => ({\n\t\t\t\tminSpend: tier.minSpend,\n\t\t\t\trewardType: tier.rewardType,\n\t\t\t\trewardValue: tier.rewardValue,\n\t\t\t\tmaxDiscountCap: tier.maxDiscountCap,\n\t\t\t\tisMaxDiscountCapEnabled: tier.isMaxDiscountCapEnabled,\n\t\t\t\tisUnlocked: params.basketTotal >= tier.minSpend,\n\t\t\t}));\n\n\t\tlet appliedTier: SpendToGetTierProgress | undefined;\n\t\tlet nextTier: SpendToGetTierProgress | undefined;\n\t\tfor (const tier of tierProgressList) {\n\t\t\tif (tier.isUnlocked) {\n\t\t\t\tappliedTier = tier;\n\t\t\t} else if (!nextTier) {\n\t\t\t\tnextTier = tier;\n\t\t\t}\n\t\t}\n\n\t\tconst discountAmount =\n\t\t\tisRedeemable && appliedTier ? this.calculateDiscountAmount(appliedTier, params.basketTotal) : 0;\n\n\t\treturn {\n\t\t\tmarketing: marketing._id,\n\t\t\ttiers: tierProgressList,\n\t\t\tappliedTier: isRedeemable ? appliedTier : undefined,\n\t\t\tdiscountAmount,\n\t\t\tnextTier,\n\t\t\tamountToNextTier: nextTier ? Math.max(nextTier.minSpend - params.basketTotal, 0) : undefined,\n\t\t\tisRedeemable: isRedeemable && Boolean(appliedTier),\n\t\t};\n\t}\n\n\tprivate calculateDiscountAmount(tier: SpendToGetTierProgress, basketTotal: number): number {\n\t\tif (tier.rewardType === SpendToGetRewardType.FREE_DELIVERY) {\n\t\t\t// Free delivery isn't a basket discount amount — the caller applies it as a delivery-fee override.\n\t\t\treturn 0;\n\t\t}\n\n\t\tif (tier.rewardType === SpendToGetRewardType.FIXED) {\n\t\t\treturn tier.rewardValue ?? 0;\n\t\t}\n\n\t\tlet amount = ((tier.rewardValue ?? 0) / 100) * basketTotal;\n\t\tif (tier.isMaxDiscountCapEnabled && tier.maxDiscountCap) {\n\t\t\tamount = Math.min(amount, tier.maxDiscountCap);\n\t\t}\n\t\treturn amount;\n\t}\n}\n\nexport const spendToGetProgressService = Container.get(SpendToGetProgressService);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"synchronize-product-marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/synchronize-product-marketing.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAWhD,OAAO,EAAE,6CAA6C,EAAE,MAAM,0FAA0F,CAAC;AAIzJ,qBACa,kCAAkC;IAC9C,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,qBAAqB,CAAmE;;IAQnF,kDAAkD;IAKxD,2CAA2C,CACjD,OAAO,EAAE,6CAA6C,GACpD,MAAM;IAKF,4BAA4B,QAAa,OAAO,CAAC,GAAG,CAAC,CAqC1D;YAEY,oBAAoB;YA2CpB,kCAAkC;IAsCnC,mCAAmC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;IAqCtE,oCAAoC,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE;IA8D1E,sCAAsC,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE;CAY3F;AAED,eAAO,MAAM,kCAAkC,oCAAoD,CAAC"}
1
+ {"version":3,"file":"synchronize-product-marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/synchronize-product-marketing.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAahD,OAAO,EAAE,6CAA6C,EAAE,MAAM,0FAA0F,CAAC;AAIzJ,qBACa,kCAAkC;IAC9C,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,qBAAqB,CAAmE;;IAQnF,kDAAkD;IAKxD,2CAA2C,CACjD,OAAO,EAAE,6CAA6C,GACpD,MAAM;IAKF,4BAA4B,QAAa,OAAO,CAAC,GAAG,CAAC,CAqC1D;YAEY,oBAAoB;YA2CpB,kCAAkC;IAsCnC,mCAAmC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;IAqCtE,oCAAoC,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE;IAoI1E,sCAAsC,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE;CAY3F;AAED,eAAO,MAAM,kCAAkC,oCAAoD,CAAC"}
@@ -47,6 +47,8 @@ const typedi_1 = __importStar(require("typedi"));
47
47
  const core_1 = require("@lyxa.ai/core");
48
48
  const models_1 = require("@lyxa.ai/core/dist/libraries/mongo/models");
49
49
  const product_pipeline_stages_1 = require("@lyxa.ai/core/dist/utilities/pipelines/product-pipeline-stages");
50
+ const common_pipeline_functions_1 = require("@lyxa.ai/core/dist/utilities/pipelines/common-pipeline-functions");
51
+ const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
50
52
  const events_common_methods_1 = require("@lyxa.ai/core/dist/utilities/events-common-methods");
51
53
  const TAG = 'marketing.seed.entire-menu';
52
54
  let SynchronizeProductMarketingService = class SynchronizeProductMarketingService {
@@ -198,50 +200,116 @@ let SynchronizeProductMarketingService = class SynchronizeProductMarketingServic
198
200
  const exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;
199
201
  const secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';
200
202
  const BATCH_SIZE = 500;
203
+ const now = new Date();
201
204
  const results = [];
202
- const totalBatches = Math.ceil(productIds.length / BATCH_SIZE);
203
205
  for (let i = 0; i < productIds.length; i += BATCH_SIZE) {
204
206
  const batchIds = productIds.slice(i, i + BATCH_SIZE);
205
- const batchResults = await this.productModel.aggregate([
207
+ const batchResults = await this.productMarketingModel.aggregate([
208
+ { $match: { product: { $in: batchIds }, deletedAt: null } },
206
209
  {
207
- $match: {
208
- _id: { $in: batchIds },
210
+ $lookup: {
211
+ from: 'marketings',
212
+ let: { mid: '$marketing' },
213
+ pipeline: [
214
+ {
215
+ $match: {
216
+ $expr: { $eq: ['$_id', '$$mid'] },
217
+ status: 'active',
218
+ 'duration.start': { $lte: now },
219
+ 'duration.end': { $gte: now },
220
+ },
221
+ },
222
+ { $project: { marketingType: 1, duration: 1, isAppliedByCompany: 1 } },
223
+ ],
224
+ as: 'marketing',
225
+ },
226
+ },
227
+ { $unwind: '$marketing' },
228
+ {
229
+ $addFields: {
230
+ secondaryCurrencyValue: {
231
+ $cond: [
232
+ { $eq: ['$valueType', 'fixed'] },
233
+ (0, common_pipeline_functions_1.getRoundSecondaryCurrencyStage)({ $multiply: ['$value', exchangeRate] }),
234
+ '$$REMOVE',
235
+ ],
236
+ },
237
+ },
238
+ },
239
+ {
240
+ $addFields: {
241
+ label: {
242
+ $switch: {
243
+ branches: [
244
+ { case: { $eq: ['$marketing.marketingType', enum_1.MarketingType.BUY1GET1] }, then: 'Buy 1 Get 1' },
245
+ { case: { $eq: ['$marketing.marketingType', enum_1.MarketingType.PUNCH_MARKETING] }, then: 'Punch' },
246
+ {
247
+ case: { $eq: ['$marketing.marketingType', enum_1.MarketingType.DISCOUNT] },
248
+ then: {
249
+ $switch: {
250
+ branches: [
251
+ {
252
+ case: { $eq: ['$valueType', enum_1.ValueType.FIXED] },
253
+ then: { $concat: [secondaryCurrencyName, ' ', { $toString: '$secondaryCurrencyValue' }] },
254
+ },
255
+ {
256
+ case: { $eq: ['$valueType', enum_1.ValueType.PERCENTAGE] },
257
+ then: { $concat: [{ $toString: '$value' }, '%'] },
258
+ },
259
+ ],
260
+ default: 'Discount',
261
+ },
262
+ },
263
+ },
264
+ ],
265
+ default: '$marketing.marketingType',
266
+ },
267
+ },
209
268
  },
210
269
  },
211
- ...(0, product_pipeline_stages_1.addProductMarketingInfo)(exchangeRate, secondaryCurrencyName),
212
270
  {
213
271
  $group: {
214
- _id: '$_id',
272
+ _id: '$product',
215
273
  productMarketingInfo: {
216
- $push: '$productMarketing',
274
+ $push: {
275
+ marketing: {
276
+ _id: '$marketing._id',
277
+ marketingType: '$marketing.marketingType',
278
+ duration: '$marketing.duration',
279
+ },
280
+ isBuy1Get1: '$isBuy1Get1',
281
+ valueType: '$valueType',
282
+ value: '$value',
283
+ secondaryCurrencyValue: '$secondaryCurrencyValue',
284
+ label: '$label',
285
+ isAppliedByCompany: '$marketing.isAppliedByCompany',
286
+ },
217
287
  },
218
288
  },
219
289
  },
220
290
  ]);
221
291
  results.push(...batchResults);
222
292
  }
223
- if (!results.length)
224
- return 'No matching products found';
225
- const bulkOps = results.map(product => {
226
- const productMarketingInfo = (product.productMarketingInfo || []).map((pm) => ({
227
- marketing: pm.marketingInfo,
228
- isBuy1Get1: pm.isBuy1Get1,
229
- valueType: pm.valueType,
230
- value: pm.value,
231
- secondaryCurrencyValue: pm.secondaryCurrencyValue,
232
- label: pm.label,
233
- isAppliedByCompany: pm.isAppliedByCompany ?? false,
234
- }));
235
- return {
236
- updateOne: {
237
- filter: { _id: product._id },
238
- update: {
239
- $set: { productMarketingInfo },
293
+ const byProduct = new Map(results.map(r => [r._id.toString(), r.productMarketingInfo ?? []]));
294
+ const bulkOps = productIds.map(productId => ({
295
+ updateOne: {
296
+ filter: { _id: productId },
297
+ update: {
298
+ $set: {
299
+ productMarketingInfo: (byProduct.get(productId.toString()) ?? []).map((pm) => ({
300
+ marketing: pm.marketing,
301
+ isBuy1Get1: pm.isBuy1Get1,
302
+ valueType: pm.valueType,
303
+ value: pm.value,
304
+ secondaryCurrencyValue: pm.secondaryCurrencyValue,
305
+ label: pm.label,
306
+ isAppliedByCompany: pm.isAppliedByCompany ?? false,
307
+ })),
240
308
  },
241
309
  },
242
- };
243
- });
244
- await this.productModel.bulkWrite(bulkOps);
310
+ },
311
+ }));
312
+ await this.productModel.bulkWrite(bulkOps, { ordered: false });
245
313
  return `Synchronized product marketing info for ${bulkOps.length} products`;
246
314
  }
247
315
  async syncProductMarketingInfoByMarketingIds(marketingIds) {