@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
@@ -47,19 +47,15 @@ const typedi_1 = __importStar(require("typedi"));
47
47
  const typegoose_1 = require("@typegoose/typegoose");
48
48
  const core_1 = require("@lyxa.ai/core");
49
49
  const limited_time_offer_campaign_producer_1 = require("./limited-time-offer-campaign.producer");
50
- const limited_time_offer_campaign_lifecycle_service_1 = require("../services/limited-time-offer-campaign-lifecycle.service");
51
50
  const limited_time_offer_service_1 = require("../../../limited-time-offer/limited-time-offer.service");
52
51
  let LtoCampaignQueueWorker = class LtoCampaignQueueWorker {
53
- lifecycle;
54
- constructor() {
55
- this.lifecycle = typedi_1.default.get(limited_time_offer_campaign_lifecycle_service_1.LtoCampaignLifecycleService);
56
- }
52
+ constructor() { }
57
53
  async startWorker() {
58
54
  (0, core_1.getLibraries)().getBullMQService().createWorker(limited_time_offer_campaign_producer_1.LTO_CAMPAIGN_TRANSITIONS_QUEUE, async (job) => {
59
55
  const { campaignId: campaignIdStr } = job.data;
60
56
  const campaignId = new typegoose_1.mongoose.Types.ObjectId(campaignIdStr);
61
57
  if (job.name === limited_time_offer_campaign_producer_1.LtoCampaignJobName.ACTIVATE) {
62
- await this.lifecycle.activateCampaign(campaignId);
58
+ await limited_time_offer_service_1.limitedTimeOfferService.activateCampaign(campaignId);
63
59
  }
64
60
  else if (job.name === limited_time_offer_campaign_producer_1.LtoCampaignJobName.EXPIRE) {
65
61
  await limited_time_offer_service_1.limitedTimeOfferService.expireCampaign(campaignId);
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.worker.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAC5C,oDAAgD;AAChD,wCAA6C;AAC7C,iGAA4G;AAC5G,6HAAwG;AACxG,uGAAiG;AAG1F,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACvB,SAAS,CAA8B;IAE/C;QACI,IAAI,CAAC,SAAS,GAAG,gBAAS,CAAC,GAAG,CAAC,2EAA2B,CAAC,CAAC;IAChE,CAAC;IAEM,KAAK,CAAC,WAAW;QACpB,IAAA,mBAAY,GAAE,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,qEAA8B,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YACvF,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,IAA8B,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,oBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,yDAAkB,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,yDAAkB,CAAC,MAAM,EAAE,CAAC;gBAChD,MAAM,oDAAuB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAlBY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,gBAAO,GAAE;;GACG,sBAAsB,CAkBlC;AAEY,QAAA,sBAAsB,GAAG,gBAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { mongoose } from '@typegoose/typegoose';\nimport { getLibraries } from '@lyxa.ai/core';\nimport { LTO_CAMPAIGN_TRANSITIONS_QUEUE, LtoCampaignJobName } from './limited-time-offer-campaign.producer';\nimport { LtoCampaignLifecycleService } from '../services/limited-time-offer-campaign-lifecycle.service';\nimport { limitedTimeOfferService } from '@modules/limited-time-offer/limited-time-offer.service';\n\n@Service()\nexport class LtoCampaignQueueWorker {\n private lifecycle: LtoCampaignLifecycleService;\n\n constructor() {\n this.lifecycle = Container.get(LtoCampaignLifecycleService);\n }\n\n public async startWorker(): Promise<void> {\n getLibraries().getBullMQService().createWorker(LTO_CAMPAIGN_TRANSITIONS_QUEUE, async job => {\n const { campaignId: campaignIdStr } = job.data as { campaignId: string };\n const campaignId = new mongoose.Types.ObjectId(campaignIdStr);\n if (job.name === LtoCampaignJobName.ACTIVATE) {\n await this.lifecycle.activateCampaign(campaignId);\n } else if (job.name === LtoCampaignJobName.EXPIRE) {\n await limitedTimeOfferService.expireCampaign(campaignId);\n }\n });\n }\n}\n\nexport const ltoCampaignQueueWorker = Container.get(LtoCampaignQueueWorker);\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.worker.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAC5C,oDAAgD;AAChD,wCAA6C;AAC7C,iGAA4G;AAC5G,uGAAiG;AAG1F,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAC/B,gBAAe,CAAC;IAET,KAAK,CAAC,WAAW;QACpB,IAAA,mBAAY,GAAE,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,qEAA8B,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;YACvF,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,IAA8B,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,oBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,yDAAkB,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,oDAAuB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,yDAAkB,CAAC,MAAM,EAAE,CAAC;gBAChD,MAAM,oDAAuB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAdY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,gBAAO,GAAE;;GACG,sBAAsB,CAclC;AAEY,QAAA,sBAAsB,GAAG,gBAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { mongoose } from '@typegoose/typegoose';\nimport { getLibraries } from '@lyxa.ai/core';\nimport { LTO_CAMPAIGN_TRANSITIONS_QUEUE, LtoCampaignJobName } from './limited-time-offer-campaign.producer';\nimport { limitedTimeOfferService } from '@modules/limited-time-offer/limited-time-offer.service';\n\n@Service()\nexport class LtoCampaignQueueWorker {\n constructor() {}\n\n public async startWorker(): Promise<void> {\n getLibraries().getBullMQService().createWorker(LTO_CAMPAIGN_TRANSITIONS_QUEUE, async job => {\n const { campaignId: campaignIdStr } = job.data as { campaignId: string };\n const campaignId = new mongoose.Types.ObjectId(campaignIdStr);\n if (job.name === LtoCampaignJobName.ACTIVATE) {\n await limitedTimeOfferService.activateCampaign(campaignId);\n } else if (job.name === LtoCampaignJobName.EXPIRE) {\n await limitedTimeOfferService.expireCampaign(campaignId);\n }\n });\n }\n}\n\nexport const ltoCampaignQueueWorker = Container.get(LtoCampaignQueueWorker);\n"]}
@@ -1,10 +1,21 @@
1
1
  import { LimitedTimeOfferCampaign } from '@lyxa.ai/core/dist/libraries/mongo/models';
2
2
  import { LimitedTimeOfferCampaignStatus } from '@lyxa.ai/core/dist/utilities/enum';
3
3
  import { CreateLtoCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO } from './limited-time-offer-campaign.validation';
4
+ export declare function nextOccurrenceDate(repeatDays: number[], refStart: Date, refEnd: Date): {
5
+ startDate: Date;
6
+ endDate: Date;
7
+ };
4
8
  export declare class LtoCampaignQueryBuilder {
5
- static buildCreateInput(dto: CreateLtoCampaignDTO, status: LimitedTimeOfferCampaignStatus, campaignNumber: number, config: {
6
- discountOptions: number[];
7
- maxDiscountCaps: number[];
9
+ static buildCreateInput(input: {
10
+ dto: CreateLtoCampaignDTO;
11
+ status: LimitedTimeOfferCampaignStatus;
12
+ campaignNumber: number;
13
+ config: {
14
+ discountOptions: number[];
15
+ maxDiscountCaps: number[];
16
+ };
17
+ startDate: Date;
18
+ endDate: Date;
8
19
  }): {
9
20
  campaignNumber: number;
10
21
  title: string | undefined;
@@ -14,9 +25,11 @@ export declare class LtoCampaignQueryBuilder {
14
25
  status: LimitedTimeOfferCampaignStatus;
15
26
  discountOptions: number[];
16
27
  maxDiscountCaps: number[];
28
+ repeatDays: number[];
17
29
  };
18
30
  static buildUpdateInput(campaign: LimitedTimeOfferCampaign, dto: UpdateLtoCampaignDTO): {
19
31
  status: LimitedTimeOfferCampaignStatus;
32
+ repeatDays?: number[] | undefined;
20
33
  maxDiscountCaps?: number[] | undefined;
21
34
  discountOptions?: number[] | undefined;
22
35
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.builder.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAC,oBAAoB,EAAE,wBAAwB,EAAE,oBAAoB,EAAC,MAAM,0CAA0C,CAAC;AAa9H,qBAAa,uBAAuB;IAChC,MAAM,CAAC,gBAAgB,CACnB,GAAG,EAAE,oBAAoB,EACzB,MAAM,EAAE,8BAA8B,EACtC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE;QAAC,eAAe,EAAE,MAAM,EAAE,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAA;KAAC;;;;;;;;;;IAclE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,GAAG,EAAE,oBAAoB;;;;;;;;;IAcrF,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,wBAAwB;;;;;;;IAIvD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAI9C,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;CAGxD"}
1
+ {"version":3,"file":"limited-time-offer-campaign.builder.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAC,oBAAoB,EAAE,wBAAwB,EAAE,oBAAoB,EAAC,MAAM,0CAA0C,CAAC;AAE9H,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAC,CAiBvH;AAaD,qBAAa,uBAAuB;IAChC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAC3B,GAAG,EAAE,oBAAoB,CAAC;QAC1B,MAAM,EAAE,8BAA8B,CAAC;QACvC,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE;YAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YAAC,eAAe,EAAE,MAAM,EAAE,CAAA;SAAC,CAAC;QAC/D,SAAS,EAAE,IAAI,CAAC;QAChB,OAAO,EAAE,IAAI,CAAC;KACjB;;;;;;;;;;;IAeD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,GAAG,EAAE,oBAAoB;;;;;;;;;;IAerF,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,wBAAwB;;;;;;;IAIvD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAI9C,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;CAGxD"}
@@ -1,7 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LtoCampaignQueryBuilder = void 0;
4
+ exports.nextOccurrenceDate = nextOccurrenceDate;
4
5
  const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
6
+ function nextOccurrenceDate(repeatDays, refStart, refEnd) {
7
+ const durationMs = refEnd.getTime() - refStart.getTime();
8
+ const now = new Date();
9
+ for (let daysAhead = 0; daysAhead < 8; daysAhead++) {
10
+ const candidate = new Date(now);
11
+ candidate.setDate(now.getDate() + daysAhead);
12
+ candidate.setHours(refStart.getHours(), refStart.getMinutes(), refStart.getSeconds(), 0);
13
+ if (repeatDays.includes(candidate.getDay()) && candidate.getTime() > now.getTime()) {
14
+ const startDate = candidate;
15
+ const endDate = new Date(startDate.getTime() + durationMs);
16
+ return { startDate, endDate };
17
+ }
18
+ }
19
+ return { startDate: refStart, endDate: refEnd };
20
+ }
5
21
  const ARCHIVED_STATUSES = [enum_1.LimitedTimeOfferCampaignStatus.EXPIRED, enum_1.LimitedTimeOfferCampaignStatus.CANCELLED];
6
22
  const SORT_FIELD_MAP = {
7
23
  id: '_id',
@@ -12,16 +28,18 @@ const SORT_FIELD_MAP = {
12
28
  status: 'status',
13
29
  };
14
30
  class LtoCampaignQueryBuilder {
15
- static buildCreateInput(dto, status, campaignNumber, config) {
31
+ static buildCreateInput(input) {
32
+ const { dto, status, campaignNumber, config, startDate, endDate } = input;
16
33
  return {
17
34
  campaignNumber,
18
35
  title: dto.title,
19
36
  subTitle: dto.subTitle,
20
- startDate: dto.startDate,
21
- endDate: dto.endDate,
37
+ startDate,
38
+ endDate,
22
39
  status,
23
40
  discountOptions: config.discountOptions,
24
41
  maxDiscountCaps: config.maxDiscountCaps,
42
+ repeatDays: dto.repeatDays ?? [],
25
43
  };
26
44
  }
27
45
  static buildUpdateInput(campaign, dto) {
@@ -33,6 +51,7 @@ class LtoCampaignQueryBuilder {
33
51
  endDate: dto.endDate,
34
52
  ...(dto.discountOptions && { discountOptions: dto.discountOptions }),
35
53
  ...(dto.maxDiscountCaps && { maxDiscountCaps: dto.maxDiscountCaps }),
54
+ ...(dto.repeatDays !== undefined && { repeatDays: dto.repeatDays }),
36
55
  status: isScheduledFromActive ? enum_1.LimitedTimeOfferCampaignStatus.SCHEDULED : campaign.status
37
56
  };
38
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.builder.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":";;;AACA,4DAAiF;AAGjF,MAAM,iBAAiB,GAAG,CAAC,qCAA8B,CAAC,OAAO,EAAE,qCAA8B,CAAC,SAAS,CAAC,CAAC;AAE7G,MAAM,cAAc,GAA2B;IAC3C,EAAE,EAAE,KAAK;IACT,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,WAAW;IAC1B,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAa,uBAAuB;IAChC,MAAM,CAAC,gBAAgB,CACnB,GAAyB,EACzB,MAAsC,EACtC,cAAsB,EACtB,MAA8D;QAE9D,OAAO;YACH,cAAc;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM;YACN,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,eAAe,EAAE,MAAM,CAAC,eAAe;SAC1C,CAAC;IACN,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,QAAkC,EAAE,GAAyB;QACjF,MAAM,qBAAqB,GAC9B,QAAQ,CAAC,MAAM,KAAK,qCAA8B,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC7F,OAAO;YACH,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;YAClC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;YAC3C,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAC,eAAe,EAAE,GAAG,CAAC,eAAe,EAAC,CAAC;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAC,eAAe,EAAE,GAAG,CAAC,eAAe,EAAC,CAAC;YAClE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,qCAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;SAC7F,CAAC;IACN,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAA6B;QACnD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAE,iBAAiB,EAAC,EAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAe;QACjC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,SAAkB;QACxC,OAAO,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;CACJ;AA5CD,0DA4CC","sourcesContent":["import {LimitedTimeOfferCampaign} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {CreateLtoCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO} from './limited-time-offer-campaign.validation';\n\nconst ARCHIVED_STATUSES = [LimitedTimeOfferCampaignStatus.EXPIRED, LimitedTimeOfferCampaignStatus.CANCELLED];\n\nconst SORT_FIELD_MAP: Record<string, string> = {\n id: '_id',\n campaignNumber: 'campaignNumber',\n startDateTime: 'startDate',\n endDateTime: 'endDate',\n shopsJoined: 'shopsJoined',\n status: 'status',\n};\n\nexport class LtoCampaignQueryBuilder {\n static buildCreateInput(\n dto: CreateLtoCampaignDTO,\n status: LimitedTimeOfferCampaignStatus,\n campaignNumber: number,\n config: {discountOptions: number[]; maxDiscountCaps: number[]},\n ) {\n return {\n campaignNumber,\n title: dto.title,\n subTitle: dto.subTitle,\n startDate: dto.startDate,\n endDate: dto.endDate,\n status,\n discountOptions: config.discountOptions,\n maxDiscountCaps: config.maxDiscountCaps,\n };\n }\n\n static buildUpdateInput(campaign: LimitedTimeOfferCampaign, dto: UpdateLtoCampaignDTO) {\n const isScheduledFromActive =\n\t\t\t\t\tcampaign.status === LimitedTimeOfferCampaignStatus.ACTIVE && dto.startDate > campaign.startDate;\n return {\n title: dto.title ?? campaign.title,\n subTitle: dto.subTitle ?? campaign.subTitle,\n startDate: dto.startDate,\n endDate: dto.endDate,\n ...(dto.discountOptions && {discountOptions: dto.discountOptions}),\n ...(dto.maxDiscountCaps && {maxDiscountCaps: dto.maxDiscountCaps}),\n status: isScheduledFromActive ? LimitedTimeOfferCampaignStatus.SCHEDULED : campaign.status\n };\n }\n\n static buildHistoryFilter(dto: GetLtoCampaignHistoryDTO) {\n return dto.status ? {status: dto.status} : {status: {$in: ARCHIVED_STATUSES}};\n }\n\n static buildSortField(sortBy?: string): string {\n return sortBy ? (SORT_FIELD_MAP[sortBy] ?? 'createdAt') : 'createdAt';\n }\n\n static buildSortDirection(sortOrder?: string): 1 | -1 {\n return sortOrder === 'asc' ? 1 : -1;\n }\n}\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.builder.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":";;;AAIA,gDAiBC;AApBD,4DAAiF;AAGjF,SAAgB,kBAAkB,CAAC,UAAoB,EAAE,QAAc,EAAE,MAAY;IACjF,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;QAC7C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QAEzF,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YACjF,MAAM,SAAS,GAAG,SAAS,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;YAC3D,OAAO,EAAC,SAAS,EAAE,OAAO,EAAC,CAAC;QAChC,CAAC;IACL,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAC,CAAC;AAClD,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,qCAA8B,CAAC,OAAO,EAAE,qCAA8B,CAAC,SAAS,CAAC,CAAC;AAE7G,MAAM,cAAc,GAA2B;IAC3C,EAAE,EAAE,KAAK;IACT,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,WAAW;IAC1B,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAa,uBAAuB;IAChC,MAAM,CAAC,gBAAgB,CAAC,KAOvB;QACG,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAC,GAAG,KAAK,CAAC;QACxE,OAAO;YACH,cAAc;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,SAAS;YACT,OAAO;YACP,MAAM;YACN,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE;SACnC,CAAC;IACN,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,QAAkC,EAAE,GAAyB;QACjF,MAAM,qBAAqB,GAC9B,QAAQ,CAAC,MAAM,KAAK,qCAA8B,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC7F,OAAO;YACH,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;YAClC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;YAC3C,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAC,eAAe,EAAE,GAAG,CAAC,eAAe,EAAC,CAAC;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAC,eAAe,EAAE,GAAG,CAAC,eAAe,EAAC,CAAC;YAClE,GAAG,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,EAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAC,CAAC;YACjE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,qCAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;SAC7F,CAAC;IACN,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAA6B;QACnD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAE,iBAAiB,EAAC,EAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAe;QACjC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,SAAkB;QACxC,OAAO,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;CACJ;AAjDD,0DAiDC","sourcesContent":["import {LimitedTimeOfferCampaign} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {CreateLtoCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO} from './limited-time-offer-campaign.validation';\n\nexport function nextOccurrenceDate(repeatDays: number[], refStart: Date, refEnd: Date): {startDate: Date; endDate: Date} {\n const durationMs = refEnd.getTime() - refStart.getTime();\n const now = new Date();\n\n for (let daysAhead = 0; daysAhead < 8; daysAhead++) {\n const candidate = new Date(now);\n candidate.setDate(now.getDate() + daysAhead);\n candidate.setHours(refStart.getHours(), refStart.getMinutes(), refStart.getSeconds(), 0);\n\n if (repeatDays.includes(candidate.getDay()) && candidate.getTime() > now.getTime()) {\n const startDate = candidate;\n const endDate = new Date(startDate.getTime() + durationMs);\n return {startDate, endDate};\n }\n }\n\n return {startDate: refStart, endDate: refEnd};\n}\n\nconst ARCHIVED_STATUSES = [LimitedTimeOfferCampaignStatus.EXPIRED, LimitedTimeOfferCampaignStatus.CANCELLED];\n\nconst SORT_FIELD_MAP: Record<string, string> = {\n id: '_id',\n campaignNumber: 'campaignNumber',\n startDateTime: 'startDate',\n endDateTime: 'endDate',\n shopsJoined: 'shopsJoined',\n status: 'status',\n};\n\nexport class LtoCampaignQueryBuilder {\n static buildCreateInput(input: {\n dto: CreateLtoCampaignDTO;\n status: LimitedTimeOfferCampaignStatus;\n campaignNumber: number;\n config: {discountOptions: number[]; maxDiscountCaps: number[]};\n startDate: Date;\n endDate: Date;\n }) {\n const {dto, status, campaignNumber, config, startDate, endDate} = input;\n return {\n campaignNumber,\n title: dto.title,\n subTitle: dto.subTitle,\n startDate,\n endDate,\n status,\n discountOptions: config.discountOptions,\n maxDiscountCaps: config.maxDiscountCaps,\n repeatDays: dto.repeatDays ?? [],\n };\n }\n\n static buildUpdateInput(campaign: LimitedTimeOfferCampaign, dto: UpdateLtoCampaignDTO) {\n const isScheduledFromActive =\n\t\t\t\t\tcampaign.status === LimitedTimeOfferCampaignStatus.ACTIVE && dto.startDate > campaign.startDate;\n return {\n title: dto.title ?? campaign.title,\n subTitle: dto.subTitle ?? campaign.subTitle,\n startDate: dto.startDate,\n endDate: dto.endDate,\n ...(dto.discountOptions && {discountOptions: dto.discountOptions}),\n ...(dto.maxDiscountCaps && {maxDiscountCaps: dto.maxDiscountCaps}),\n ...(dto.repeatDays !== undefined && {repeatDays: dto.repeatDays}),\n status: isScheduledFromActive ? LimitedTimeOfferCampaignStatus.SCHEDULED : campaign.status\n };\n }\n\n static buildHistoryFilter(dto: GetLtoCampaignHistoryDTO) {\n return dto.status ? {status: dto.status} : {status: {$in: ARCHIVED_STATUSES}};\n }\n\n static buildSortField(sortBy?: string): string {\n return sortBy ? (SORT_FIELD_MAP[sortBy] ?? 'createdAt') : 'createdAt';\n }\n\n static buildSortDirection(sortOrder?: string): 1 | -1 {\n return sortOrder === 'asc' ? 1 : -1;\n }\n}\n"]}
@@ -13,6 +13,8 @@ export declare class LtoCampaignRepository {
13
13
  updateById(id: mongoose.Types.ObjectId, updates: object): Promise<DocumentType<Model> | null>;
14
14
  setStatus(id: mongoose.Types.ObjectId, status: LimitedTimeOfferCampaignStatus, archive?: boolean): Promise<void>;
15
15
  nextCampaignNumber(): Promise<number>;
16
+ findScheduledRecurring(): Promise<DocumentType<Model>[]>;
17
+ findActiveRecurring(): Promise<DocumentType<Model>[]>;
16
18
  findHistory(dto: GetLtoCampaignHistoryDTO): Promise<{
17
19
  documents: LtoCampaignHistoryItemDTO[];
18
20
  total: number;
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.repository.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAEH,wBAAwB,IAAI,KAAK,EAGpC,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAc,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAC,wBAAwB,EAAE,yBAAyB,EAAC,MAAM,0CAA0C,CAAC;AAK7G,qBACa,qBAAqB;IAC9B,OAAO,CAAC,KAAK,CAAgE;;IAMvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAInD,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIlD,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIjD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI1E,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI7F,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,8BAA8B,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9G,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IASrC,WAAW,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,yBAAyB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;CA4CrH;AAED,eAAO,MAAM,qBAAqB,uBAAuC,CAAC"}
1
+ {"version":3,"file":"limited-time-offer-campaign.repository.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAEH,wBAAwB,IAAI,KAAK,EAGpC,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAc,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAC,wBAAwB,EAAE,yBAAyB,EAAC,MAAM,0CAA0C,CAAC;AAK7G,qBACa,qBAAqB;IAC9B,OAAO,CAAC,KAAK,CAAgE;;IAMvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAInD,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIlD,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIjD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI1E,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI7F,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,8BAA8B,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9G,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IASrC,sBAAsB,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAOxD,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAOrD,WAAW,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,yBAAyB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;CA4CrH;AAED,eAAO,MAAM,qBAAqB,uBAAuC,CAAC"}
@@ -80,6 +80,18 @@ let LtoCampaignRepository = class LtoCampaignRepository {
80
80
  const counter = await models_1.CounterModel.findOneAndUpdate({ counterType: enum_1.CounterType.LTO_CAMPAIGN }, { $inc: { value: 1 } }, { upsert: true, new: true, setDefaultsOnInsert: true });
81
81
  return counter.value;
82
82
  }
83
+ async findScheduledRecurring() {
84
+ return this.model.find({
85
+ status: enum_1.LimitedTimeOfferCampaignStatus.SCHEDULED,
86
+ repeatDays: { $exists: true, $not: { $size: 0 } },
87
+ });
88
+ }
89
+ async findActiveRecurring() {
90
+ return this.model.find({
91
+ status: enum_1.LimitedTimeOfferCampaignStatus.ACTIVE,
92
+ repeatDays: { $exists: true, $not: { $size: 0 } },
93
+ });
94
+ }
83
95
  async findHistory(dto) {
84
96
  const filter = limited_time_offer_campaign_builder_1.LtoCampaignQueryBuilder.buildHistoryFilter(dto);
85
97
  const sortField = limited_time_offer_campaign_builder_1.LtoCampaignQueryBuilder.buildSortField(dto.sortBy);
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.repository.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0C;AAE1C,sEAKmD;AAEnD,4DAA8F;AAE9F,kIAAiH;AAEjH,MAAM,eAAe,GAAG,CAAC,qCAA8B,CAAC,SAAS,EAAE,qCAA8B,CAAC,MAAM,CAAC,CAAC;AAGnG,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACtB,KAAK,CAAgE;IAE7E;QACI,IAAI,CAAC,KAAK,GAAG,sCAA8F,CAAC;IAChH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAE,eAAe,EAAC,EAAC,CAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,qCAA8B,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAA2B;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,iBAAiB;QACnB,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAE,eAAe,EAAC,EAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAA2B,EAAE,OAAe;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAC,IAAI,EAAE,OAAO,EAAC,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAA2B,EAAE,MAAsC,EAAE,OAAO,GAAG,KAAK;QAChG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE;YACnC,IAAI,EAAE,EAAC,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAC,UAAU,EAAE,IAAI,IAAI,EAAE,EAAC,CAAC,EAAC;SAC3D,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,kBAAkB;QACpB,MAAM,OAAO,GAAG,MAAM,qBAAY,CAAC,gBAAgB,CAC/C,EAAC,WAAW,EAAE,kBAAW,CAAC,YAAY,EAAC,EACvC,EAAC,IAAI,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,EAAC,EAClB,EAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAC,CACvD,CAAC;QACF,OAAO,OAAO,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAA6B;QAC3C,MAAM,MAAM,GAAG,6DAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,6DAAuB,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,6DAAuB,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEhF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACxC,EAAC,MAAM,EAAE,MAAM,EAAC;YAChB;gBACI,OAAO,EAAE;oBACL,IAAI,EAAE,yCAAgC,CAAC,UAAU,CAAC,IAAI;oBACtD,GAAG,EAAE,EAAC,UAAU,EAAE,MAAM,EAAC;oBACzB,QAAQ,EAAE;wBACN,EAAC,MAAM,EAAE,EAAC,KAAK,EAAE,EAAC,IAAI,EAAE,CAAC,EAAC,GAAG,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,EAAC,EAAE,EAAC,GAAG,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,EAAC,CAAC,EAAC,EAAC,EAAC;wBACjG,EAAC,MAAM,EAAE,OAAO,EAAC;qBACpB;oBACD,EAAE,EAAE,aAAa;iBACpB;aACJ;YACD,EAAC,UAAU,EAAE,EAAC,WAAW,EAAE,EAAC,OAAO,EAAE,CAAC,EAAC,YAAY,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAAC,EAAC,EAAC;YACtF,EAAC,KAAK,EAAE,EAAC,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAC,EAAC;YACzD;gBACI,MAAM,EAAE;oBACJ,KAAK,EAAE,CAAC,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC;oBAC1B,SAAS,EAAE;wBACP,EAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAC;wBAClC,EAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAC;wBAClB,EAAC,QAAQ,EAAE,EAAC,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAC,EAAC;qBAC/F;iBACJ;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,KAAK,GAAW,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QACrD,MAAM,SAAS,GAAgC,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACtF,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE;YACpB,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,aAAa,EAAE,CAAC,CAAC,SAAS;YAC1B,WAAW,EAAE,CAAC,CAAC,OAAO;YACtB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;SACnB,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;IAC9B,CAAC;CACJ,CAAA;AA1FY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,gBAAO,GAAE;;GACG,qBAAqB,CA0FjC;AAEY,QAAA,qBAAqB,GAAG,gBAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC","sourcesContent":["import Container, {Service} from 'typedi';\nimport {DocumentType, mongoose} from '@typegoose/typegoose';\nimport {\n CounterModel,\n LimitedTimeOfferCampaign as Model,\n LimitedTimeOfferCampaignModel,\n LimitedTimeOfferParticipantModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {SoftDeleteModel} from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {CounterType, LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {GetLtoCampaignHistoryDTO, LtoCampaignHistoryItemDTO} from './limited-time-offer-campaign.validation';\nimport {LtoCampaignQueryBuilder} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.builder';\n\nconst ACTIVE_STATUSES = [LimitedTimeOfferCampaignStatus.SCHEDULED, LimitedTimeOfferCampaignStatus.ACTIVE];\n\n@Service()\nexport class LtoCampaignRepository {\n private model: typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n\n constructor() {\n this.model = LimitedTimeOfferCampaignModel as typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n }\n\n async create(input: object): Promise<DocumentType<Model>> {\n return this.model.create(input);\n }\n\n async findCurrent(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: {$in: ACTIVE_STATUSES}}).sort({createdAt: -1});\n }\n\n async findActive(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: LimitedTimeOfferCampaignStatus.ACTIVE}).sort({createdAt: -1});\n }\n\n async findById(id: mongoose.Types.ObjectId): Promise<DocumentType<Model> | null> {\n return this.model.findById(id);\n }\n\n async hasActiveCampaign(): Promise<boolean> {\n return !!(await this.model.exists({status: {$in: ACTIVE_STATUSES}}));\n }\n\n async updateById(id: mongoose.Types.ObjectId, updates: object): Promise<DocumentType<Model> | null> {\n return this.model.findByIdAndUpdate(id, {$set: updates}, {new: true});\n }\n\n async setStatus(id: mongoose.Types.ObjectId, status: LimitedTimeOfferCampaignStatus, archive = false): Promise<void> {\n await this.model.findByIdAndUpdate(id, {\n $set: {status, ...(archive && {archivedAt: new Date()})},\n });\n }\n\n async nextCampaignNumber(): Promise<number> {\n const counter = await CounterModel.findOneAndUpdate(\n {counterType: CounterType.LTO_CAMPAIGN},\n {$inc: {value: 1}},\n {upsert: true, new: true, setDefaultsOnInsert: true},\n );\n return counter.value;\n }\n\n async findHistory(dto: GetLtoCampaignHistoryDTO): Promise<{documents: LtoCampaignHistoryItemDTO[]; total: number}> {\n const filter = LtoCampaignQueryBuilder.buildHistoryFilter(dto);\n const sortField = LtoCampaignQueryBuilder.buildSortField(dto.sortBy);\n const sortDirection = LtoCampaignQueryBuilder.buildSortDirection(dto.sortOrder);\n\n const [result] = await this.model.aggregate([\n {$match: filter},\n {\n $lookup: {\n from: LimitedTimeOfferParticipantModel.collection.name,\n let: {campaignId: '$_id'},\n pipeline: [\n {$match: {$expr: {$and: [{$eq: ['$campaign', '$$campaignId']}, {$eq: ['$isWithdrawn', false]}]}}},\n {$count: 'count'},\n ],\n as: 'joinedStats',\n },\n },\n {$addFields: {shopsJoined: {$ifNull: [{$arrayElemAt: ['$joinedStats.count', 0]}, 0]}}},\n {$sort: {[sortField]: sortDirection, _id: sortDirection}},\n {\n $facet: {\n total: [{$count: 'count'}],\n documents: [\n {$skip: (dto.page - 1) * dto.size},\n {$limit: dto.size},\n {$project: {_id: 1, campaignNumber: 1, startDate: 1, endDate: 1, status: 1, shopsJoined: 1}},\n ],\n },\n },\n ]);\n\n const total: number = result?.total?.[0]?.count ?? 0;\n const documents: LtoCampaignHistoryItemDTO[] = (result?.documents ?? []).map((d: any) => ({\n id: d._id.toString(),\n campaignNumber: d.campaignNumber,\n startDateTime: d.startDate,\n endDateTime: d.endDate,\n shopsJoined: d.shopsJoined,\n status: d.status,\n }));\n\n return {documents, total};\n }\n}\n\nexport const ltoCampaignRepository = Container.get(LtoCampaignRepository);\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.repository.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, {Service} from 'typedi';\nimport {DocumentType, mongoose} from '@typegoose/typegoose';\nimport {\n CounterModel,\n LimitedTimeOfferCampaign as Model,\n LimitedTimeOfferCampaignModel,\n LimitedTimeOfferParticipantModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {SoftDeleteModel} from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {CounterType, LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {GetLtoCampaignHistoryDTO, LtoCampaignHistoryItemDTO} from './limited-time-offer-campaign.validation';\nimport {LtoCampaignQueryBuilder} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.builder';\n\nconst ACTIVE_STATUSES = [LimitedTimeOfferCampaignStatus.SCHEDULED, LimitedTimeOfferCampaignStatus.ACTIVE];\n\n@Service()\nexport class LtoCampaignRepository {\n private model: typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n\n constructor() {\n this.model = LimitedTimeOfferCampaignModel as typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n }\n\n async create(input: object): Promise<DocumentType<Model>> {\n return this.model.create(input);\n }\n\n async findCurrent(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: {$in: ACTIVE_STATUSES}}).sort({createdAt: -1});\n }\n\n async findActive(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: LimitedTimeOfferCampaignStatus.ACTIVE}).sort({createdAt: -1});\n }\n\n async findById(id: mongoose.Types.ObjectId): Promise<DocumentType<Model> | null> {\n return this.model.findById(id);\n }\n\n async hasActiveCampaign(): Promise<boolean> {\n return !!(await this.model.exists({status: {$in: ACTIVE_STATUSES}}));\n }\n\n async updateById(id: mongoose.Types.ObjectId, updates: object): Promise<DocumentType<Model> | null> {\n return this.model.findByIdAndUpdate(id, {$set: updates}, {new: true});\n }\n\n async setStatus(id: mongoose.Types.ObjectId, status: LimitedTimeOfferCampaignStatus, archive = false): Promise<void> {\n await this.model.findByIdAndUpdate(id, {\n $set: {status, ...(archive && {archivedAt: new Date()})},\n });\n }\n\n async nextCampaignNumber(): Promise<number> {\n const counter = await CounterModel.findOneAndUpdate(\n {counterType: CounterType.LTO_CAMPAIGN},\n {$inc: {value: 1}},\n {upsert: true, new: true, setDefaultsOnInsert: true},\n );\n return counter.value;\n }\n\n async findScheduledRecurring(): Promise<DocumentType<Model>[]> {\n return this.model.find({\n status: LimitedTimeOfferCampaignStatus.SCHEDULED,\n repeatDays: {$exists: true, $not: {$size: 0}},\n });\n }\n\n async findActiveRecurring(): Promise<DocumentType<Model>[]> {\n return this.model.find({\n status: LimitedTimeOfferCampaignStatus.ACTIVE,\n repeatDays: {$exists: true, $not: {$size: 0}},\n });\n }\n\n async findHistory(dto: GetLtoCampaignHistoryDTO): Promise<{documents: LtoCampaignHistoryItemDTO[]; total: number}> {\n const filter = LtoCampaignQueryBuilder.buildHistoryFilter(dto);\n const sortField = LtoCampaignQueryBuilder.buildSortField(dto.sortBy);\n const sortDirection = LtoCampaignQueryBuilder.buildSortDirection(dto.sortOrder);\n\n const [result] = await this.model.aggregate([\n {$match: filter},\n {\n $lookup: {\n from: LimitedTimeOfferParticipantModel.collection.name,\n let: {campaignId: '$_id'},\n pipeline: [\n {$match: {$expr: {$and: [{$eq: ['$campaign', '$$campaignId']}, {$eq: ['$isWithdrawn', false]}]}}},\n {$count: 'count'},\n ],\n as: 'joinedStats',\n },\n },\n {$addFields: {shopsJoined: {$ifNull: [{$arrayElemAt: ['$joinedStats.count', 0]}, 0]}}},\n {$sort: {[sortField]: sortDirection, _id: sortDirection}},\n {\n $facet: {\n total: [{$count: 'count'}],\n documents: [\n {$skip: (dto.page - 1) * dto.size},\n {$limit: dto.size},\n {$project: {_id: 1, campaignNumber: 1, startDate: 1, endDate: 1, status: 1, shopsJoined: 1}},\n ],\n },\n },\n ]);\n\n const total: number = result?.total?.[0]?.count ?? 0;\n const documents: LtoCampaignHistoryItemDTO[] = (result?.documents ?? []).map((d: any) => ({\n id: d._id.toString(),\n campaignNumber: d.campaignNumber,\n startDateTime: d.startDate,\n endDateTime: d.endDate,\n shopsJoined: d.shopsJoined,\n status: d.status,\n }));\n\n return {documents, total};\n }\n}\n\nexport const ltoCampaignRepository = Container.get(LtoCampaignRepository);\n"]}