@lyxa.ai/marketing 1.0.64 → 1.0.65

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 (311) hide show
  1. package/dist/lib/event/event-initializations.d.ts.map +1 -1
  2. package/dist/lib/event/event-initializations.js +0 -1
  3. package/dist/lib/event/event-initializations.js.map +1 -1
  4. package/dist/lib/event/event-listeners/event-listeners.d.ts +0 -1
  5. package/dist/lib/event/event-listeners/event-listeners.d.ts.map +1 -1
  6. package/dist/lib/event/event-listeners/event-listeners.js +12 -62
  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 +2 -1
  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/index.d.ts +21 -12030
  12. package/dist/lib/index.d.ts.map +1 -1
  13. package/dist/lib/index.js.map +1 -1
  14. package/dist/lib/modules/coupon/routers/coupon.router.d.ts +1101 -27
  15. package/dist/lib/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  16. package/dist/lib/modules/coupon/services/coupon.service.d.ts +1 -1
  17. package/dist/lib/modules/coupon/services/coupon.service.js +1 -1
  18. package/dist/lib/modules/coupon/services/coupon.service.js.map +1 -1
  19. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.d.ts.map +1 -1
  20. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js +21 -6
  21. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js.map +1 -1
  22. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  23. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js +1 -0
  24. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js.map +1 -1
  25. package/dist/lib/modules/coupon/transformers/coupon.transformer.d.ts +50 -0
  26. package/dist/lib/modules/coupon/transformers/coupon.transformer.d.ts.map +1 -1
  27. package/dist/lib/modules/coupon/validations/all-coupons.validation.d.ts +828 -6
  28. package/dist/lib/modules/coupon/validations/all-coupons.validation.d.ts.map +1 -1
  29. package/dist/lib/modules/coupon/validations/coupon.validation.d.ts +30 -30
  30. package/dist/lib/modules/coupon/validations/create-coupon.validation.d.ts +98 -0
  31. package/dist/lib/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
  32. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.d.ts +374 -0
  33. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.d.ts.map +1 -1
  34. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.js +2 -0
  35. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.js.map +1 -1
  36. package/dist/lib/modules/deal-setting/routers/deal-setting.router.d.ts +9 -9
  37. package/dist/lib/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  38. package/dist/lib/modules/deal-setting/validations/deal-setting.validation.d.ts +6 -6
  39. package/dist/lib/modules/featured-setting/routers/featured-setting.router.d.ts +8 -8
  40. package/dist/lib/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  41. package/dist/lib/modules/featured-setting/validations/featured-setting.validation.d.ts +6 -6
  42. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts +7 -7
  43. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  44. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js +2 -0
  45. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js.map +1 -1
  46. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  47. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js +4 -1
  48. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js.map +1 -1
  49. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +36 -36
  50. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  51. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js +7 -2
  52. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js.map +1 -1
  53. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +1 -0
  54. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  55. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js +13 -2
  56. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js.map +1 -1
  57. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  58. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js +7 -2
  59. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js.map +1 -1
  60. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.validation.d.ts +6 -6
  61. package/dist/lib/modules/limited-time-offer/config/limited-time-offer.router.d.ts +3 -3
  62. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts +18 -18
  63. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  64. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js +3 -0
  65. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js.map +1 -1
  66. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +7 -7
  67. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  68. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js +5 -0
  69. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js.map +1 -1
  70. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +1 -0
  71. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +1 -0
  72. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js +2 -0
  73. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js.map +1 -0
  74. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +19 -19
  75. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +1 -0
  76. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  77. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js +18 -1
  78. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js.map +1 -1
  79. package/dist/lib/modules/marketing/routers/marketing.router.d.ts +14 -3
  80. package/dist/lib/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  81. package/dist/lib/modules/marketing/routers/marketing.router.js +4 -0
  82. package/dist/lib/modules/marketing/routers/marketing.router.js.map +1 -1
  83. package/dist/lib/modules/marketing/services/marketing.service.d.ts +1 -2
  84. package/dist/lib/modules/marketing/services/marketing.service.d.ts.map +1 -1
  85. package/dist/lib/modules/marketing/services/marketing.service.js +85 -77
  86. package/dist/lib/modules/marketing/services/marketing.service.js.map +1 -1
  87. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts +3 -1
  88. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  89. package/dist/lib/modules/marketing/services/product-marketing.service.js +13 -10
  90. package/dist/lib/modules/marketing/services/product-marketing.service.js.map +1 -1
  91. package/dist/lib/modules/marketing/services/spend-to-get-progress.service.d.ts +13 -0
  92. package/dist/lib/modules/marketing/services/spend-to-get-progress.service.d.ts.map +1 -1
  93. package/dist/lib/modules/marketing/services/spend-to-get-progress.service.js +24 -0
  94. package/dist/lib/modules/marketing/services/spend-to-get-progress.service.js.map +1 -1
  95. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
  96. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js +27 -95
  97. package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js.map +1 -1
  98. package/dist/lib/modules/marketing/validations/all-marketings.validation.d.ts +4 -4
  99. package/dist/lib/modules/marketing/validations/buy1-get1-marketing.validation.d.ts +3 -3
  100. package/dist/lib/modules/marketing/validations/discount-marketing.validation.d.ts +3 -3
  101. package/dist/lib/modules/marketing/validations/marketing.validation.d.ts +8 -0
  102. package/dist/lib/modules/marketing/validations/marketing.validation.d.ts.map +1 -1
  103. package/dist/lib/modules/marketing/validations/marketing.validation.js +4 -1
  104. package/dist/lib/modules/marketing/validations/marketing.validation.js.map +1 -1
  105. package/dist/lib/modules/marketing/validations/product-marketing.validation.d.ts +2 -2
  106. package/dist/lib/modules/marketing/validations/punch-marketing.validation.d.ts +4 -4
  107. package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +12 -12
  108. package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  109. package/dist/lib/modules/punch-marketing-history/validations/punch-marketing-history.validation.d.ts +8 -8
  110. package/dist/lib/modules/referral-setting/routers/referral-setting.router.d.ts +4 -4
  111. package/dist/lib/modules/referral-setting/validations/referral-setting.validation.d.ts +6 -6
  112. package/dist/lib/modules/referral-setting/validations/referral-setting.validation.d.ts.map +1 -1
  113. package/dist/lib/modules/referral-setting/validations/referral-setting.validation.js.map +1 -1
  114. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +3 -2
  115. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -1
  116. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js +11 -3
  117. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js.map +1 -1
  118. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts +26 -10
  119. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -1
  120. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts +2 -2
  121. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -1
  122. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.js.map +1 -1
  123. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +25 -6
  124. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -1
  125. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js +1 -0
  126. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js.map +1 -1
  127. package/dist/lib/modules/tournament/config/config.router.d.ts +4 -4
  128. package/dist/lib/modules/tournament/config/config.validation.d.ts +12 -12
  129. package/dist/lib/modules/tournament/match/match.router.d.ts +5 -5
  130. package/dist/lib/modules/tournament/match/match.validation.d.ts +12 -12
  131. package/dist/lib/modules/tournament/participant/participant.router.d.ts +3 -3
  132. package/dist/lib/modules/tournament/participant/participant.validation.d.ts +24 -24
  133. package/dist/lib/modules/tournament/prediction/prediction.router.d.ts +3 -3
  134. package/dist/lib/modules/tournament/prediction/prediction.validation.d.ts +18 -18
  135. package/dist/lib/modules/tournament/score/score.router.d.ts +1 -1
  136. package/dist/lib/modules/tournament/score/score.validation.d.ts +6 -6
  137. package/dist/lib/modules/tournament/statistics/statistics.router.d.ts +1 -1
  138. package/dist/lib/modules/tournament/statistics/statistics.validation.d.ts +6 -6
  139. package/dist/lib/modules/tournament/team/team.router.d.ts +3 -3
  140. package/dist/lib/modules/tournament/team/team.validation.d.ts +18 -18
  141. package/dist/lib/modules/tournament/tournament.router.d.ts +21 -21
  142. package/dist/lib/modules/tournament/tournament.validation.d.ts +6 -6
  143. package/dist/lib/utility/feature-flags.d.ts +3 -0
  144. package/dist/lib/utility/feature-flags.d.ts.map +1 -0
  145. package/dist/lib/utility/feature-flags.js +16 -0
  146. package/dist/lib/utility/feature-flags.js.map +1 -0
  147. package/dist/types/event/event-initializations.d.ts.map +1 -1
  148. package/dist/types/event/event-listeners/event-listeners.d.ts +0 -1
  149. package/dist/types/event/event-listeners/event-listeners.d.ts.map +1 -1
  150. package/dist/types/event/events/marketing-product-seed.event.d.ts +2 -1
  151. package/dist/types/event/events/marketing-product-seed.event.d.ts.map +1 -1
  152. package/dist/types/index.d.ts +21 -12030
  153. package/dist/types/index.d.ts.map +1 -1
  154. package/dist/types/modules/coupon/routers/coupon.router.d.ts +1101 -27
  155. package/dist/types/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  156. package/dist/types/modules/coupon/services/coupon.service.d.ts +1 -1
  157. package/dist/types/modules/coupon/services/patterns/repository/CouponMetricsRepository.d.ts.map +1 -1
  158. package/dist/types/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  159. package/dist/types/modules/coupon/transformers/coupon.transformer.d.ts +50 -0
  160. package/dist/types/modules/coupon/transformers/coupon.transformer.d.ts.map +1 -1
  161. package/dist/types/modules/coupon/validations/all-coupons.validation.d.ts +828 -6
  162. package/dist/types/modules/coupon/validations/all-coupons.validation.d.ts.map +1 -1
  163. package/dist/types/modules/coupon/validations/coupon.validation.d.ts +30 -30
  164. package/dist/types/modules/coupon/validations/create-coupon.validation.d.ts +98 -0
  165. package/dist/types/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
  166. package/dist/types/modules/coupon/validations/referral-reward-coupon.validation.d.ts +374 -0
  167. package/dist/types/modules/coupon/validations/referral-reward-coupon.validation.d.ts.map +1 -1
  168. package/dist/types/modules/deal-setting/routers/deal-setting.router.d.ts +9 -9
  169. package/dist/types/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  170. package/dist/types/modules/deal-setting/validations/deal-setting.validation.d.ts +6 -6
  171. package/dist/types/modules/featured-setting/routers/featured-setting.router.d.ts +8 -8
  172. package/dist/types/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  173. package/dist/types/modules/featured-setting/validations/featured-setting.validation.d.ts +6 -6
  174. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts +7 -7
  175. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  176. package/dist/types/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  177. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +36 -36
  178. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  179. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +1 -0
  180. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  181. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  182. package/dist/types/modules/limited-time-offer/config/limited-time-offer-config.validation.d.ts +6 -6
  183. package/dist/types/modules/limited-time-offer/config/limited-time-offer.router.d.ts +3 -3
  184. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts +18 -18
  185. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  186. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +7 -7
  187. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  188. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +19 -19
  189. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +1 -0
  190. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  191. package/dist/types/modules/marketing/routers/marketing.router.d.ts +14 -3
  192. package/dist/types/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  193. package/dist/types/modules/marketing/services/marketing.service.d.ts +1 -2
  194. package/dist/types/modules/marketing/services/marketing.service.d.ts.map +1 -1
  195. package/dist/types/modules/marketing/services/product-marketing.service.d.ts +3 -1
  196. package/dist/types/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  197. package/dist/types/modules/marketing/services/spend-to-get-progress.service.d.ts +18 -0
  198. package/dist/types/modules/marketing/services/spend-to-get-progress.service.d.ts.map +1 -1
  199. package/dist/types/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
  200. package/dist/types/modules/marketing/validations/all-marketings.validation.d.ts +4 -4
  201. package/dist/types/modules/marketing/validations/buy1-get1-marketing.validation.d.ts +3 -3
  202. package/dist/types/modules/marketing/validations/discount-marketing.validation.d.ts +3 -3
  203. package/dist/types/modules/marketing/validations/marketing.validation.d.ts +8 -0
  204. package/dist/types/modules/marketing/validations/marketing.validation.d.ts.map +1 -1
  205. package/dist/types/modules/marketing/validations/product-marketing.validation.d.ts +2 -2
  206. package/dist/types/modules/marketing/validations/punch-marketing.validation.d.ts +4 -4
  207. package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +12 -12
  208. package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  209. package/dist/types/modules/punch-marketing-history/validations/punch-marketing-history.validation.d.ts +8 -8
  210. package/dist/types/modules/referral-setting/routers/referral-setting.router.d.ts +4 -4
  211. package/dist/types/modules/referral-setting/validations/referral-setting.validation.d.ts +6 -6
  212. package/dist/types/modules/referral-setting/validations/referral-setting.validation.d.ts.map +1 -1
  213. package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +3 -2
  214. package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -1
  215. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts +26 -10
  216. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -1
  217. package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts +2 -2
  218. package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -1
  219. package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +25 -6
  220. package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -1
  221. package/dist/types/modules/tournament/config/config.router.d.ts +4 -4
  222. package/dist/types/modules/tournament/config/config.validation.d.ts +12 -12
  223. package/dist/types/modules/tournament/match/match.router.d.ts +5 -5
  224. package/dist/types/modules/tournament/match/match.validation.d.ts +12 -12
  225. package/dist/types/modules/tournament/participant/participant.router.d.ts +3 -3
  226. package/dist/types/modules/tournament/participant/participant.validation.d.ts +24 -24
  227. package/dist/types/modules/tournament/prediction/prediction.router.d.ts +3 -3
  228. package/dist/types/modules/tournament/prediction/prediction.validation.d.ts +18 -18
  229. package/dist/types/modules/tournament/score/score.router.d.ts +1 -1
  230. package/dist/types/modules/tournament/score/score.validation.d.ts +6 -6
  231. package/dist/types/modules/tournament/statistics/statistics.router.d.ts +1 -1
  232. package/dist/types/modules/tournament/statistics/statistics.validation.d.ts +6 -6
  233. package/dist/types/modules/tournament/team/team.router.d.ts +3 -3
  234. package/dist/types/modules/tournament/team/team.validation.d.ts +18 -18
  235. package/dist/types/modules/tournament/tournament.router.d.ts +21 -21
  236. package/dist/types/modules/tournament/tournament.validation.d.ts +6 -6
  237. package/dist/types/utility/feature-flags.d.ts +12 -0
  238. package/dist/types/utility/feature-flags.d.ts.map +1 -0
  239. package/package.json +2 -2
  240. package/dist/lib/modules/spend-to-get-history/routers/index.d.ts +0 -2
  241. package/dist/lib/modules/spend-to-get-history/routers/index.d.ts.map +0 -1
  242. package/dist/lib/modules/spend-to-get-history/routers/index.js +0 -18
  243. package/dist/lib/modules/spend-to-get-history/routers/index.js.map +0 -1
  244. package/dist/lib/modules/spend-to-get-history/routers/spend-to-get-history.router.js +0 -62
  245. package/dist/lib/modules/spend-to-get-history/routers/spend-to-get-history.router.js.map +0 -1
  246. package/dist/lib/modules/spend-to-get-history/services/index.d.ts +0 -2
  247. package/dist/lib/modules/spend-to-get-history/services/index.d.ts.map +0 -1
  248. package/dist/lib/modules/spend-to-get-history/services/index.js +0 -18
  249. package/dist/lib/modules/spend-to-get-history/services/index.js.map +0 -1
  250. package/dist/lib/modules/spend-to-get-history/services/spend-to-get-history.service.d.ts +0 -24
  251. package/dist/lib/modules/spend-to-get-history/services/spend-to-get-history.service.d.ts.map +0 -1
  252. package/dist/lib/modules/spend-to-get-history/services/spend-to-get-history.service.js +0 -136
  253. package/dist/lib/modules/spend-to-get-history/services/spend-to-get-history.service.js.map +0 -1
  254. package/dist/lib/modules/spend-to-get-history/validations/index.d.ts +0 -2
  255. package/dist/lib/modules/spend-to-get-history/validations/index.d.ts.map +0 -1
  256. package/dist/lib/modules/spend-to-get-history/validations/index.js +0 -18
  257. package/dist/lib/modules/spend-to-get-history/validations/index.js.map +0 -1
  258. package/dist/lib/modules/spend-to-get-history/validations/spend-to-get-history.validation.d.ts +0 -232
  259. package/dist/lib/modules/spend-to-get-history/validations/spend-to-get-history.validation.d.ts.map +0 -1
  260. package/dist/lib/modules/spend-to-get-history/validations/spend-to-get-history.validation.js +0 -30
  261. package/dist/lib/modules/spend-to-get-history/validations/spend-to-get-history.validation.js.map +0 -1
  262. package/dist/lib/modules/tournament/match/events/match-ended.consumer.d.ts +0 -2
  263. package/dist/lib/modules/tournament/match/events/match-ended.consumer.d.ts.map +0 -1
  264. package/dist/lib/modules/tournament/match/events/match-ended.consumer.js +0 -15
  265. package/dist/lib/modules/tournament/match/events/match-ended.consumer.js.map +0 -1
  266. package/dist/lib/modules/tournament/match/events/match-ended.event.d.ts +0 -14
  267. package/dist/lib/modules/tournament/match/events/match-ended.event.d.ts.map +0 -1
  268. package/dist/lib/modules/tournament/match/events/match-ended.event.js +0 -12
  269. package/dist/lib/modules/tournament/match/events/match-ended.event.js.map +0 -1
  270. package/dist/lib/modules/tournament/notification/jobs/notification.producer.d.ts +0 -10
  271. package/dist/lib/modules/tournament/notification/jobs/notification.producer.d.ts.map +0 -1
  272. package/dist/lib/modules/tournament/notification/jobs/notification.producer.js +0 -23
  273. package/dist/lib/modules/tournament/notification/jobs/notification.producer.js.map +0 -1
  274. package/dist/lib/modules/tournament/notification/jobs/notification.worker.d.ts +0 -9
  275. package/dist/lib/modules/tournament/notification/jobs/notification.worker.d.ts.map +0 -1
  276. package/dist/lib/modules/tournament/notification/jobs/notification.worker.js +0 -82
  277. package/dist/lib/modules/tournament/notification/jobs/notification.worker.js.map +0 -1
  278. package/dist/lib/modules/tournament/notification/notification.schedule.config.d.ts +0 -10
  279. package/dist/lib/modules/tournament/notification/notification.schedule.config.d.ts.map +0 -1
  280. package/dist/lib/modules/tournament/notification/notification.schedule.config.js +0 -15
  281. package/dist/lib/modules/tournament/notification/notification.schedule.config.js.map +0 -1
  282. package/dist/lib/modules/tournament/notification/notification.scheduler.service.d.ts +0 -10
  283. package/dist/lib/modules/tournament/notification/notification.scheduler.service.d.ts.map +0 -1
  284. package/dist/lib/modules/tournament/notification/notification.scheduler.service.js +0 -73
  285. package/dist/lib/modules/tournament/notification/notification.scheduler.service.js.map +0 -1
  286. package/dist/types/events/event-initializations.d.ts +0 -2
  287. package/dist/types/events/event-initializations.d.ts.map +0 -1
  288. package/dist/types/modules/spend-to-get-history/routers/index.d.ts +0 -2
  289. package/dist/types/modules/spend-to-get-history/routers/index.d.ts.map +0 -1
  290. package/dist/types/modules/spend-to-get-history/services/index.d.ts +0 -2
  291. package/dist/types/modules/spend-to-get-history/services/index.d.ts.map +0 -1
  292. package/dist/types/modules/spend-to-get-history/services/spend-to-get-history.service.d.ts +0 -56
  293. package/dist/types/modules/spend-to-get-history/services/spend-to-get-history.service.d.ts.map +0 -1
  294. package/dist/types/modules/spend-to-get-history/validations/index.d.ts +0 -2
  295. package/dist/types/modules/spend-to-get-history/validations/index.d.ts.map +0 -1
  296. package/dist/types/modules/spend-to-get-history/validations/spend-to-get-history.validation.d.ts +0 -241
  297. package/dist/types/modules/spend-to-get-history/validations/spend-to-get-history.validation.d.ts.map +0 -1
  298. package/dist/types/modules/tournament/config/tournament-config.validation.d.ts +0 -201
  299. package/dist/types/modules/tournament/config/tournament-config.validation.d.ts.map +0 -1
  300. package/dist/types/modules/tournament/match/events/match-ended.consumer.d.ts +0 -2
  301. package/dist/types/modules/tournament/match/events/match-ended.consumer.d.ts.map +0 -1
  302. package/dist/types/modules/tournament/match/events/match-ended.event.d.ts +0 -14
  303. package/dist/types/modules/tournament/match/events/match-ended.event.d.ts.map +0 -1
  304. package/dist/types/modules/tournament/notification/jobs/notification.producer.d.ts +0 -10
  305. package/dist/types/modules/tournament/notification/jobs/notification.producer.d.ts.map +0 -1
  306. package/dist/types/modules/tournament/notification/jobs/notification.worker.d.ts +0 -9
  307. package/dist/types/modules/tournament/notification/jobs/notification.worker.d.ts.map +0 -1
  308. package/dist/types/modules/tournament/notification/notification.schedule.config.d.ts +0 -10
  309. package/dist/types/modules/tournament/notification/notification.schedule.config.d.ts.map +0 -1
  310. package/dist/types/modules/tournament/notification/notification.scheduler.service.d.ts +0 -10
  311. package/dist/types/modules/tournament/notification/notification.scheduler.service.d.ts.map +0 -1
@@ -47,8 +47,6 @@ 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");
52
50
  const events_common_methods_1 = require("@lyxa.ai/core/dist/utilities/events-common-methods");
53
51
  const TAG = 'marketing.seed.entire-menu';
54
52
  let SynchronizeProductMarketingService = class SynchronizeProductMarketingService {
@@ -200,116 +198,50 @@ let SynchronizeProductMarketingService = class SynchronizeProductMarketingServic
200
198
  const exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;
201
199
  const secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';
202
200
  const BATCH_SIZE = 500;
203
- const now = new Date();
204
201
  const results = [];
202
+ const totalBatches = Math.ceil(productIds.length / BATCH_SIZE);
205
203
  for (let i = 0; i < productIds.length; i += BATCH_SIZE) {
206
204
  const batchIds = productIds.slice(i, i + BATCH_SIZE);
207
- const batchResults = await this.productMarketingModel.aggregate([
208
- { $match: { product: { $in: batchIds }, deletedAt: null } },
205
+ const batchResults = await this.productModel.aggregate([
209
206
  {
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
- },
207
+ $match: {
208
+ _id: { $in: batchIds },
268
209
  },
269
210
  },
211
+ ...(0, product_pipeline_stages_1.addProductMarketingInfo)(exchangeRate, secondaryCurrencyName),
270
212
  {
271
213
  $group: {
272
- _id: '$product',
214
+ _id: '$_id',
273
215
  productMarketingInfo: {
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
- },
216
+ $push: '$productMarketing',
287
217
  },
288
218
  },
289
219
  },
290
220
  ]);
291
221
  results.push(...batchResults);
292
222
  }
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
- })),
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 },
308
240
  },
309
241
  },
310
- },
311
- }));
312
- await this.productModel.bulkWrite(bulkOps, { ordered: false });
242
+ };
243
+ });
244
+ await this.productModel.bulkWrite(bulkOps);
313
245
  return `Synchronized product marketing info for ${bulkOps.length} products`;
314
246
  }
315
247
  async syncProductMarketingInfoByMarketingIds(marketingIds) {
@@ -1 +1 @@
1
- {"version":3,"file":"synchronize-product-marketing.service.js","sourceRoot":"/","sources":["modules/marketing/services/synchronize-product-marketing.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { getLibraries } from '@lyxa.ai/core';\nimport { mongoose } from '@typegoose/typegoose';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {\n\tProductModel,\n\tProduct as Model,\n\tSetting,\n\tProductMarketingModel,\n\tProductMarketing,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport { addProductMarketingInfo } from '@lyxa.ai/core/dist/utilities/pipelines/product-pipeline-stages';\nimport { getRoundSecondaryCurrencyStage } from '@lyxa.ai/core/dist/utilities/pipelines/common-pipeline-functions';\nimport { MarketingType, ValueType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { publishAllProductsProductMarketingInfoProcessEvent } from '@lyxa.ai/core/dist/utilities/events-common-methods';\nimport { SynchronizeAllProductsProductMarketingInfoDTO } from '@lyxa.ai/core/dist/libraries/event/events/sync-all-products-product-marketing-info-event';\n\nconst TAG = 'marketing.seed.entire-menu';\n\n@Service()\nexport class SynchronizeProductMarketingService {\n\tprivate productModel: typeof ProductModel & SoftDeleteModel<Model>;\n\tprivate productMarketingModel: typeof ProductMarketingModel & SoftDeleteModel<ProductMarketing>;\n\n\tconstructor() {\n\t\tthis.productModel = ProductModel as typeof ProductModel & SoftDeleteModel<Model>;\n\t\tthis.productMarketingModel = ProductMarketingModel as typeof ProductMarketingModel &\n\t\t\tSoftDeleteModel<ProductMarketing>;\n\t}\n\n\tpublic async publishAllProductsProductMarketingInfoProcessEvent() {\n\t\tawait publishAllProductsProductMarketingInfoProcessEvent({});\n\t\treturn 'Processing all products product marketing information! ';\n\t}\n\n\tpublic processAllProductsProductMarketingInfoEvent(\n\t\tpayload: SynchronizeAllProductsProductMarketingInfoDTO\n\t): string {\n\t\tthis.syncAllProductsMarketingInfo();\n\t\treturn 'Processing all products product marketing information! ';\n\t}\n\n\tpublic syncAllProductsMarketingInfo = async (): Promise<any> => {\n\t\tconst logger = getLibraries().getLoggerKit();\n\t\tconst CHUNK_SIZE = 500;\n\n\t\tconst cursor = this.productModel.find().select('_id shop price priceBreakdowns').lean().cursor();\n\n\t\tconst adminSettings = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\t\tconst exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;\n\t\tconst secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';\n\n\t\tlet batch: any[] = [];\n\t\tlet batchIndex = 0;\n\t\tlet totalProcessed = 0;\n\n\t\tfor await (const product of cursor) {\n\t\t\tbatch.push(product);\n\n\t\t\tif (batch.length === CHUNK_SIZE) {\n\t\t\t\tbatchIndex++;\n\t\t\t\ttotalProcessed += batch.length;\n\t\t\t\tawait this.processProductsBatch(batch, exchangeRate, secondaryCurrencyName, batchIndex);\n\t\t\t\tbatch = [];\n\t\t\t}\n\t\t}\n\n\t\tif (batch.length) {\n\t\t\tbatchIndex++;\n\t\t\ttotalProcessed += batch.length;\n\t\t\tawait this.processProductsBatch(batch, exchangeRate, secondaryCurrencyName, batchIndex);\n\t\t}\n\n\t\tlogger.debug('full product marketing sync complete', {\n\t\t\ttag: TAG,\n\t\t\tdata: { totalProducts: totalProcessed },\n\t\t});\n\n\t\treturn 'Bulk product marketing info sync completed';\n\t};\n\n\tprivate async processProductsBatch(\n\t\tproductsBatch: any[],\n\t\texchangeRate: number,\n\t\tsecondaryCurrencyName: string,\n\t\tbatchIndex: number\n\t): Promise<void> {\n\t\tconst productIds = productsBatch.map(p => p._id);\n\n\t\tconst results = await this.productModel.aggregate([\n\t\t\t{ $match: { _id: { $in: productIds } } },\n\t\t\t...addProductMarketingInfo(exchangeRate, secondaryCurrencyName),\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$_id',\n\t\t\t\t\tproductMarketingInfo: { $push: '$productMarketing' },\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\n\t\tconst bulkOps = results.map(r => ({\n\t\t\tupdateOne: {\n\t\t\t\tfilter: { _id: r._id },\n\t\t\t\tupdate: {\n\t\t\t\t\t$set: {\n\t\t\t\t\t\tproductMarketingInfo: (r.productMarketingInfo ?? []).filter(Boolean).map((pm: any) => ({\n\t\t\t\t\t\t\tmarketing: pm.marketingInfo,\n\t\t\t\t\t\t\tisBuy1Get1: pm.isBuy1Get1,\n\t\t\t\t\t\t\tvalueType: pm.valueType,\n\t\t\t\t\t\t\tvalue: pm.value,\n\t\t\t\t\t\t\tsecondaryCurrencyValue: pm.secondaryCurrencyValue,\n\t\t\t\t\t\t\tlabel: pm.label,\n\t\t\t\t\t\t\tisAppliedByCompany: pm.isAppliedByCompany ?? false,\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}));\n\n\t\tif (bulkOps.length) {\n\t\t\tawait this.productModel.bulkWrite(bulkOps, { ordered: false });\n\t\t}\n\t}\n\n\tprivate async getProductMarketingInfoByProductId(productId: mongoose.Types.ObjectId): Promise<any[]> {\n\t\tconst adminSettings = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\n\t\tconst exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;\n\t\tconst secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';\n\n\t\tconst result = await this.productModel.aggregate([\n\t\t\t{\n\t\t\t\t$match: { _id: productId },\n\t\t\t},\n\t\t\t...addProductMarketingInfo(exchangeRate, secondaryCurrencyName),\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$_id',\n\t\t\t\t\tproductMarketingInfo: {\n\t\t\t\t\t\t$push: '$productMarketing',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\n\t\tconst productMarketingInfo = result?.[0]?.productMarketing\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tmarketing: result?.[0].productMarketing.marketingInfo,\n\t\t\t\t\t\tisBuy1Get1: result?.[0].productMarketing.isBuy1Get1,\n\t\t\t\t\t\tvalueType: result?.[0].productMarketing.valueType,\n\t\t\t\t\t\tvalue: result?.[0].productMarketing.value,\n\t\t\t\t\t\tsecondaryCurrencyValue: result?.[0].productMarketing.secondaryCurrencyValue,\n\t\t\t\t\t\tlabel: result?.[0].productMarketing.label,\n\t\t\t\t\t\tisAppliedByCompany: result?.[0].productMarketing.isAppliedByCompany ?? false,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: [];\n\n\t\treturn productMarketingInfo;\n\t}\n\n\tpublic async syncProductMarketingInfoByProductId(productId: mongoose.Types.ObjectId) {\n\t\tconst adminSettings = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\t\tconst exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;\n\n\t\tconst secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';\n\t\tconst result = await this.productModel.aggregate([\n\t\t\t{\n\t\t\t\t$match: {\n\t\t\t\t\t_id: productId,\n\t\t\t\t},\n\t\t\t},\n\t\t\t...addProductMarketingInfo(exchangeRate, secondaryCurrencyName),\n\t\t]);\n\n\t\tconst productMarketingInfo = (result || [])\n\t\t\t.filter(item => item?.productMarketing)\n\t\t\t.map(item => ({\n\t\t\t\tmarketing: item.productMarketing.marketingInfo,\n\t\t\t\tisBuy1Get1: item.productMarketing.isBuy1Get1,\n\t\t\t\tvalueType: item.productMarketing.valueType,\n\t\t\t\tvalue: item.productMarketing.value,\n\t\t\t\tsecondaryCurrencyValue: item.productMarketing.secondaryCurrencyValue,\n\t\t\t\tlabel: item.productMarketing.label,\n\t\t\t\tisAppliedByCompany: item.productMarketing.isAppliedByCompany ?? false,\n\t\t\t}));\n\n\t\tawait this.productModel.updateOne(\n\t\t\t{ _id: productId },\n\t\t\t{\n\t\t\t\t$set: {\n\t\t\t\t\tproductMarketingInfo,\n\t\t\t\t},\n\t\t\t}\n\t\t);\n\t\treturn 'Synchronized product marketing info';\n\t}\n\n\tpublic async syncProductMarketingInfoByProductIds(productIds: mongoose.Types.ObjectId[]) {\n\t\tif (!productIds.length) return 'No products to sync';\n\n\t\tconst adminSettings = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\t\tconst exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;\n\t\tconst secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';\n\n\t\tconst BATCH_SIZE = 500;\n\t\tconst now = new Date();\n\t\tconst results: any[] = [];\n\n\t\tfor (let i = 0; i < productIds.length; i += BATCH_SIZE) {\n\t\t\tconst batchIds = productIds.slice(i, i + BATCH_SIZE);\n\n\t\t\t// Inverted join: scan productMarketings once per batch (grouped by product) instead of\n\t\t\t// one correlated $lookup per product (the old product-first addProductMarketingInfo path).\n\t\t\tconst batchResults = await this.productMarketingModel.aggregate([\n\t\t\t\t{ $match: { product: { $in: batchIds }, deletedAt: null } },\n\t\t\t\t{\n\t\t\t\t\t$lookup: {\n\t\t\t\t\t\tfrom: 'marketings',\n\t\t\t\t\t\tlet: { mid: '$marketing' },\n\t\t\t\t\t\tpipeline: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$match: {\n\t\t\t\t\t\t\t\t\t$expr: { $eq: ['$_id', '$$mid'] }, // joins on indexed _id\n\t\t\t\t\t\t\t\t\tstatus: 'active',\n\t\t\t\t\t\t\t\t\t'duration.start': { $lte: now },\n\t\t\t\t\t\t\t\t\t'duration.end': { $gte: now },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ $project: { marketingType: 1, duration: 1, isAppliedByCompany: 1 } },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tas: 'marketing',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $unwind: '$marketing' }, // drops productMarketings whose marketing isn't active\n\t\t\t\t{\n\t\t\t\t\t$addFields: {\n\t\t\t\t\t\tsecondaryCurrencyValue: {\n\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t{ $eq: ['$valueType', 'fixed'] },\n\t\t\t\t\t\t\t\tgetRoundSecondaryCurrencyStage({ $multiply: ['$value', exchangeRate] }),\n\t\t\t\t\t\t\t\t'$$REMOVE',\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$addFields: {\n\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\t$switch: {\n\t\t\t\t\t\t\t\tbranches: [\n\t\t\t\t\t\t\t\t\t{ case: { $eq: ['$marketing.marketingType', MarketingType.BUY1GET1] }, then: 'Buy 1 Get 1' },\n\t\t\t\t\t\t\t\t\t{ case: { $eq: ['$marketing.marketingType', MarketingType.PUNCH_MARKETING] }, then: 'Punch' },\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$marketing.marketingType', MarketingType.DISCOUNT] },\n\t\t\t\t\t\t\t\t\t\tthen: {\n\t\t\t\t\t\t\t\t\t\t\t$switch: {\n\t\t\t\t\t\t\t\t\t\t\t\tbranches: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$valueType', ValueType.FIXED] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthen: { $concat: [secondaryCurrencyName, ' ', { $toString: '$secondaryCurrencyValue' }] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$valueType', ValueType.PERCENTAGE] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthen: { $concat: [{ $toString: '$value' }, '%'] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\tdefault: 'Discount',\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdefault: '$marketing.marketingType',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: '$product',\n\t\t\t\t\t\tproductMarketingInfo: {\n\t\t\t\t\t\t\t$push: {\n\t\t\t\t\t\t\t\tmarketing: {\n\t\t\t\t\t\t\t\t\t_id: '$marketing._id',\n\t\t\t\t\t\t\t\t\tmarketingType: '$marketing.marketingType',\n\t\t\t\t\t\t\t\t\tduration: '$marketing.duration',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tisBuy1Get1: '$isBuy1Get1',\n\t\t\t\t\t\t\t\tvalueType: '$valueType',\n\t\t\t\t\t\t\t\tvalue: '$value',\n\t\t\t\t\t\t\t\tsecondaryCurrencyValue: '$secondaryCurrencyValue',\n\t\t\t\t\t\t\t\tlabel: '$label',\n\t\t\t\t\t\t\t\tisAppliedByCompany: '$marketing.isAppliedByCompany',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\tresults.push(...batchResults);\n\t\t}\n\n\t\t// Products with no active marketing left aren't returned by the aggregate above, so reset\n\t\t// them to [] explicitly — keeps the recompute self-healing for the delete/update callers.\n\t\tconst byProduct = new Map<string, any[]>(results.map(r => [r._id.toString(), r.productMarketingInfo ?? []]));\n\n\t\tconst bulkOps = productIds.map(productId => ({\n\t\t\tupdateOne: {\n\t\t\t\tfilter: { _id: productId },\n\t\t\t\tupdate: {\n\t\t\t\t\t$set: {\n\t\t\t\t\t\tproductMarketingInfo: (byProduct.get(productId.toString()) ?? []).map((pm: any) => ({\n\t\t\t\t\t\t\tmarketing: pm.marketing,\n\t\t\t\t\t\t\tisBuy1Get1: pm.isBuy1Get1,\n\t\t\t\t\t\t\tvalueType: pm.valueType,\n\t\t\t\t\t\t\tvalue: pm.value,\n\t\t\t\t\t\t\tsecondaryCurrencyValue: pm.secondaryCurrencyValue,\n\t\t\t\t\t\t\tlabel: pm.label,\n\t\t\t\t\t\t\tisAppliedByCompany: pm.isAppliedByCompany ?? false,\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}));\n\n\t\tawait this.productModel.bulkWrite(bulkOps, { ordered: false });\n\n\t\treturn `Synchronized product marketing info for ${bulkOps.length} products`;\n\t}\n\n\tpublic async syncProductMarketingInfoByMarketingIds(marketingIds: mongoose.Types.ObjectId[]) {\n\t\tif (!marketingIds.length) return 'No marketings to sync';\n\n\t\tconst productsToUpdate = await this.productMarketingModel\n\t\t\t.find({ marketing: { $in: marketingIds } })\n\t\t\t.select('product')\n\t\t\t.lean();\n\t\tif (!productsToUpdate.length) return 'No matching products found';\n\n\t\tconst productIds = productsToUpdate.map(p => p.product._id);\n\t\treturn await this.syncProductMarketingInfoByProductIds(productIds);\n\t}\n}\n\nexport const synchronizeProductMarketingService = Container.get(SynchronizeProductMarketingService);\n"]}
1
+ {"version":3,"file":"synchronize-product-marketing.service.js","sourceRoot":"/","sources":["modules/marketing/services/synchronize-product-marketing.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { getLibraries } from '@lyxa.ai/core';\nimport { mongoose } from '@typegoose/typegoose';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {\n\tProductModel,\n\tProduct as Model,\n\tSetting,\n\tProductMarketingModel,\n\tProductMarketing,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport { addProductMarketingInfo } from '@lyxa.ai/core/dist/utilities/pipelines/product-pipeline-stages';\nimport { publishAllProductsProductMarketingInfoProcessEvent } from '@lyxa.ai/core/dist/utilities/events-common-methods';\nimport { SynchronizeAllProductsProductMarketingInfoDTO } from '@lyxa.ai/core/dist/libraries/event/events/sync-all-products-product-marketing-info-event';\n\nconst TAG = 'marketing.seed.entire-menu';\n\n@Service()\nexport class SynchronizeProductMarketingService {\n\tprivate productModel: typeof ProductModel & SoftDeleteModel<Model>;\n\tprivate productMarketingModel: typeof ProductMarketingModel & SoftDeleteModel<ProductMarketing>;\n\n\tconstructor() {\n\t\tthis.productModel = ProductModel as typeof ProductModel & SoftDeleteModel<Model>;\n\t\tthis.productMarketingModel = ProductMarketingModel as typeof ProductMarketingModel &\n\t\t\tSoftDeleteModel<ProductMarketing>;\n\t}\n\n\tpublic async publishAllProductsProductMarketingInfoProcessEvent() {\n\t\tawait publishAllProductsProductMarketingInfoProcessEvent({});\n\t\treturn 'Processing all products product marketing information! ';\n\t}\n\n\tpublic processAllProductsProductMarketingInfoEvent(\n\t\tpayload: SynchronizeAllProductsProductMarketingInfoDTO\n\t): string {\n\t\tthis.syncAllProductsMarketingInfo();\n\t\treturn 'Processing all products product marketing information! ';\n\t}\n\n\tpublic syncAllProductsMarketingInfo = async (): Promise<any> => {\n\t\tconst logger = getLibraries().getLoggerKit();\n\t\tconst CHUNK_SIZE = 500;\n\n\t\tconst cursor = this.productModel.find().select('_id shop price priceBreakdowns').lean().cursor();\n\n\t\tconst adminSettings = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\t\tconst exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;\n\t\tconst secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';\n\n\t\tlet batch: any[] = [];\n\t\tlet batchIndex = 0;\n\t\tlet totalProcessed = 0;\n\n\t\tfor await (const product of cursor) {\n\t\t\tbatch.push(product);\n\n\t\t\tif (batch.length === CHUNK_SIZE) {\n\t\t\t\tbatchIndex++;\n\t\t\t\ttotalProcessed += batch.length;\n\t\t\t\tawait this.processProductsBatch(batch, exchangeRate, secondaryCurrencyName, batchIndex);\n\t\t\t\tbatch = [];\n\t\t\t}\n\t\t}\n\n\t\tif (batch.length) {\n\t\t\tbatchIndex++;\n\t\t\ttotalProcessed += batch.length;\n\t\t\tawait this.processProductsBatch(batch, exchangeRate, secondaryCurrencyName, batchIndex);\n\t\t}\n\n\t\tlogger.debug('full product marketing sync complete', {\n\t\t\ttag: TAG,\n\t\t\tdata: { totalProducts: totalProcessed },\n\t\t});\n\n\t\treturn 'Bulk product marketing info sync completed';\n\t};\n\n\tprivate async processProductsBatch(\n\t\tproductsBatch: any[],\n\t\texchangeRate: number,\n\t\tsecondaryCurrencyName: string,\n\t\tbatchIndex: number\n\t): Promise<void> {\n\t\tconst productIds = productsBatch.map(p => p._id);\n\n\t\tconst results = await this.productModel.aggregate([\n\t\t\t{ $match: { _id: { $in: productIds } } },\n\t\t\t...addProductMarketingInfo(exchangeRate, secondaryCurrencyName),\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$_id',\n\t\t\t\t\tproductMarketingInfo: { $push: '$productMarketing' },\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\n\t\tconst bulkOps = results.map(r => ({\n\t\t\tupdateOne: {\n\t\t\t\tfilter: { _id: r._id },\n\t\t\t\tupdate: {\n\t\t\t\t\t$set: {\n\t\t\t\t\t\tproductMarketingInfo: (r.productMarketingInfo ?? []).filter(Boolean).map((pm: any) => ({\n\t\t\t\t\t\t\tmarketing: pm.marketingInfo,\n\t\t\t\t\t\t\tisBuy1Get1: pm.isBuy1Get1,\n\t\t\t\t\t\t\tvalueType: pm.valueType,\n\t\t\t\t\t\t\tvalue: pm.value,\n\t\t\t\t\t\t\tsecondaryCurrencyValue: pm.secondaryCurrencyValue,\n\t\t\t\t\t\t\tlabel: pm.label,\n\t\t\t\t\t\t\tisAppliedByCompany: pm.isAppliedByCompany ?? false,\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}));\n\n\t\tif (bulkOps.length) {\n\t\t\tawait this.productModel.bulkWrite(bulkOps, { ordered: false });\n\t\t}\n\t}\n\n\tprivate async getProductMarketingInfoByProductId(productId: mongoose.Types.ObjectId): Promise<any[]> {\n\t\tconst adminSettings = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\n\t\tconst exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;\n\t\tconst secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';\n\n\t\tconst result = await this.productModel.aggregate([\n\t\t\t{\n\t\t\t\t$match: { _id: productId },\n\t\t\t},\n\t\t\t...addProductMarketingInfo(exchangeRate, secondaryCurrencyName),\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$_id',\n\t\t\t\t\tproductMarketingInfo: {\n\t\t\t\t\t\t$push: '$productMarketing',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\n\t\tconst productMarketingInfo = result?.[0]?.productMarketing\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tmarketing: result?.[0].productMarketing.marketingInfo,\n\t\t\t\t\t\tisBuy1Get1: result?.[0].productMarketing.isBuy1Get1,\n\t\t\t\t\t\tvalueType: result?.[0].productMarketing.valueType,\n\t\t\t\t\t\tvalue: result?.[0].productMarketing.value,\n\t\t\t\t\t\tsecondaryCurrencyValue: result?.[0].productMarketing.secondaryCurrencyValue,\n\t\t\t\t\t\tlabel: result?.[0].productMarketing.label,\n\t\t\t\t\t\tisAppliedByCompany: result?.[0].productMarketing.isAppliedByCompany ?? false,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: [];\n\n\t\treturn productMarketingInfo;\n\t}\n\n\tpublic async syncProductMarketingInfoByProductId(productId: mongoose.Types.ObjectId) {\n\t\tconst adminSettings = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\t\tconst exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;\n\n\t\tconst secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';\n\t\tconst result = await this.productModel.aggregate([\n\t\t\t{\n\t\t\t\t$match: {\n\t\t\t\t\t_id: productId,\n\t\t\t\t},\n\t\t\t},\n\t\t\t...addProductMarketingInfo(exchangeRate, secondaryCurrencyName),\n\t\t]);\n\n\t\tconst productMarketingInfo = (result || [])\n\t\t\t.filter(item => item?.productMarketing)\n\t\t\t.map(item => ({\n\t\t\t\tmarketing: item.productMarketing.marketingInfo,\n\t\t\t\tisBuy1Get1: item.productMarketing.isBuy1Get1,\n\t\t\t\tvalueType: item.productMarketing.valueType,\n\t\t\t\tvalue: item.productMarketing.value,\n\t\t\t\tsecondaryCurrencyValue: item.productMarketing.secondaryCurrencyValue,\n\t\t\t\tlabel: item.productMarketing.label,\n\t\t\t\tisAppliedByCompany: item.productMarketing.isAppliedByCompany ?? false,\n\t\t\t}));\n\n\t\tawait this.productModel.updateOne(\n\t\t\t{ _id: productId },\n\t\t\t{\n\t\t\t\t$set: {\n\t\t\t\t\tproductMarketingInfo,\n\t\t\t\t},\n\t\t\t}\n\t\t);\n\t\treturn 'Synchronized product marketing info';\n\t}\n\n\tpublic async syncProductMarketingInfoByProductIds(productIds: mongoose.Types.ObjectId[]) {\n\t\tif (!productIds.length) return 'No products to sync';\n\n\t\tconst adminSettings = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\t\tconst exchangeRate = adminSettings?.currencySetting?.exchangeRate ?? 0;\n\t\tconst secondaryCurrencyName = adminSettings?.currencySetting?.secondaryCurrency?.name ?? 'LBP';\n\n\t\tconst BATCH_SIZE = 500;\n\t\tconst results: any[] = [];\n\t\tconst totalBatches = Math.ceil(productIds.length / BATCH_SIZE);\n\n\t\tfor (let i = 0; i < productIds.length; i += BATCH_SIZE) {\n\t\t\tconst batchIds = productIds.slice(i, i + BATCH_SIZE);\n\n\t\t\tconst batchResults = await this.productModel.aggregate([\n\t\t\t\t{\n\t\t\t\t\t$match: {\n\t\t\t\t\t\t_id: { $in: batchIds },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t...addProductMarketingInfo(exchangeRate, secondaryCurrencyName),\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: '$_id',\n\t\t\t\t\t\tproductMarketingInfo: {\n\t\t\t\t\t\t\t$push: '$productMarketing',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\tresults.push(...batchResults);\n\t\t}\n\n\t\tif (!results.length) return 'No matching products found';\n\n\t\tconst bulkOps = results.map(product => {\n\t\t\tconst productMarketingInfo = (product.productMarketingInfo || []).map((pm: any) => ({\n\t\t\t\tmarketing: pm.marketingInfo,\n\t\t\t\tisBuy1Get1: pm.isBuy1Get1,\n\t\t\t\tvalueType: pm.valueType,\n\t\t\t\tvalue: pm.value,\n\t\t\t\tsecondaryCurrencyValue: pm.secondaryCurrencyValue,\n\t\t\t\tlabel: pm.label,\n\t\t\t\tisAppliedByCompany: pm.isAppliedByCompany ?? false,\n\t\t\t}));\n\n\t\t\treturn {\n\t\t\t\tupdateOne: {\n\t\t\t\t\tfilter: { _id: product._id },\n\t\t\t\t\tupdate: {\n\t\t\t\t\t\t$set: { productMarketingInfo },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\tawait this.productModel.bulkWrite(bulkOps);\n\n\t\treturn `Synchronized product marketing info for ${bulkOps.length} products`;\n\t}\n\n\tpublic async syncProductMarketingInfoByMarketingIds(marketingIds: mongoose.Types.ObjectId[]) {\n\t\tif (!marketingIds.length) return 'No marketings to sync';\n\n\t\tconst productsToUpdate = await this.productMarketingModel\n\t\t\t.find({ marketing: { $in: marketingIds } })\n\t\t\t.select('product')\n\t\t\t.lean();\n\t\tif (!productsToUpdate.length) return 'No matching products found';\n\n\t\tconst productIds = productsToUpdate.map(p => p.product._id);\n\t\treturn await this.syncProductMarketingInfoByProductIds(productIds);\n\t}\n}\n\nexport const synchronizeProductMarketingService = Container.get(SynchronizeProductMarketingService);\n"]}
@@ -12,13 +12,13 @@ export declare const MarketingResponseSchema: z.ZodObject<{
12
12
  totalElements: z.ZodNumber;
13
13
  totalPages: z.ZodNumber;
14
14
  }, "strip", z.ZodTypeAny, {
15
- page: number;
16
15
  size: number;
16
+ page: number;
17
17
  totalElements: number;
18
18
  totalPages: number;
19
19
  }, {
20
- page: number;
21
20
  size: number;
21
+ page: number;
22
22
  totalElements: number;
23
23
  totalPages: number;
24
24
  }>>;
@@ -26,16 +26,16 @@ export declare const MarketingResponseSchema: z.ZodObject<{
26
26
  }, "strip", z.ZodTypeAny, {
27
27
  documents: any[];
28
28
  metadata?: {
29
- page: number;
30
29
  size: number;
30
+ page: number;
31
31
  totalElements: number;
32
32
  totalPages: number;
33
33
  } | undefined;
34
34
  }, {
35
35
  documents: any[];
36
36
  metadata?: {
37
- page: number;
38
37
  size: number;
38
+ page: number;
39
39
  totalElements: number;
40
40
  totalPages: number;
41
41
  } | undefined;
@@ -59,7 +59,6 @@ declare const Buy1Get1MarketingValidationSchema: z.ZodObject<{
59
59
  isAppliedByCompany: boolean;
60
60
  isEntireMenu: boolean;
61
61
  pausedAt: Date | null;
62
- marketingType: MarketingType.BUY1GET1;
63
62
  products: {
64
63
  product: import("mongoose").Types.ObjectId;
65
64
  value?: number | undefined;
@@ -68,6 +67,7 @@ declare const Buy1Get1MarketingValidationSchema: z.ZodObject<{
68
67
  marketing?: import("mongoose").Types.ObjectId | undefined;
69
68
  isBuy1Get1?: boolean | undefined;
70
69
  }[];
70
+ marketingType: MarketingType.BUY1GET1;
71
71
  excludeProducts: import("mongoose").Types.ObjectId[];
72
72
  isOnlyForSubscriber: boolean;
73
73
  admin?: import("mongoose").Types.ObjectId | null | undefined;
@@ -437,7 +437,6 @@ declare const Buy1Get1MarketingValidationSchemaRefined: z.ZodEffects<z.ZodObject
437
437
  isAppliedByCompany: boolean;
438
438
  isEntireMenu: boolean;
439
439
  pausedAt: Date | null;
440
- marketingType: MarketingType.BUY1GET1;
441
440
  products: {
442
441
  product: import("mongoose").Types.ObjectId;
443
442
  value?: number | undefined;
@@ -446,6 +445,7 @@ declare const Buy1Get1MarketingValidationSchemaRefined: z.ZodEffects<z.ZodObject
446
445
  marketing?: import("mongoose").Types.ObjectId | undefined;
447
446
  isBuy1Get1?: boolean | undefined;
448
447
  }[];
448
+ marketingType: MarketingType.BUY1GET1;
449
449
  excludeProducts: import("mongoose").Types.ObjectId[];
450
450
  isOnlyForSubscriber: boolean;
451
451
  admin?: import("mongoose").Types.ObjectId | null | undefined;
@@ -487,7 +487,6 @@ declare const Buy1Get1MarketingValidationSchemaRefined: z.ZodEffects<z.ZodObject
487
487
  isAppliedByCompany: boolean;
488
488
  isEntireMenu: boolean;
489
489
  pausedAt: Date | null;
490
- marketingType: MarketingType.BUY1GET1;
491
490
  products: {
492
491
  product: import("mongoose").Types.ObjectId;
493
492
  value?: number | undefined;
@@ -496,6 +495,7 @@ declare const Buy1Get1MarketingValidationSchemaRefined: z.ZodEffects<z.ZodObject
496
495
  marketing?: import("mongoose").Types.ObjectId | undefined;
497
496
  isBuy1Get1?: boolean | undefined;
498
497
  }[];
498
+ marketingType: MarketingType.BUY1GET1;
499
499
  excludeProducts: import("mongoose").Types.ObjectId[];
500
500
  isOnlyForSubscriber: boolean;
501
501
  admin?: import("mongoose").Types.ObjectId | null | undefined;
@@ -67,7 +67,6 @@ declare const DiscountMarketingValidationSchema: z.ZodObject<{
67
67
  isMaxDiscountPerOrderEnabled: boolean;
68
68
  maxDiscountPerOrder: number;
69
69
  pausedAt: Date | null;
70
- marketingType: MarketingType.DISCOUNT;
71
70
  products: {
72
71
  product: import("mongoose").Types.ObjectId;
73
72
  value?: number | undefined;
@@ -76,6 +75,7 @@ declare const DiscountMarketingValidationSchema: z.ZodObject<{
76
75
  marketing?: import("mongoose").Types.ObjectId | undefined;
77
76
  isBuy1Get1?: boolean | undefined;
78
77
  }[];
78
+ marketingType: MarketingType.DISCOUNT;
79
79
  excludeProducts: import("mongoose").Types.ObjectId[];
80
80
  isOnlyForSubscriber: boolean;
81
81
  value?: number | undefined;
@@ -337,7 +337,6 @@ declare const DiscountMarketingValidationSchemaRefined: z.ZodEffects<z.ZodObject
337
337
  isMaxDiscountPerOrderEnabled: boolean;
338
338
  maxDiscountPerOrder: number;
339
339
  pausedAt: Date | null;
340
- marketingType: MarketingType.DISCOUNT;
341
340
  products: {
342
341
  product: import("mongoose").Types.ObjectId;
343
342
  value?: number | undefined;
@@ -346,6 +345,7 @@ declare const DiscountMarketingValidationSchemaRefined: z.ZodEffects<z.ZodObject
346
345
  marketing?: import("mongoose").Types.ObjectId | undefined;
347
346
  isBuy1Get1?: boolean | undefined;
348
347
  }[];
348
+ marketingType: MarketingType.DISCOUNT;
349
349
  excludeProducts: import("mongoose").Types.ObjectId[];
350
350
  isOnlyForSubscriber: boolean;
351
351
  value?: number | undefined;
@@ -399,7 +399,6 @@ declare const DiscountMarketingValidationSchemaRefined: z.ZodEffects<z.ZodObject
399
399
  isMaxDiscountPerOrderEnabled: boolean;
400
400
  maxDiscountPerOrder: number;
401
401
  pausedAt: Date | null;
402
- marketingType: MarketingType.DISCOUNT;
403
402
  products: {
404
403
  product: import("mongoose").Types.ObjectId;
405
404
  value?: number | undefined;
@@ -408,6 +407,7 @@ declare const DiscountMarketingValidationSchemaRefined: z.ZodEffects<z.ZodObject
408
407
  marketing?: import("mongoose").Types.ObjectId | undefined;
409
408
  isBuy1Get1?: boolean | undefined;
410
409
  }[];
410
+ marketingType: MarketingType.DISCOUNT;
411
411
  excludeProducts: import("mongoose").Types.ObjectId[];
412
412
  isOnlyForSubscriber: boolean;
413
413
  value?: number | undefined;
@@ -197,6 +197,13 @@ export declare const SpendToGetProgressInputSchema: z.ZodObject<{
197
197
  basketTotal: number;
198
198
  userId?: string | import("mongoose").Types.ObjectId | undefined;
199
199
  }>;
200
+ export declare const SpendToGetTiersInputSchema: z.ZodObject<{
201
+ shop: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>;
202
+ }, "strip", z.ZodTypeAny, {
203
+ shop: import("mongoose").Types.ObjectId;
204
+ }, {
205
+ shop: string | import("mongoose").Types.ObjectId;
206
+ }>;
200
207
  export declare const MarketingSpendLimitsEvaluationSchema: z.ZodObject<{
201
208
  marketings: z.ZodArray<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>, "many">;
202
209
  }, "strip", z.ZodTypeAny, {
@@ -324,6 +331,7 @@ export type MarketingDTO = DTO<typeof MarketingSchema>;
324
331
  export type UpdateMarketingDTO = DTO<typeof UpdateMarketingSchema>;
325
332
  export type ProductEntireMenuMarketingHandlerDTO = DTO<typeof ProductEntireMenuMarketingHandlerSchema>;
326
333
  export type SpendToGetProgressInputDTO = DTO<typeof SpendToGetProgressInputSchema>;
334
+ export type SpendToGetTiersInputDTO = DTO<typeof SpendToGetTiersInputSchema>;
327
335
  export type IncreaseDuringDiscountDTO = DTO<typeof IncreaseDuringDiscountSchema>;
328
336
  export type MarketingMetricsDTO = DTO<typeof MarketingMetricsSchema>;
329
337
  export type MarketingGraphInputDTO = DTO<typeof MarketingGraphInputSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"marketing.validation.d.ts","sourceRoot":"/","sources":["modules/marketing/validations/marketing.validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGN,GAAG,EACH,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAO9F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CAQ/B,CAAC;AAYF,QAAA,MACa,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACvB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCACnB,iBAAiB,mNACb,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCACgB,CAAC;AAKrD,OAAO,EACN,yBAAyB,EACzB,eAAe,EACf,iBAAiB,IAAI,2BAA2B,EAChD,qBAAqB,GACrB,CAAC;AAEF,eAAO,MAAM,uCAAuC;;;;;;;;;EAGlD,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;EAIxC,CAAC;AAEH,eAAO,MAAM,oCAAoC;;;;;;EAE/C,CAAC;AAEH,eAAO,MAAM,6CAA6C;;;;;;EAExD,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;EAKvC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;EAKpC,CAAC;AAEH,eAAO,MAAM,gCAAgC;;;;;;;;;WAK5C,CAAC;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;WAK/C,CAAC;AAEF,eAAO,MAAM,qCAAqC;;;;;;;;;WAKjD,CAAC;AAKF,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC;AACvD,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,oCAAoC,GAAG,GAAG,CAAC,OAAO,uCAAuC,CAAC,CAAC;AACvG,MAAM,MAAM,0BAA0B,GAAG,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACnF,MAAM,MAAM,yBAAyB,GAAG,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC;AACjF,MAAM,MAAM,mBAAmB,GAAG,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACrE,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC3E,MAAM,MAAM,6BAA6B,GAAG,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC;AACzF,MAAM,MAAM,gCAAgC,GAAG,GAAG,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAC/F,MAAM,MAAM,kCAAkC,GAAG,GAAG,CAAC,OAAO,qCAAqC,CAAC,CAAC"}
1
+ {"version":3,"file":"marketing.validation.d.ts","sourceRoot":"/","sources":["modules/marketing/validations/marketing.validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGN,GAAG,EACH,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAO9F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CAQ/B,CAAC;AAYF,QAAA,MACa,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACvB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCACnB,iBAAiB,mNACb,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCACgB,CAAC;AAKrD,OAAO,EACN,yBAAyB,EACzB,eAAe,EACf,iBAAiB,IAAI,2BAA2B,EAChD,qBAAqB,GACrB,CAAC;AAEF,eAAO,MAAM,uCAAuC;;;;;;;;;EAGlD,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;EAIxC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;EAErC,CAAC;AAEH,eAAO,MAAM,oCAAoC;;;;;;EAE/C,CAAC;AAEH,eAAO,MAAM,6CAA6C;;;;;;EAExD,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;EAKvC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;EAKpC,CAAC;AAEH,eAAO,MAAM,gCAAgC;;;;;;;;;WAK5C,CAAC;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;WAK/C,CAAC;AAEF,eAAO,MAAM,qCAAqC;;;;;;;;;WAKjD,CAAC;AAKF,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC;AACvD,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,oCAAoC,GAAG,GAAG,CAAC,OAAO,uCAAuC,CAAC,CAAC;AACvG,MAAM,MAAM,0BAA0B,GAAG,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACnF,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC7E,MAAM,MAAM,yBAAyB,GAAG,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC;AACjF,MAAM,MAAM,mBAAmB,GAAG,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACrE,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC3E,MAAM,MAAM,6BAA6B,GAAG,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC;AACzF,MAAM,MAAM,gCAAgC,GAAG,GAAG,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAC/F,MAAM,MAAM,kCAAkC,GAAG,GAAG,CAAC,OAAO,qCAAqC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MarketingAmountSpentGraphOutputSchema = exports.MarketingCustomersGraphOutputSchema = exports.MarketingOrdersGraphOutputSchema = exports.MarketingGraphInputSchema = exports.MarketingMetricsSchema = exports.IncreaseDuringDiscountSchema = exports.SyncProductMarketingForMultipleProductsSchema = exports.MarketingSpendLimitsEvaluationSchema = exports.SpendToGetProgressInputSchema = exports.ProductEntireMenuMarketingHandlerSchema = exports.UpdateMarketingSchema = exports.MarketingIdValidationSchema = exports.MarketingSchema = exports.MarketingValidationSchema = exports.baseMarketingFields = void 0;
3
+ exports.MarketingAmountSpentGraphOutputSchema = exports.MarketingCustomersGraphOutputSchema = exports.MarketingOrdersGraphOutputSchema = exports.MarketingGraphInputSchema = exports.MarketingMetricsSchema = exports.IncreaseDuringDiscountSchema = exports.SyncProductMarketingForMultipleProductsSchema = exports.MarketingSpendLimitsEvaluationSchema = exports.SpendToGetTiersInputSchema = exports.SpendToGetProgressInputSchema = exports.ProductEntireMenuMarketingHandlerSchema = exports.UpdateMarketingSchema = exports.MarketingIdValidationSchema = exports.MarketingSchema = exports.MarketingValidationSchema = exports.baseMarketingFields = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const global_validation_1 = require("@lyxa.ai/core/dist/utilities/validation/global-validation");
6
6
  const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
@@ -30,6 +30,9 @@ exports.SpendToGetProgressInputSchema = zod_1.z.object({
30
30
  basketTotal: global_validation_1.ZodValidation.number('Basket total', { isNonnegative: true }),
31
31
  userId: global_validation_1.ZodValidation.objectId('User').optional(),
32
32
  });
33
+ exports.SpendToGetTiersInputSchema = zod_1.z.object({
34
+ shop: global_validation_1.ZodValidation.objectId('Shop'),
35
+ });
33
36
  exports.MarketingSpendLimitsEvaluationSchema = zod_1.z.object({
34
37
  marketings: global_validation_1.ZodValidation.array(global_validation_1.ZodValidation.objectId('marketing'), 'marketings'),
35
38
  });
@@ -1 +1 @@
1
- {"version":3,"file":"marketing.validation.js","sourceRoot":"/","sources":["modules/marketing/validations/marketing.validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n\tZodValidation,\n\tcreateSchemaBuilder,\n\tDTO,\n} from '@lyxa.ai/core/dist/utilities/validation/global-validation';\nimport { GraphType, MarketingStatus, MarketingType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { DurationSchema } from '@lyxa.ai/core/dist/utilities/validation/common-validation';\nimport { dayjs } from '@lyxa.ai/core/dist/utilities/dayjs';\n\n/**\n * Define the base parent schema fields\n */\nexport const baseMarketingFields = {\n\tshop: ZodValidation.objectId('Shop'),\n\tmarketingType: ZodValidation.enumType(MarketingType, 'Marketing type'),\n\tisAppliedByCompany: ZodValidation.boolean('isAppliedByCompany'),\n\tduration: DurationSchema,\n\tstatus: ZodValidation.enumType(MarketingStatus, 'Marketing status').default(MarketingStatus.ACTIVE),\n\tpausedAt: ZodValidation.date('Paused at').optional().nullable().default(null),\n\tadmin: ZodValidation.objectId('Admin').optional().nullable(),\n};\n\n/**\n * Create schema builder for Parent entity\n * - Includes timestamps\n * - Excludes 'createdAt' from update operations\n */\nconst schemaBuilder = createSchemaBuilder(baseMarketingFields);\n\n/**\n * Get all schemas for the Parent entity\n */\nconst {\n\tBaseSchema: MarketingValidationSchema,\n\tEntitySchema: MarketingSchema,\n\tIdSchema: MarketingIdSchema,\n\tUpdateSchema: UpdateMarketingSchema,\n} = schemaBuilder.getAllSchemas({ createdAt: true });\n\n/**\n * Export schemas\n */\nexport {\n\tMarketingValidationSchema,\n\tMarketingSchema,\n\tMarketingIdSchema as MarketingIdValidationSchema,\n\tUpdateMarketingSchema,\n};\n\nexport const ProductEntireMenuMarketingHandlerSchema = z.object({\n\tproduct: ZodValidation.objectId('Product'),\n\tshop: ZodValidation.objectId('Shop'),\n});\n\nexport const SpendToGetProgressInputSchema = z.object({\n\tshop: ZodValidation.objectId('Shop'),\n\tbasketTotal: ZodValidation.number('Basket total', { isNonnegative: true }),\n\tuserId: ZodValidation.objectId('User').optional(),\n});\n\nexport const MarketingSpendLimitsEvaluationSchema = z.object({\n\tmarketings: ZodValidation.array(ZodValidation.objectId('marketing'), 'marketings'),\n});\n\nexport const SyncProductMarketingForMultipleProductsSchema = z.object({\n\tproductIds: ZodValidation.array(ZodValidation.objectId('product id'), 'product ids'),\n});\n\nexport const IncreaseDuringDiscountSchema = z.object({\n\tcount: ZodValidation.number('Count of orders or customers during discount').optional().default(0),\n\tpercentageIncrease: ZodValidation.number('Percentage increase compared to previous duration')\n\t\t.optional()\n\t\t.default(0),\n});\n\nexport const MarketingMetricsSchema = z.object({\n\tnumberOfItems: ZodValidation.number('Number of items in the marketing').optional(),\n\torderIncreaseWithDiscount: IncreaseDuringDiscountSchema.optional(),\n\tcustomerIncreaseWithDiscount: IncreaseDuringDiscountSchema.optional(),\n\ttotalRedemptions: ZodValidation.number('Total redemptions').optional(),\n\ttotalValueGiven: ZodValidation.number('Total discount/free delivery value given').optional(),\n\tremainingBudget: ZodValidation.number('Remaining spend-limit budget').optional(),\n});\n\nexport const MarketingGraphInputSchema = z.object({\n\tmarketingId: ZodValidation.objectIdOrStringSchema,\n\tstartDate: ZodValidation.date('Start Date').transform(val => dayjs(val).startOf('day').toDate()),\n\tendDate: ZodValidation.date('End Date').transform(val => dayjs(val).endOf('day').toDate()),\n\ttype: ZodValidation.enumType(GraphType, 'Type').default(GraphType.DAILY),\n});\n\nexport const MarketingOrdersGraphOutputSchema = z.array(\n\tz.object({\n\t\tdate: ZodValidation.string('Date'),\n\t\torders: ZodValidation.number('Orders').default(0),\n\t})\n);\n\nexport const MarketingCustomersGraphOutputSchema = z.array(\n\tz.object({\n\t\tdate: ZodValidation.string('Date'),\n\t\tcustomers: ZodValidation.number('Customers').default(0),\n\t})\n);\n\nexport const MarketingAmountSpentGraphOutputSchema = z.array(\n\tz.object({\n\t\tdate: ZodValidation.string('Date'),\n\t\tamount: ZodValidation.number('Amount').default(0),\n\t})\n);\n\n/**\n * Export DTO types\n */\nexport type CreateMarketingDTO = DTO<typeof MarketingValidationSchema>;\nexport type MarketingDTO = DTO<typeof MarketingSchema>;\nexport type UpdateMarketingDTO = DTO<typeof UpdateMarketingSchema>;\nexport type ProductEntireMenuMarketingHandlerDTO = DTO<typeof ProductEntireMenuMarketingHandlerSchema>;\nexport type SpendToGetProgressInputDTO = DTO<typeof SpendToGetProgressInputSchema>;\nexport type IncreaseDuringDiscountDTO = DTO<typeof IncreaseDuringDiscountSchema>;\nexport type MarketingMetricsDTO = DTO<typeof MarketingMetricsSchema>;\nexport type MarketingGraphInputDTO = DTO<typeof MarketingGraphInputSchema>;\nexport type MarketingOrdersGraphOutputDTO = DTO<typeof MarketingOrdersGraphOutputSchema>;\nexport type MarketingCustomersGraphOutputDTO = DTO<typeof MarketingCustomersGraphOutputSchema>;\nexport type MarketingAmountSpentGraphOutputDTO = DTO<typeof MarketingAmountSpentGraphOutputSchema>;"]}
1
+ {"version":3,"file":"marketing.validation.js","sourceRoot":"/","sources":["modules/marketing/validations/marketing.validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n\tZodValidation,\n\tcreateSchemaBuilder,\n\tDTO,\n} from '@lyxa.ai/core/dist/utilities/validation/global-validation';\nimport { GraphType, MarketingStatus, MarketingType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { DurationSchema } from '@lyxa.ai/core/dist/utilities/validation/common-validation';\nimport { dayjs } from '@lyxa.ai/core/dist/utilities/dayjs';\n\n/**\n * Define the base parent schema fields\n */\nexport const baseMarketingFields = {\n\tshop: ZodValidation.objectId('Shop'),\n\tmarketingType: ZodValidation.enumType(MarketingType, 'Marketing type'),\n\tisAppliedByCompany: ZodValidation.boolean('isAppliedByCompany'),\n\tduration: DurationSchema,\n\tstatus: ZodValidation.enumType(MarketingStatus, 'Marketing status').default(MarketingStatus.ACTIVE),\n\tpausedAt: ZodValidation.date('Paused at').optional().nullable().default(null),\n\tadmin: ZodValidation.objectId('Admin').optional().nullable(),\n};\n\n/**\n * Create schema builder for Parent entity\n * - Includes timestamps\n * - Excludes 'createdAt' from update operations\n */\nconst schemaBuilder = createSchemaBuilder(baseMarketingFields);\n\n/**\n * Get all schemas for the Parent entity\n */\nconst {\n\tBaseSchema: MarketingValidationSchema,\n\tEntitySchema: MarketingSchema,\n\tIdSchema: MarketingIdSchema,\n\tUpdateSchema: UpdateMarketingSchema,\n} = schemaBuilder.getAllSchemas({ createdAt: true });\n\n/**\n * Export schemas\n */\nexport {\n\tMarketingValidationSchema,\n\tMarketingSchema,\n\tMarketingIdSchema as MarketingIdValidationSchema,\n\tUpdateMarketingSchema,\n};\n\nexport const ProductEntireMenuMarketingHandlerSchema = z.object({\n\tproduct: ZodValidation.objectId('Product'),\n\tshop: ZodValidation.objectId('Shop'),\n});\n\nexport const SpendToGetProgressInputSchema = z.object({\n\tshop: ZodValidation.objectId('Shop'),\n\tbasketTotal: ZodValidation.number('Basket total', { isNonnegative: true }),\n\tuserId: ZodValidation.objectId('User').optional(),\n});\n\nexport const SpendToGetTiersInputSchema = z.object({\n\tshop: ZodValidation.objectId('Shop'),\n});\n\nexport const MarketingSpendLimitsEvaluationSchema = z.object({\n\tmarketings: ZodValidation.array(ZodValidation.objectId('marketing'), 'marketings'),\n});\n\nexport const SyncProductMarketingForMultipleProductsSchema = z.object({\n\tproductIds: ZodValidation.array(ZodValidation.objectId('product id'), 'product ids'),\n});\n\nexport const IncreaseDuringDiscountSchema = z.object({\n\tcount: ZodValidation.number('Count of orders or customers during discount').optional().default(0),\n\tpercentageIncrease: ZodValidation.number('Percentage increase compared to previous duration')\n\t\t.optional()\n\t\t.default(0),\n});\n\nexport const MarketingMetricsSchema = z.object({\n\tnumberOfItems: ZodValidation.number('Number of items in the marketing').optional(),\n\torderIncreaseWithDiscount: IncreaseDuringDiscountSchema.optional(),\n\tcustomerIncreaseWithDiscount: IncreaseDuringDiscountSchema.optional(),\n\ttotalRedemptions: ZodValidation.number('Total redemptions').optional(),\n\ttotalValueGiven: ZodValidation.number('Total discount/free delivery value given').optional(),\n\tremainingBudget: ZodValidation.number('Remaining spend-limit budget').optional(),\n});\n\nexport const MarketingGraphInputSchema = z.object({\n\tmarketingId: ZodValidation.objectIdOrStringSchema,\n\tstartDate: ZodValidation.date('Start Date').transform(val => dayjs(val).startOf('day').toDate()),\n\tendDate: ZodValidation.date('End Date').transform(val => dayjs(val).endOf('day').toDate()),\n\ttype: ZodValidation.enumType(GraphType, 'Type').default(GraphType.DAILY),\n});\n\nexport const MarketingOrdersGraphOutputSchema = z.array(\n\tz.object({\n\t\tdate: ZodValidation.string('Date'),\n\t\torders: ZodValidation.number('Orders').default(0),\n\t})\n);\n\nexport const MarketingCustomersGraphOutputSchema = z.array(\n\tz.object({\n\t\tdate: ZodValidation.string('Date'),\n\t\tcustomers: ZodValidation.number('Customers').default(0),\n\t})\n);\n\nexport const MarketingAmountSpentGraphOutputSchema = z.array(\n\tz.object({\n\t\tdate: ZodValidation.string('Date'),\n\t\tamount: ZodValidation.number('Amount').default(0),\n\t})\n);\n\n/**\n * Export DTO types\n */\nexport type CreateMarketingDTO = DTO<typeof MarketingValidationSchema>;\nexport type MarketingDTO = DTO<typeof MarketingSchema>;\nexport type UpdateMarketingDTO = DTO<typeof UpdateMarketingSchema>;\nexport type ProductEntireMenuMarketingHandlerDTO = DTO<typeof ProductEntireMenuMarketingHandlerSchema>;\nexport type SpendToGetProgressInputDTO = DTO<typeof SpendToGetProgressInputSchema>;\nexport type SpendToGetTiersInputDTO = DTO<typeof SpendToGetTiersInputSchema>;\nexport type IncreaseDuringDiscountDTO = DTO<typeof IncreaseDuringDiscountSchema>;\nexport type MarketingMetricsDTO = DTO<typeof MarketingMetricsSchema>;\nexport type MarketingGraphInputDTO = DTO<typeof MarketingGraphInputSchema>;\nexport type MarketingOrdersGraphOutputDTO = DTO<typeof MarketingOrdersGraphOutputSchema>;\nexport type MarketingCustomersGraphOutputDTO = DTO<typeof MarketingCustomersGraphOutputSchema>;\nexport type MarketingAmountSpentGraphOutputDTO = DTO<typeof MarketingAmountSpentGraphOutputSchema>;"]}
@@ -187,13 +187,13 @@ export declare const BatchCreateProductMarketingsInputSchema: z.ZodObject<{
187
187
  shop: import("mongoose").Types.ObjectId;
188
188
  categories: import("mongoose").Types.ObjectId[];
189
189
  isEntireMenu: boolean;
190
- isBuy1Get1: boolean;
191
190
  products: {
192
191
  product: import("mongoose").Types.ObjectId;
193
192
  value?: number | undefined;
194
193
  valueType?: ValueType | null | undefined;
195
194
  }[];
196
195
  marketingId: import("mongoose").Types.ObjectId;
196
+ isBuy1Get1: boolean;
197
197
  value?: number | undefined;
198
198
  valueType?: ValueType | undefined;
199
199
  isAppliedByCompany?: boolean | undefined;
@@ -202,8 +202,8 @@ export declare const BatchCreateProductMarketingsInputSchema: z.ZodObject<{
202
202
  }, {
203
203
  shop: string | import("mongoose").Types.ObjectId;
204
204
  isEntireMenu: boolean;
205
- isBuy1Get1: boolean;
206
205
  marketingId: string | import("mongoose").Types.ObjectId;
206
+ isBuy1Get1: boolean;
207
207
  value?: number | undefined;
208
208
  valueType?: ValueType | undefined;
209
209
  categories?: (string | import("mongoose").Types.ObjectId)[] | undefined;
@@ -104,10 +104,10 @@ declare const PunchMarketingValidationSchema: z.ZodEffects<z.ZodObject<{
104
104
  end?: Date | undefined;
105
105
  };
106
106
  shop: import("mongoose").Types.ObjectId;
107
+ minimumOrderValue: number;
107
108
  isAppliedByCompany: boolean;
108
109
  pausedAt: Date | null;
109
110
  marketingType: MarketingType.PUNCH_MARKETING;
110
- minimumOrderValue: number;
111
111
  couponValueType: ValueType;
112
112
  couponValue: number;
113
113
  couponDurationInDays: number;
@@ -120,9 +120,9 @@ declare const PunchMarketingValidationSchema: z.ZodEffects<z.ZodObject<{
120
120
  end?: string | Date | undefined;
121
121
  };
122
122
  shop: string | import("mongoose").Types.ObjectId;
123
+ minimumOrderValue: number;
123
124
  isAppliedByCompany: boolean;
124
125
  marketingType: MarketingType.PUNCH_MARKETING;
125
- minimumOrderValue: number;
126
126
  couponValueType: ValueType;
127
127
  couponValue: number;
128
128
  couponDurationInDays: number;
@@ -138,10 +138,10 @@ declare const PunchMarketingValidationSchema: z.ZodEffects<z.ZodObject<{
138
138
  end?: Date | undefined;
139
139
  };
140
140
  shop: import("mongoose").Types.ObjectId;
141
+ minimumOrderValue: number;
141
142
  isAppliedByCompany: boolean;
142
143
  pausedAt: Date | null;
143
144
  marketingType: MarketingType.PUNCH_MARKETING;
144
- minimumOrderValue: number;
145
145
  couponValueType: ValueType;
146
146
  couponValue: number;
147
147
  couponDurationInDays: number;
@@ -154,9 +154,9 @@ declare const PunchMarketingValidationSchema: z.ZodEffects<z.ZodObject<{
154
154
  end?: string | Date | undefined;
155
155
  };
156
156
  shop: string | import("mongoose").Types.ObjectId;
157
+ minimumOrderValue: number;
157
158
  isAppliedByCompany: boolean;
158
159
  marketingType: MarketingType.PUNCH_MARKETING;
159
- minimumOrderValue: number;
160
160
  couponValueType: ValueType;
161
161
  couponValue: number;
162
162
  couponDurationInDays: number;