@lyxa.ai/marketing 1.0.67 → 1.0.69

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 (281) hide show
  1. package/dist/lib/index.d.ts +21 -11810
  2. package/dist/lib/index.d.ts.map +1 -1
  3. package/dist/lib/index.js +3 -1
  4. package/dist/lib/index.js.map +1 -1
  5. package/dist/lib/modules/coupon/routers/coupon.router.d.ts +1415 -7085
  6. package/dist/lib/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  7. package/dist/lib/modules/coupon/routers/coupon.router.js +37 -22
  8. package/dist/lib/modules/coupon/routers/coupon.router.js.map +1 -1
  9. package/dist/lib/modules/coupon/services/coupon.service.d.ts +41 -6
  10. package/dist/lib/modules/coupon/services/coupon.service.d.ts.map +1 -1
  11. package/dist/lib/modules/coupon/services/coupon.service.js +290 -93
  12. package/dist/lib/modules/coupon/services/coupon.service.js.map +1 -1
  13. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.d.ts.map +1 -1
  14. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js +11 -15
  15. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js.map +1 -1
  16. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.d.ts +30 -2
  17. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.d.ts.map +1 -1
  18. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js +494 -54
  19. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js.map +1 -1
  20. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  21. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js +1 -0
  22. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js.map +1 -1
  23. package/dist/lib/modules/coupon/transformers/coupon.transformer.d.ts +54 -2
  24. package/dist/lib/modules/coupon/transformers/coupon.transformer.d.ts.map +1 -1
  25. package/dist/lib/modules/coupon/validations/all-coupons.validation.d.ts +364 -3193
  26. package/dist/lib/modules/coupon/validations/all-coupons.validation.d.ts.map +1 -1
  27. package/dist/lib/modules/coupon/validations/all-coupons.validation.js +1 -2
  28. package/dist/lib/modules/coupon/validations/all-coupons.validation.js.map +1 -1
  29. package/dist/lib/modules/coupon/validations/coupon.validation.d.ts +580 -1
  30. package/dist/lib/modules/coupon/validations/coupon.validation.d.ts.map +1 -1
  31. package/dist/lib/modules/coupon/validations/coupon.validation.js +48 -1
  32. package/dist/lib/modules/coupon/validations/coupon.validation.js.map +1 -1
  33. package/dist/lib/modules/coupon/validations/create-coupon.validation.d.ts +116 -8
  34. package/dist/lib/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
  35. package/dist/lib/modules/coupon/validations/create-coupon.validation.js +4 -1
  36. package/dist/lib/modules/coupon/validations/create-coupon.validation.js.map +1 -1
  37. package/dist/lib/modules/coupon/validations/global-coupon.validation.d.ts +18 -0
  38. package/dist/lib/modules/coupon/validations/global-coupon.validation.d.ts.map +1 -1
  39. package/dist/lib/modules/coupon/validations/global-coupon.validation.js +2 -0
  40. package/dist/lib/modules/coupon/validations/global-coupon.validation.js.map +1 -1
  41. package/dist/lib/modules/coupon/validations/individual-store-coupon.validation.d.ts +18 -18
  42. package/dist/lib/modules/coupon/validations/individual-store-coupon.validation.js +2 -2
  43. package/dist/lib/modules/coupon/validations/individual-store-coupon.validation.js.map +1 -1
  44. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.d.ts +374 -0
  45. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.d.ts.map +1 -1
  46. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.js +2 -0
  47. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.js.map +1 -1
  48. package/dist/lib/modules/deal-setting/routers/deal-setting.router.d.ts +5 -5
  49. package/dist/lib/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  50. package/dist/lib/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  51. package/dist/lib/modules/deal-setting/services/deal-setting.service.js +4 -1
  52. package/dist/lib/modules/deal-setting/services/deal-setting.service.js.map +1 -1
  53. package/dist/lib/modules/featured-setting/routers/featured-setting.router.d.ts +5 -5
  54. package/dist/lib/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  55. package/dist/lib/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  56. package/dist/lib/modules/featured-setting/services/featured-setting.service.js +3 -0
  57. package/dist/lib/modules/featured-setting/services/featured-setting.service.js.map +1 -1
  58. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts +54 -8
  59. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  60. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js +13 -0
  61. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js.map +1 -1
  62. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  63. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js +9 -0
  64. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js.map +1 -1
  65. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
  66. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  67. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js +2 -6
  68. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js.map +1 -1
  69. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +16 -3
  70. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  71. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js +22 -3
  72. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js.map +1 -1
  73. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +2 -0
  74. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
  75. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js +12 -0
  76. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js.map +1 -1
  77. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +242 -35
  78. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  79. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js +19 -1
  80. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js.map +1 -1
  81. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +10 -1
  82. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  83. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js +83 -1
  84. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js.map +1 -1
  85. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +4 -0
  86. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  87. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js +75 -6
  88. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js.map +1 -1
  89. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
  90. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  91. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js +46 -19
  92. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js.map +1 -1
  93. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts +241 -10
  94. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  95. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts +2 -0
  96. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  97. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js +13 -4
  98. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js.map +1 -1
  99. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
  100. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js +1 -1
  101. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js.map +1 -1
  102. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +30 -3
  103. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
  104. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js +23 -1
  105. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js.map +1 -1
  106. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +18 -0
  107. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  108. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js +103 -0
  109. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js.map +1 -1
  110. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +187 -2
  111. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  112. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js +34 -0
  113. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js.map +1 -1
  114. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +1 -0
  115. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +1 -0
  116. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js +2 -0
  117. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js.map +1 -0
  118. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +515 -116
  119. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
  120. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js +16 -6
  121. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js.map +1 -1
  122. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +12 -4
  123. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -1
  124. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js +53 -7
  125. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js.map +1 -1
  126. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +19 -5
  127. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  128. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js +114 -16
  129. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js.map +1 -1
  130. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
  131. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js +1 -0
  132. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js.map +1 -1
  133. package/dist/lib/modules/marketing/routers/marketing.router.d.ts +5 -5
  134. package/dist/lib/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  135. package/dist/lib/modules/marketing/services/index.d.ts +1 -0
  136. package/dist/lib/modules/marketing/services/index.d.ts.map +1 -1
  137. package/dist/lib/modules/marketing/services/index.js +1 -0
  138. package/dist/lib/modules/marketing/services/index.js.map +1 -1
  139. package/dist/lib/modules/marketing/services/marketing.service.d.ts +7 -3
  140. package/dist/lib/modules/marketing/services/marketing.service.d.ts.map +1 -1
  141. package/dist/lib/modules/marketing/services/marketing.service.js +87 -19
  142. package/dist/lib/modules/marketing/services/marketing.service.js.map +1 -1
  143. package/dist/lib/modules/marketing/services/new-user-discount-marketing.service.d.ts +11 -0
  144. package/dist/lib/modules/marketing/services/new-user-discount-marketing.service.d.ts.map +1 -0
  145. package/dist/lib/modules/marketing/services/new-user-discount-marketing.service.js +116 -0
  146. package/dist/lib/modules/marketing/services/new-user-discount-marketing.service.js.map +1 -0
  147. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts +1 -0
  148. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  149. package/dist/lib/modules/marketing/services/product-marketing.service.js +32 -0
  150. package/dist/lib/modules/marketing/services/product-marketing.service.js.map +1 -1
  151. package/dist/lib/modules/marketing/validations/all-marketings.validation.d.ts.map +1 -1
  152. package/dist/lib/modules/marketing/validations/all-marketings.validation.js +3 -0
  153. package/dist/lib/modules/marketing/validations/all-marketings.validation.js.map +1 -1
  154. package/dist/lib/modules/marketing/validations/discount-marketing.validation.d.ts +6 -6
  155. package/dist/lib/modules/marketing/validations/index.d.ts +1 -0
  156. package/dist/lib/modules/marketing/validations/index.d.ts.map +1 -1
  157. package/dist/lib/modules/marketing/validations/index.js +1 -0
  158. package/dist/lib/modules/marketing/validations/index.js.map +1 -1
  159. package/dist/lib/modules/marketing/validations/new-user-discount-marketing.validation.d.ts +677 -0
  160. package/dist/lib/modules/marketing/validations/new-user-discount-marketing.validation.d.ts.map +1 -0
  161. package/dist/lib/modules/marketing/validations/new-user-discount-marketing.validation.js +83 -0
  162. package/dist/lib/modules/marketing/validations/new-user-discount-marketing.validation.js.map +1 -0
  163. package/dist/lib/modules/marketing/validations/punch-marketing.validation.d.ts +8 -8
  164. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.d.ts.map +1 -1
  165. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.js +30 -0
  166. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.js.map +1 -1
  167. package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +6 -6
  168. package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  169. package/dist/lib/modules/punch-marketing-history/validations/punch-marketing-history.validation.d.ts +2 -2
  170. package/dist/lib/modules/referral-setting/validations/referral-setting.validation.d.ts.map +1 -1
  171. package/dist/lib/modules/referral-setting/validations/referral-setting.validation.js.map +1 -1
  172. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +3 -2
  173. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -1
  174. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js +11 -3
  175. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js.map +1 -1
  176. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts +21 -5
  177. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -1
  178. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts +2 -2
  179. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -1
  180. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.js.map +1 -1
  181. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +19 -0
  182. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -1
  183. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js +1 -0
  184. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js.map +1 -1
  185. package/dist/types/index.d.ts +21 -11810
  186. package/dist/types/index.d.ts.map +1 -1
  187. package/dist/types/modules/coupon/routers/coupon.router.d.ts +1415 -7085
  188. package/dist/types/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  189. package/dist/types/modules/coupon/services/coupon.service.d.ts +41 -6
  190. package/dist/types/modules/coupon/services/coupon.service.d.ts.map +1 -1
  191. package/dist/types/modules/coupon/services/patterns/repository/CouponMetricsRepository.d.ts.map +1 -1
  192. package/dist/types/modules/coupon/services/patterns/repository/CouponRepository.d.ts +30 -2
  193. package/dist/types/modules/coupon/services/patterns/repository/CouponRepository.d.ts.map +1 -1
  194. package/dist/types/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  195. package/dist/types/modules/coupon/transformers/coupon.transformer.d.ts +54 -2
  196. package/dist/types/modules/coupon/transformers/coupon.transformer.d.ts.map +1 -1
  197. package/dist/types/modules/coupon/validations/all-coupons.validation.d.ts +364 -3193
  198. package/dist/types/modules/coupon/validations/all-coupons.validation.d.ts.map +1 -1
  199. package/dist/types/modules/coupon/validations/coupon.validation.d.ts +580 -1
  200. package/dist/types/modules/coupon/validations/coupon.validation.d.ts.map +1 -1
  201. package/dist/types/modules/coupon/validations/create-coupon.validation.d.ts +116 -8
  202. package/dist/types/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
  203. package/dist/types/modules/coupon/validations/global-coupon.validation.d.ts +18 -0
  204. package/dist/types/modules/coupon/validations/global-coupon.validation.d.ts.map +1 -1
  205. package/dist/types/modules/coupon/validations/individual-store-coupon.validation.d.ts +18 -18
  206. package/dist/types/modules/coupon/validations/referral-reward-coupon.validation.d.ts +374 -0
  207. package/dist/types/modules/coupon/validations/referral-reward-coupon.validation.d.ts.map +1 -1
  208. package/dist/types/modules/deal-setting/routers/deal-setting.router.d.ts +5 -5
  209. package/dist/types/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  210. package/dist/types/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  211. package/dist/types/modules/featured-setting/routers/featured-setting.router.d.ts +5 -5
  212. package/dist/types/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  213. package/dist/types/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  214. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts +54 -8
  215. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  216. package/dist/types/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  217. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
  218. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  219. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +16 -3
  220. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  221. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +2 -0
  222. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
  223. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +242 -35
  224. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  225. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +10 -1
  226. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  227. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +4 -0
  228. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  229. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
  230. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  231. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts +241 -10
  232. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  233. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts +2 -0
  234. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  235. package/dist/types/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
  236. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +30 -3
  237. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
  238. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +18 -0
  239. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  240. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +187 -2
  241. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  242. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +1 -0
  243. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +1 -0
  244. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +515 -116
  245. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
  246. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +12 -4
  247. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -1
  248. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +19 -5
  249. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  250. package/dist/types/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
  251. package/dist/types/modules/marketing/routers/marketing.router.d.ts +5 -5
  252. package/dist/types/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  253. package/dist/types/modules/marketing/services/index.d.ts +1 -0
  254. package/dist/types/modules/marketing/services/index.d.ts.map +1 -1
  255. package/dist/types/modules/marketing/services/marketing.service.d.ts +7 -3
  256. package/dist/types/modules/marketing/services/marketing.service.d.ts.map +1 -1
  257. package/dist/types/modules/marketing/services/new-user-discount-marketing.service.d.ts +20 -0
  258. package/dist/types/modules/marketing/services/new-user-discount-marketing.service.d.ts.map +1 -0
  259. package/dist/types/modules/marketing/services/product-marketing.service.d.ts +6 -0
  260. package/dist/types/modules/marketing/services/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/discount-marketing.validation.d.ts +6 -6
  263. package/dist/types/modules/marketing/validations/index.d.ts +1 -0
  264. package/dist/types/modules/marketing/validations/index.d.ts.map +1 -1
  265. package/dist/types/modules/marketing/validations/new-user-discount-marketing.validation.d.ts +686 -0
  266. package/dist/types/modules/marketing/validations/new-user-discount-marketing.validation.d.ts.map +1 -0
  267. package/dist/types/modules/marketing/validations/punch-marketing.validation.d.ts +8 -8
  268. package/dist/types/modules/marketing/validations/spend-to-get-marketing.validation.d.ts.map +1 -1
  269. package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +6 -6
  270. package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  271. package/dist/types/modules/punch-marketing-history/validations/punch-marketing-history.validation.d.ts +2 -2
  272. package/dist/types/modules/referral-setting/validations/referral-setting.validation.d.ts.map +1 -1
  273. package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +3 -2
  274. package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -1
  275. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts +21 -5
  276. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -1
  277. package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts +2 -2
  278. package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -1
  279. package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +19 -0
  280. package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -1
  281. package/package.json +2 -6
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-participant.validation.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/participant/limited-time-offer-participant.validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAuB,GAAG,EAAgB,MAAM,yCAAyC,CAAC;AAEjG,oBAAY,YAAY;IACpB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,MAAM,WAAW;CACpB;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgC5B,CAAC;AAEP,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;EAQhC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;EASnC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIlC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA0C,CAAC;AACjF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAgD,CAAC;AAE7F,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC3D,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC;AACzE,MAAM,MAAM,oBAAoB,GAAG,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACvE,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;AAGvF,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,GAAG;IAAC,SAAS,EAAE,qBAAqB,CAAC,aAAa,CAAC,CAAA;CAAC,CAAC"}
1
+ {"version":3,"file":"limited-time-offer-participant.validation.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/participant/limited-time-offer-participant.validation.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ParticipantStatusResponseSchema = exports.ParticipantResponseSchema = exports.ParticipantStatusSchema = exports.ParticipantSummarySchema = exports.CampaignSummarySchema = exports.ParticipantSchema = exports.JoinLtoCampaignSchema = exports.LtoCardState = void 0;
3
+ exports.AdminGetParticipantByShopSchema = exports.AdminWithdrawShopSchema = exports.AdminUpdateShopSchema = exports.AdminJoinParticipantsResponseSchema = exports.AdminEnrollShopsSchema = exports.AdminEnrollShopEntrySchema = exports.ParticipantStatusResponseSchema = exports.ParticipantResponseSchema = exports.ParticipantStatusSchema = exports.ParticipantSummarySchema = exports.CampaignSummarySchema = exports.ParticipantSchema = exports.JoinLtoCampaignSchema = exports.LtoCardState = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const validation_1 = require("@lyxa.ai/core/dist/utilities/validation");
6
6
  var LtoCardState;
@@ -10,8 +10,7 @@ var LtoCardState;
10
10
  LtoCardState["LIVE"] = "LIVE";
11
11
  LtoCardState["JOINED"] = "JOINED";
12
12
  })(LtoCardState || (exports.LtoCardState = LtoCardState = {}));
13
- exports.JoinLtoCampaignSchema = zod_1.z
14
- .object({
13
+ const joinLtoCampaignBase = zod_1.z.object({
15
14
  isEntireMenu: zod_1.z.boolean(),
16
15
  products: zod_1.z.array(validation_1.ZodValidation.objectId()).default([]),
17
16
  shopCategories: zod_1.z.array(validation_1.ZodValidation.objectId()).default([]),
@@ -19,8 +18,8 @@ exports.JoinLtoCampaignSchema = zod_1.z
19
18
  maxDiscountCap: validation_1.ZodValidation.number('Max discount cap'),
20
19
  isOrderCapacityEnabled: zod_1.z.boolean(),
21
20
  maxOrderCapacity: validation_1.ZodValidation.number('Max order capacity').optional(),
22
- })
23
- .superRefine((d, ctx) => {
21
+ });
22
+ const joinRefinement = (d, ctx) => {
24
23
  if (!d.isEntireMenu && d.products.length === 0 && d.shopCategories.length === 0) {
25
24
  ctx.addIssue({
26
25
  code: zod_1.z.ZodIssueCode.custom,
@@ -42,7 +41,8 @@ exports.JoinLtoCampaignSchema = zod_1.z
42
41
  path: ['maxOrderCapacity']
43
42
  });
44
43
  }
45
- });
44
+ };
45
+ exports.JoinLtoCampaignSchema = joinLtoCampaignBase.superRefine(joinRefinement);
46
46
  exports.ParticipantSchema = zod_1.z.object({
47
47
  _id: validation_1.ZodValidation.objectId(),
48
48
  campaign: validation_1.ZodValidation.objectId(),
@@ -85,4 +85,14 @@ exports.ParticipantStatusSchema = zod_1.z.object({
85
85
  });
86
86
  exports.ParticipantResponseSchema = (0, validation_1.createResponseSchema)(exports.ParticipantSchema);
87
87
  exports.ParticipantStatusResponseSchema = (0, validation_1.createResponseSchema)(exports.ParticipantStatusSchema);
88
+ exports.AdminEnrollShopEntrySchema = joinLtoCampaignBase
89
+ .extend({ shopId: validation_1.ZodValidation.objectId() })
90
+ .superRefine(joinRefinement);
91
+ exports.AdminEnrollShopsSchema = zod_1.z.object({
92
+ shops: zod_1.z.array(exports.AdminEnrollShopEntrySchema).min(1),
93
+ });
94
+ exports.AdminJoinParticipantsResponseSchema = (0, validation_1.createResponseSchema)(zod_1.z.array(exports.ParticipantSchema));
95
+ exports.AdminUpdateShopSchema = exports.AdminEnrollShopEntrySchema;
96
+ exports.AdminWithdrawShopSchema = zod_1.z.object({ shopId: validation_1.ZodValidation.objectId() });
97
+ exports.AdminGetParticipantByShopSchema = zod_1.z.object({ shopId: validation_1.ZodValidation.objectId() });
88
98
  //# sourceMappingURL=limited-time-offer-participant.validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-participant.validation.js","sourceRoot":"/","sources":["modules/limited-time-offer/participant/limited-time-offer-participant.validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {z} from 'zod';\nimport {createResponseSchema, DTO, ZodValidation} from '@lyxa.ai/core/dist/utilities/validation';\n\nexport enum LtoCardState {\n NONE = 'NONE',\n SCHEDULED = 'SCHEDULED',\n LIVE = 'LIVE',\n JOINED = 'JOINED',\n}\n\nexport const JoinLtoCampaignSchema = z\n .object({\n isEntireMenu: z.boolean(),\n products: z.array(ZodValidation.objectId()).default([]),\n shopCategories: z.array(ZodValidation.objectId()).default([]),\n discountPercentage: ZodValidation.number('Discount percentage'),\n maxDiscountCap: ZodValidation.number('Max discount cap'),\n isOrderCapacityEnabled: z.boolean(),\n maxOrderCapacity: ZodValidation.number('Max order capacity').optional(),\n })\n .superRefine((d, ctx) => {\n if (!d.isEntireMenu && d.products.length === 0 && d.shopCategories.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'At least one product or category must be selected',\n path: ['products']\n });\n }\n if (d.isOrderCapacityEnabled && !d.maxOrderCapacity) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Max order capacity is required when capacity is enabled',\n path: ['maxOrderCapacity']\n });\n }\n if (d.isOrderCapacityEnabled && d.maxOrderCapacity !== undefined && d.maxOrderCapacity <= 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Max order capacity must be greater than 0',\n path: ['maxOrderCapacity']\n });\n }\n });\n\nexport const ParticipantSchema = z.object({\n _id: ZodValidation.objectId(),\n campaign: ZodValidation.objectId(),\n shop: ZodValidation.objectId(),\n joinedAt: z.date(),\n products: z.array(ZodValidation.objectId()).default([]),\n isEntireMenu: z.boolean(),\n discountPercentage: ZodValidation.number('Discount percentage').optional(),\n maxDiscountCap: ZodValidation.number('Max discount cap').optional(),\n isOrderCapacityEnabled: z.boolean(),\n maxOrderCapacity: ZodValidation.number('Max order capacity').optional(),\n isWithdrawn: z.boolean(),\n withdrawnAt: z.date().nullable().optional(),\n createdAt: z.date().nullable().optional(),\n updatedAt: z.date().nullable().optional(),\n});\n\nexport const CampaignSummarySchema = z.object({\n _id: ZodValidation.objectId(),\n title: ZodValidation.string('Title').optional(),\n subTitle: ZodValidation.string('Subtitle').optional(),\n startDate: z.date().nullable().optional(),\n endDate: z.date().nullable().optional(),\n discountOptions: z.array(ZodValidation.number('Discount option')).default([]),\n maxDiscountCaps: z.array(ZodValidation.number('Max discount cap')).default([]),\n});\n\nexport const ParticipantSummarySchema = z.object({\n discountPercentage: ZodValidation.number('Discount percentage').optional(),\n maxDiscountCap: ZodValidation.number('Max discount cap').optional(),\n joinedAt: z.date(),\n isEntireMenu: z.boolean(),\n isOrderCapacityEnabled: z.boolean(),\n maxOrderCapacity: ZodValidation.number('Max order capacity').optional(),\n productIds: z.array(ZodValidation.objectId()).default([]),\n marketingId: ZodValidation.objectId().optional(),\n});\n\nexport const ParticipantStatusSchema = z.object({\n campaignState: z.nativeEnum(LtoCardState),\n campaign: CampaignSummarySchema.optional(),\n participant: ParticipantSummarySchema.optional(),\n});\n\nexport const ParticipantResponseSchema = createResponseSchema(ParticipantSchema);\nexport const ParticipantStatusResponseSchema = createResponseSchema(ParticipantStatusSchema);\n\nexport type JoinLtoCampaignDTO = DTO<typeof JoinLtoCampaignSchema>;\nexport type ParticipantDTO = DTO<typeof ParticipantSchema>;\nexport type CampaignSummaryDTO = DTO<typeof CampaignSummarySchema>;\nexport type ParticipantSummaryDTO = DTO<typeof ParticipantSummarySchema>;\nexport type ParticipantStatusDTO = DTO<typeof ParticipantStatusSchema>;\nexport type ActiveParticipantMarketingDTO = Pick<ParticipantSummaryDTO, 'marketingId'>;\n// shopCategories are intentionally excluded: the participant record does not persist category\n// selections — they live on the linked marketing doc and are derived from there for display.\nexport type UpdateParticipantDataDTO = Omit<JoinLtoCampaignDTO, 'shopCategories'> & {marketing: ParticipantSummaryDTO['marketingId']};\n"]}
1
+ {"version":3,"file":"limited-time-offer-participant.validation.js","sourceRoot":"/","sources":["modules/limited-time-offer/participant/limited-time-offer-participant.validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {z} from 'zod';\nimport {Types} from 'mongoose';\nimport {createResponseSchema, DTO, ZodValidation} from '@lyxa.ai/core/dist/utilities/validation';\n\nexport enum LtoCardState {\n NONE = 'NONE',\n SCHEDULED = 'SCHEDULED',\n LIVE = 'LIVE',\n JOINED = 'JOINED',\n}\n\nconst joinLtoCampaignBase = z.object({\n isEntireMenu: z.boolean(),\n products: z.array(ZodValidation.objectId()).default([]),\n shopCategories: z.array(ZodValidation.objectId()).default([]),\n discountPercentage: ZodValidation.number('Discount percentage'),\n maxDiscountCap: ZodValidation.number('Max discount cap'),\n isOrderCapacityEnabled: z.boolean(),\n maxOrderCapacity: ZodValidation.number('Max order capacity').optional(),\n});\n\ntype JoinLtoCampaignBase = z.infer<typeof joinLtoCampaignBase>;\n\nconst joinRefinement = (d: JoinLtoCampaignBase, ctx: z.RefinementCtx) => {\n if (!d.isEntireMenu && d.products.length === 0 && d.shopCategories.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'At least one product or category must be selected',\n path: ['products']\n });\n }\n if (d.isOrderCapacityEnabled && !d.maxOrderCapacity) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Max order capacity is required when capacity is enabled',\n path: ['maxOrderCapacity']\n });\n }\n if (d.isOrderCapacityEnabled && d.maxOrderCapacity !== undefined && d.maxOrderCapacity <= 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Max order capacity must be greater than 0',\n path: ['maxOrderCapacity']\n });\n }\n};\n\nexport const JoinLtoCampaignSchema = joinLtoCampaignBase.superRefine(joinRefinement);\n\nexport const ParticipantSchema = z.object({\n _id: ZodValidation.objectId(),\n campaign: ZodValidation.objectId(),\n shop: ZodValidation.objectId(),\n joinedAt: z.date(),\n products: z.array(ZodValidation.objectId()).default([]),\n isEntireMenu: z.boolean(),\n discountPercentage: ZodValidation.number('Discount percentage').optional(),\n maxDiscountCap: ZodValidation.number('Max discount cap').optional(),\n isOrderCapacityEnabled: z.boolean(),\n maxOrderCapacity: ZodValidation.number('Max order capacity').optional(),\n isWithdrawn: z.boolean(),\n withdrawnAt: z.date().nullable().optional(),\n createdAt: z.date().nullable().optional(),\n updatedAt: z.date().nullable().optional(),\n});\n\nexport const CampaignSummarySchema = z.object({\n _id: ZodValidation.objectId(),\n title: ZodValidation.string('Title').optional(),\n subTitle: ZodValidation.string('Subtitle').optional(),\n startDate: z.date().nullable().optional(),\n endDate: z.date().nullable().optional(),\n discountOptions: z.array(ZodValidation.number('Discount option')).default([]),\n maxDiscountCaps: z.array(ZodValidation.number('Max discount cap')).default([]),\n});\n\nexport const ParticipantSummarySchema = z.object({\n discountPercentage: ZodValidation.number('Discount percentage').optional(),\n maxDiscountCap: ZodValidation.number('Max discount cap').optional(),\n joinedAt: z.date(),\n isEntireMenu: z.boolean(),\n isOrderCapacityEnabled: z.boolean(),\n maxOrderCapacity: ZodValidation.number('Max order capacity').optional(),\n productIds: z.array(ZodValidation.objectId()).default([]),\n marketingId: ZodValidation.objectId().optional(),\n});\n\nexport const ParticipantStatusSchema = z.object({\n campaignState: z.nativeEnum(LtoCardState),\n campaign: CampaignSummarySchema.optional(),\n participant: ParticipantSummarySchema.optional(),\n});\n\nexport const ParticipantResponseSchema = createResponseSchema(ParticipantSchema);\nexport const ParticipantStatusResponseSchema = createResponseSchema(ParticipantStatusSchema);\n\nexport const AdminEnrollShopEntrySchema = joinLtoCampaignBase\n .extend({ shopId: ZodValidation.objectId() })\n .superRefine(joinRefinement);\n\nexport const AdminEnrollShopsSchema = z.object({\n shops: z.array(AdminEnrollShopEntrySchema).min(1),\n});\n\nexport const AdminJoinParticipantsResponseSchema = createResponseSchema(z.array(ParticipantSchema));\n\n// Admin edit reuses the enroll entry shape (shopId + join fields); withdraw and get-by-shop only need the shop.\nexport const AdminUpdateShopSchema = AdminEnrollShopEntrySchema;\nexport const AdminWithdrawShopSchema = z.object({shopId: ZodValidation.objectId()});\nexport const AdminGetParticipantByShopSchema = z.object({shopId: ZodValidation.objectId()});\n\nexport type AdminWithdrawShopDTO = DTO<typeof AdminWithdrawShopSchema>;\nexport type AdminEnrollShopEntryDTO = DTO<typeof AdminEnrollShopEntrySchema>;\nexport type AdminEnrollShopsDTO = DTO<typeof AdminEnrollShopsSchema>;\nexport type JoinLtoCampaignDTO = DTO<typeof JoinLtoCampaignSchema>;\nexport type ParticipantDTO = DTO<typeof ParticipantSchema>;\nexport type CampaignSummaryDTO = DTO<typeof CampaignSummarySchema>;\nexport type ParticipantSummaryDTO = DTO<typeof ParticipantSummarySchema>;\nexport type ParticipantStatusDTO = DTO<typeof ParticipantStatusSchema>;\nexport type ActiveParticipantMarketingDTO = Pick<ParticipantSummaryDTO, 'marketingId'>;\n// shopCategories are intentionally excluded: the participant record does not persist category\n// selections — they live on the linked marketing doc and are derived from there for display.\nexport type UpdateParticipantDataDTO = Omit<JoinLtoCampaignDTO, 'shopCategories'> & {\n marketing: ParticipantSummaryDTO['marketingId'];\n pausedMarketings?: Types.ObjectId[];\n pausedOrderCapacity?: number;\n pausedOrderCapacityEnabled?: boolean;\n};\n"]}
@@ -1,17 +1,25 @@
1
1
  import { mongoose } from '@typegoose/typegoose';
2
2
  import { LimitedTimeOfferCampaign } from '@lyxa.ai/core/dist/libraries/mongo/models';
3
+ import { MarketingType } from '@lyxa.ai/core/dist/utilities/enum';
3
4
  import { JoinLtoCampaignDTO } from '../limited-time-offer-participant.validation';
4
5
  export declare class LtoParticipantMarketingService {
5
6
  private repository;
6
7
  constructor();
7
- applyMarketing(shopId: mongoose.Types.ObjectId, campaign: LimitedTimeOfferCampaign & {
8
+ createMarketing(shopId: mongoose.Types.ObjectId, campaign: LimitedTimeOfferCampaign & {
8
9
  _id: mongoose.Types.ObjectId;
9
10
  }, dto: JoinLtoCampaignDTO): Promise<mongoose.Types.ObjectId>;
10
- removeMarketing(marketingId: mongoose.Types.ObjectId): Promise<void>;
11
- replaceMarketing(oldMarketingId: mongoose.Types.ObjectId, shopId: mongoose.Types.ObjectId, campaign: LimitedTimeOfferCampaign & {
11
+ pauseConflicts(shopId: mongoose.Types.ObjectId, dto: JoinLtoCampaignDTO): Promise<mongoose.Types.ObjectId[]>;
12
+ private pauseConflictingDiscounts;
13
+ applyMarketing(shopId: mongoose.Types.ObjectId, campaign: LimitedTimeOfferCampaign & {
12
14
  _id: mongoose.Types.ObjectId;
13
- }, dto: JoinLtoCampaignDTO): Promise<mongoose.Types.ObjectId>;
15
+ }, dto: JoinLtoCampaignDTO): Promise<{
16
+ marketingId: mongoose.Types.ObjectId;
17
+ pausedMarketingIds: mongoose.Types.ObjectId[];
18
+ }>;
19
+ removeMarketing(marketingId: mongoose.Types.ObjectId): Promise<void>;
14
20
  removeAllCampaignMarketings(campaignId: mongoose.Types.ObjectId): Promise<void>;
21
+ pauseActiveShopMarketings(shopId: mongoose.Types.ObjectId, marketingType: MarketingType): Promise<mongoose.Types.ObjectId[]>;
22
+ resumeMarketings(marketingIds: mongoose.Types.ObjectId[]): Promise<void>;
15
23
  }
16
24
  export declare const ltoParticipantMarketingService: LtoParticipantMarketingService;
17
25
  //# sourceMappingURL=limited-time-offer-participant-marketing.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-participant-marketing.service.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAC,wBAAwB,EAAC,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAC,kBAAkB,EAAC,MAAM,8CAA8C,CAAC;AAIhF,qBACa,8BAA8B;IACvC,OAAO,CAAC,UAAU,CAA2B;;IAMhC,cAAc,CACvB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,QAAQ,EAAE,wBAAwB,GAAG;QAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAA;KAAC,EACnE,GAAG,EAAE,kBAAkB,GACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IAOtB,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,gBAAgB,CACzB,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EACvC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,QAAQ,EAAE,wBAAwB,GAAG;QAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAA;KAAC,EACnE,GAAG,EAAE,kBAAkB,GACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IAKtB,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAI/F;AAED,eAAO,MAAM,8BAA8B,gCAAgD,CAAC"}
1
+ {"version":3,"file":"limited-time-offer-participant-marketing.service.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EAAC,wBAAwB,EAAC,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAkB,aAAa,EAAC,MAAM,mCAAmC,CAAC;AAGjF,OAAO,EAAC,kBAAkB,EAAC,MAAM,8CAA8C,CAAC;AAIhF,qBACa,8BAA8B;IACvC,OAAO,CAAC,UAAU,CAA2B;;IAShC,eAAe,CACxB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,QAAQ,EAAE,wBAAwB,GAAG;QAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAA;KAAC,EACnE,GAAG,EAAE,kBAAkB,GACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IAYtB,cAAc,CACvB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,GAAG,EAAE,kBAAkB,GACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAMvB,yBAAyB;IAa1B,cAAc,CACvB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,QAAQ,EAAE,wBAAwB,GAAG;QAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAA;KAAC,EACnE,GAAG,EAAE,kBAAkB,GACxB,OAAO,CAAC;QAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAC,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;KAAC,CAAC;IAYpF,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAapE,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/E,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAQ5H,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAQxF;AAED,eAAO,MAAM,8BAA8B,gCAAgD,CAAC"}
@@ -44,7 +44,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.ltoParticipantMarketingService = exports.LtoParticipantMarketingService = void 0;
46
46
  const typedi_1 = __importStar(require("typedi"));
47
+ const server_1 = require("@trpc/server");
47
48
  const services_1 = require("../../../marketing/services");
49
+ const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
48
50
  const limited_time_offer_participant_builder_1 = require("../limited-time-offer-participant.builder");
49
51
  const limited_time_offer_participant_repository_1 = require("../limited-time-offer-participant.repository");
50
52
  let LtoParticipantMarketingService = class LtoParticipantMarketingService {
@@ -52,21 +54,65 @@ let LtoParticipantMarketingService = class LtoParticipantMarketingService {
52
54
  constructor() {
53
55
  this.repository = typedi_1.default.get(limited_time_offer_participant_repository_1.LtoParticipantRepository);
54
56
  }
55
- async applyMarketing(shopId, campaign, dto) {
56
- const marketing = await services_1.marketingService.create(limited_time_offer_participant_builder_1.LtoParticipantQueryBuilder.buildMarketingInput(shopId, campaign, dto));
57
+ async createMarketing(shopId, campaign, dto) {
58
+ const marketing = await services_1.marketingService.create(limited_time_offer_participant_builder_1.LtoParticipantQueryBuilder.buildMarketingInput(shopId, campaign, dto), undefined, { skipLimitedTimeOfferGuard: true });
57
59
  return marketing._id;
58
60
  }
59
- async removeMarketing(marketingId) {
60
- await services_1.marketingService.deleteById({ _id: marketingId, softDelete: true });
61
+ async pauseConflicts(shopId, dto) {
62
+ const discountPausedIds = await this.pauseConflictingDiscounts(shopId, dto);
63
+ const spendToGetPausedIds = await this.pauseActiveShopMarketings(shopId, enum_1.MarketingType.SPEND_TO_GET);
64
+ return [...discountPausedIds, ...spendToGetPausedIds];
65
+ }
66
+ async pauseConflictingDiscounts(shopId, dto) {
67
+ if (dto.isEntireMenu) {
68
+ return this.pauseActiveShopMarketings(shopId, enum_1.MarketingType.DISCOUNT);
69
+ }
70
+ const productIds = dto.products ?? [];
71
+ return productIds.length ? services_1.productMarketingService.pauseConflictingMarketings(productIds) : [];
72
+ }
73
+ async applyMarketing(shopId, campaign, dto) {
74
+ const pausedMarketingIds = await this.pauseConflicts(shopId, dto);
75
+ try {
76
+ const marketingId = await this.createMarketing(shopId, campaign, dto);
77
+ return { marketingId, pausedMarketingIds };
78
+ }
79
+ catch (err) {
80
+ await this.resumeMarketings(pausedMarketingIds);
81
+ throw err;
82
+ }
61
83
  }
62
- async replaceMarketing(oldMarketingId, shopId, campaign, dto) {
63
- await this.removeMarketing(oldMarketingId);
64
- return this.applyMarketing(shopId, campaign, dto);
84
+ async removeMarketing(marketingId) {
85
+ try {
86
+ await services_1.marketingService.deleteById({ _id: marketingId, softDelete: true }, undefined, { skipLimitedTimeOfferGuard: true });
87
+ }
88
+ catch (err) {
89
+ if (err instanceof server_1.TRPCError && err.code === 'NOT_FOUND')
90
+ return;
91
+ throw err;
92
+ }
65
93
  }
66
94
  async removeAllCampaignMarketings(campaignId) {
67
95
  const marketingIds = await this.repository.findMarketingIdsByCampaign(campaignId);
68
96
  await services_1.marketingService.deleteManyByIds(marketingIds);
69
97
  }
98
+ async pauseActiveShopMarketings(shopId, marketingType) {
99
+ const ids = await this.repository.findActiveMarketingIdsByShop(shopId, marketingType);
100
+ if (!ids.length)
101
+ return [];
102
+ await this.repository.updateMarketingStatus(ids, enum_1.MarketingStatus.PAUSED);
103
+ await services_1.synchronizeProductMarketingService.syncProductMarketingInfoByMarketingIds(ids);
104
+ return ids;
105
+ }
106
+ async resumeMarketings(marketingIds) {
107
+ if (!marketingIds?.length)
108
+ return;
109
+ const revivable = await this.repository.findRevivableMarketings(marketingIds);
110
+ if (!revivable.length)
111
+ return;
112
+ const ids = revivable.map(m => m._id);
113
+ await this.repository.updateMarketingStatus(ids, enum_1.MarketingStatus.ACTIVE);
114
+ await services_1.synchronizeProductMarketingService.syncProductMarketingInfoByMarketingIds(ids);
115
+ }
70
116
  };
71
117
  exports.LtoParticipantMarketingService = LtoParticipantMarketingService;
72
118
  exports.LtoParticipantMarketingService = LtoParticipantMarketingService = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-participant-marketing.service.js","sourceRoot":"/","sources":["modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0C;AAE1C,0DAA6D;AAG7D,sGAAqF;AACrF,4GAAsF;AAG/E,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;IAC/B,UAAU,CAA2B;IAE7C;QACI,IAAI,CAAC,UAAU,GAAG,gBAAS,CAAC,GAAG,CAAC,oEAAwB,CAAC,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,cAAc,CACvB,MAA+B,EAC/B,QAAmE,EACnE,GAAuB;QAEvB,MAAM,SAAS,GAAG,MAAM,2BAAgB,CAAC,MAAM,CAC3C,mEAA0B,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CACxE,CAAC;QACF,OAAO,SAAS,CAAC,GAAG,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,WAAoC;QAC7D,MAAM,2BAAgB,CAAC,UAAU,CAAC,EAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;IAC5E,CAAC;IAEM,KAAK,CAAC,gBAAgB,CACzB,cAAuC,EACvC,MAA+B,EAC/B,QAAmE,EACnE,GAAuB;QAEvB,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAEM,KAAK,CAAC,2BAA2B,CAAC,UAAmC;QACxE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;QAClF,MAAM,2BAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;CACJ,CAAA;AApCY,wEAA8B;yCAA9B,8BAA8B;IAD1C,IAAA,gBAAO,GAAE;;GACG,8BAA8B,CAoC1C;AAEY,QAAA,8BAA8B,GAAG,gBAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC","sourcesContent":["import Container, {Service} from 'typedi';\nimport {mongoose} from '@typegoose/typegoose';\nimport {marketingService} from '@modules/marketing/services';\nimport {LimitedTimeOfferCampaign} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {JoinLtoCampaignDTO} from '../limited-time-offer-participant.validation';\nimport {LtoParticipantQueryBuilder} from '../limited-time-offer-participant.builder';\nimport {LtoParticipantRepository} from '../limited-time-offer-participant.repository';\n\n@Service()\nexport class LtoParticipantMarketingService {\n private repository: LtoParticipantRepository;\n\n constructor() {\n this.repository = Container.get(LtoParticipantRepository);\n }\n\n public async applyMarketing(\n shopId: mongoose.Types.ObjectId,\n campaign: LimitedTimeOfferCampaign & {_id: mongoose.Types.ObjectId},\n dto: JoinLtoCampaignDTO,\n ): Promise<mongoose.Types.ObjectId> {\n const marketing = await marketingService.create(\n LtoParticipantQueryBuilder.buildMarketingInput(shopId, campaign, dto),\n );\n return marketing._id;\n }\n\n public async removeMarketing(marketingId: mongoose.Types.ObjectId): Promise<void> {\n await marketingService.deleteById({_id: marketingId, softDelete: true});\n }\n\n public async replaceMarketing(\n oldMarketingId: mongoose.Types.ObjectId,\n shopId: mongoose.Types.ObjectId,\n campaign: LimitedTimeOfferCampaign & {_id: mongoose.Types.ObjectId},\n dto: JoinLtoCampaignDTO,\n ): Promise<mongoose.Types.ObjectId> {\n await this.removeMarketing(oldMarketingId);\n return this.applyMarketing(shopId, campaign, dto);\n }\n\n public async removeAllCampaignMarketings(campaignId: mongoose.Types.ObjectId): Promise<void> {\n const marketingIds = await this.repository.findMarketingIdsByCampaign(campaignId);\n await marketingService.deleteManyByIds(marketingIds);\n }\n}\n\nexport const ltoParticipantMarketingService = Container.get(LtoParticipantMarketingService);\n"]}
1
+ {"version":3,"file":"limited-time-offer-participant-marketing.service.js","sourceRoot":"/","sources":["modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, {Service} from 'typedi';\nimport {mongoose} from '@typegoose/typegoose';\nimport {TRPCError} from '@trpc/server';\nimport {marketingService, productMarketingService, synchronizeProductMarketingService} from '@modules/marketing/services';\nimport {LimitedTimeOfferCampaign} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {MarketingStatus, MarketingType} from '@lyxa.ai/core/dist/utilities/enum';\nimport {publishSyncSingleShopSectionsInCacheProcessEvent} from '@lyxa.ai/core/dist/utilities/events-common-methods';\nimport {ChangeStreamOperationTypes} from '@lyxa.ai/core/dist/libraries/event/events/mongo-stream-changes-batch-process-shops-event';\nimport {JoinLtoCampaignDTO} from '../limited-time-offer-participant.validation';\nimport {LtoParticipantQueryBuilder} from '../limited-time-offer-participant.builder';\nimport {LtoParticipantRepository} from '../limited-time-offer-participant.repository';\n\n@Service()\nexport class LtoParticipantMarketingService {\n private repository: LtoParticipantRepository;\n\n constructor() {\n this.repository = Container.get(LtoParticipantRepository);\n }\n\n // Creates the participant's LTO discount marketing without disturbing the shop's own marketings.\n // Used on its own when a shop joins a SCHEDULED campaign — the marketing exists but the shop's\n // existing discounts are only paused once the campaign actually starts.\n public async createMarketing(\n shopId: mongoose.Types.ObjectId,\n campaign: LimitedTimeOfferCampaign & {_id: mongoose.Types.ObjectId},\n dto: JoinLtoCampaignDTO,\n ): Promise<mongoose.Types.ObjectId> {\n const marketing = await marketingService.create(\n LtoParticipantQueryBuilder.buildMarketingInput(shopId, campaign, dto),\n undefined,\n {skipLimitedTimeOfferGuard: true},\n );\n return marketing._id;\n }\n\n // Pauses the shop's existing marketings that would clash with the LTO: the clashing discounts (all\n // of them for an entire-menu offer, otherwise just the ones on the offered products) plus every\n // active shop-wide spend-to-get promotion, since spend-to-get is never product-scoped.\n public async pauseConflicts(\n shopId: mongoose.Types.ObjectId,\n dto: JoinLtoCampaignDTO,\n ): Promise<mongoose.Types.ObjectId[]> {\n const discountPausedIds = await this.pauseConflictingDiscounts(shopId, dto);\n const spendToGetPausedIds = await this.pauseActiveShopMarketings(shopId, MarketingType.SPEND_TO_GET);\n return [...discountPausedIds, ...spendToGetPausedIds];\n }\n\n private async pauseConflictingDiscounts(\n shopId: mongoose.Types.ObjectId,\n dto: JoinLtoCampaignDTO,\n ): Promise<mongoose.Types.ObjectId[]> {\n if (dto.isEntireMenu) {\n return this.pauseActiveShopMarketings(shopId, MarketingType.DISCOUNT);\n }\n const productIds = dto.products ?? [];\n return productIds.length ? productMarketingService.pauseConflictingMarketings(productIds) : [];\n }\n\n // Active-campaign path: pause conflicts and create the LTO marketing together, rolling the pause\n // back if creation fails.\n public async applyMarketing(\n shopId: mongoose.Types.ObjectId,\n campaign: LimitedTimeOfferCampaign & {_id: mongoose.Types.ObjectId},\n dto: JoinLtoCampaignDTO,\n ): Promise<{marketingId: mongoose.Types.ObjectId; pausedMarketingIds: mongoose.Types.ObjectId[]}> {\n const pausedMarketingIds = await this.pauseConflicts(shopId, dto);\n\n try {\n const marketingId = await this.createMarketing(shopId, campaign, dto);\n return {marketingId, pausedMarketingIds};\n } catch (err) {\n await this.resumeMarketings(pausedMarketingIds);\n throw err;\n }\n }\n\n public async removeMarketing(marketingId: mongoose.Types.ObjectId): Promise<void> {\n try {\n await marketingService.deleteById(\n {_id: marketingId, softDelete: true},\n undefined,\n {skipLimitedTimeOfferGuard: true},\n );\n } catch (err) {\n if (err instanceof TRPCError && err.code === 'NOT_FOUND') return;\n throw err;\n }\n }\n\n public async removeAllCampaignMarketings(campaignId: mongoose.Types.ObjectId): Promise<void> {\n const marketingIds = await this.repository.findMarketingIdsByCampaign(campaignId);\n await marketingService.deleteManyByIds(marketingIds);\n }\n\n public async pauseActiveShopMarketings(shopId: mongoose.Types.ObjectId, marketingType: MarketingType): Promise<mongoose.Types.ObjectId[]> {\n const ids = await this.repository.findActiveMarketingIdsByShop(shopId, marketingType);\n if (!ids.length) return [];\n await this.repository.updateMarketingStatus(ids, MarketingStatus.PAUSED);\n await synchronizeProductMarketingService.syncProductMarketingInfoByMarketingIds(ids);\n return ids;\n }\n\n public async resumeMarketings(marketingIds: mongoose.Types.ObjectId[]): Promise<void> {\n if (!marketingIds?.length) return;\n const revivable = await this.repository.findRevivableMarketings(marketingIds);\n if (!revivable.length) return;\n const ids = revivable.map(m => m._id);\n await this.repository.updateMarketingStatus(ids, MarketingStatus.ACTIVE);\n await synchronizeProductMarketingService.syncProductMarketingInfoByMarketingIds(ids);\n }\n}\n\nexport const ltoParticipantMarketingService = Container.get(LtoParticipantMarketingService);\n"]}
@@ -1,23 +1,35 @@
1
1
  import { DocumentType, mongoose } from '@typegoose/typegoose';
2
- import { JoinLtoCampaignDTO, ParticipantStatusDTO } from '../limited-time-offer-participant.validation';
2
+ import { LimitedTimeOfferCampaign, LimitedTimeOfferParticipant } from '@lyxa.ai/core/dist/libraries/mongo/models';
3
+ import { AdminEnrollShopEntryDTO, JoinLtoCampaignDTO, ParticipantStatusDTO } from '../limited-time-offer-participant.validation';
3
4
  import { GetLtoCampaignParticipantsDTO } from '../../campaign/limited-time-offer-campaign.validation';
4
5
  export declare class LimitedTimeOfferParticipantService {
5
6
  private repository;
6
7
  private campaignService;
7
8
  private marketingService;
8
9
  constructor();
9
- join(shopId: mongoose.Types.ObjectId, dto: JoinLtoCampaignDTO): Promise<DocumentType<import("@lyxa.ai/core/dist/libraries/mongo/models").LimitedTimeOfferParticipant>>;
10
+ join(shopId: mongoose.Types.ObjectId, dto: JoinLtoCampaignDTO): Promise<DocumentType<LimitedTimeOfferParticipant>>;
11
+ enrollShops(entries: AdminEnrollShopEntryDTO[]): Promise<(mongoose.Document<unknown, import("@typegoose/typegoose/lib/types").BeAnObject, LimitedTimeOfferParticipant, Record<string, any>, {}> & LimitedTimeOfferParticipant & {
12
+ _id: mongoose.Types.ObjectId;
13
+ } & {
14
+ __v: number;
15
+ } & import("@typegoose/typegoose/lib/types").IObjectWithTypegooseFunction)[]>;
16
+ private joinShop;
17
+ private joinShopImmediate;
18
+ private isCampaignLive;
19
+ private setupParticipantMarketing;
20
+ private restoreShopCapacity;
10
21
  withdraw(shopId: mongoose.Types.ObjectId): Promise<void>;
22
+ isActiveParticipant(shopId: mongoose.Types.ObjectId): Promise<boolean>;
11
23
  getStatus(shopId: mongoose.Types.ObjectId): Promise<ParticipantStatusDTO>;
12
- update(shopId: mongoose.Types.ObjectId, dto: JoinLtoCampaignDTO): Promise<DocumentType<import("@lyxa.ai/core/dist/libraries/mongo/models").LimitedTimeOfferParticipant> | null>;
24
+ update(shopId: mongoose.Types.ObjectId, dto: JoinLtoCampaignDTO): Promise<DocumentType<LimitedTimeOfferParticipant> | null>;
13
25
  getParticipants(dto: GetLtoCampaignParticipantsDTO): Promise<{
14
26
  documents: {
15
27
  shopId: mongoose.Types.ObjectId;
16
28
  joinedAt: Date;
17
29
  shopName: string | null;
18
30
  maxDiscountCap?: number | undefined;
19
- discountPercentage?: number | undefined;
20
31
  shopPhoto?: string | null | undefined;
32
+ discountPercentage?: number | undefined;
21
33
  }[];
22
34
  metadata: {
23
35
  page: number;
@@ -31,7 +43,9 @@ export declare class LimitedTimeOfferParticipantService {
31
43
  latitude: number;
32
44
  longitude: number;
33
45
  }): Promise<any[]>;
34
- removeCampaignMarketings(campaignId: mongoose.Types.ObjectId): Promise<void>;
46
+ applyLiveEffectsToParticipants(campaign: DocumentType<LimitedTimeOfferCampaign>): Promise<void>;
47
+ private applyLiveEffects;
48
+ private toParticipantDto;
35
49
  private fetchCurrentCampaignOrThrow;
36
50
  private assertNotAlreadyJoined;
37
51
  private resolveCategorySelection;
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-participant.service.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/participant/services/limited-time-offer-participant.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAM5D,OAAO,EACN,kBAAkB,EAElB,oBAAoB,EAEpB,MAAM,8CAA8C,CAAC;AAGtD,OAAO,EAAC,6BAA6B,EAAC,MAAM,uDAAuD,CAAC;AAGpG,qBACa,kCAAkC;IAC9C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,gBAAgB,CAAiC;;IAQ5C,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,kBAAkB;IAsB7D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmBzE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,kBAAkB;IA0B/D,eAAe,CAAC,GAAG,EAAE,6BAA6B;;;;;;;;;;;;;;;;IAalD,6BAA6B,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;IAIjE,SAAS,CACrB,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EACnC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAOlC,wBAAwB,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAI3E,2BAA2B;YAQ3B,sBAAsB;YActB,wBAAwB;YAqBxB,0BAA0B;IAexC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,0BAA0B;CAiBlC;AAED,eAAO,MAAM,qBAAqB,oCAAoD,CAAC"}
1
+ {"version":3,"file":"limited-time-offer-participant.service.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/participant/services/limited-time-offer-participant.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAC,wBAAwB,EAAE,2BAA2B,EAAU,MAAM,2CAA2C,CAAC;AAKzH,OAAO,EACN,uBAAuB,EACvB,kBAAkB,EAElB,oBAAoB,EAEpB,MAAM,8CAA8C,CAAC;AAGtD,OAAO,EAAC,6BAA6B,EAAC,MAAM,uDAAuD,CAAC;AAIpG,qBACa,kCAAkC;IAC9C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,gBAAgB,CAAiC;;IAQ5C,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,kBAAkB;IAK7D,WAAW,CAAC,OAAO,EAAE,uBAAuB,EAAE;;;;;YAK7C,QAAQ;YAmDR,iBAAiB;IAsB/B,OAAO,CAAC,cAAc;YAMR,yBAAyB;YAoBzB,mBAAmB;IAapB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxD,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAMtE,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmBzE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,kBAAkB;IAuC/D,eAAe,CAAC,GAAG,EAAE,6BAA6B;;;;;;;;;;;;;;;;IAQlD,6BAA6B,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;IAIjE,SAAS,CACrB,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EACnC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAWlC,8BAA8B,CAC1C,QAAQ,EAAE,YAAY,CAAC,wBAAwB,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC;YAQF,gBAAgB;IA8B9B,OAAO,CAAC,gBAAgB;YAYV,2BAA2B;YAQ3B,sBAAsB;YActB,wBAAwB;YAqBxB,0BAA0B;IAexC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,0BAA0B;CAkBlC;AAED,eAAO,MAAM,qBAAqB,oCAAoD,CAAC"}
@@ -52,6 +52,7 @@ const limited_time_offer_participant_validation_1 = require("../limited-time-off
52
52
  const limited_time_offer_participant_builder_1 = require("../limited-time-offer-participant.builder");
53
53
  const limited_time_offer_participant_repository_1 = require("../limited-time-offer-participant.repository");
54
54
  const core_1 = require("@lyxa.ai/core");
55
+ const feature_flags_1 = require("../../../../utility/feature-flags");
55
56
  let LimitedTimeOfferParticipantService = class LimitedTimeOfferParticipantService {
56
57
  repository;
57
58
  campaignService;
@@ -63,15 +64,66 @@ let LimitedTimeOfferParticipantService = class LimitedTimeOfferParticipantServic
63
64
  }
64
65
  async join(shopId, dto) {
65
66
  const campaign = await this.fetchCurrentCampaignOrThrow();
67
+ return this.joinShop(campaign, shopId, dto);
68
+ }
69
+ async enrollShops(entries) {
70
+ const campaign = await this.fetchCurrentCampaignOrThrow();
71
+ return Promise.all(entries.map(({ shopId, ...dto }) => this.joinShop(campaign, shopId, dto)));
72
+ }
73
+ async joinShop(campaign, shopId, dto) {
66
74
  await this.assertNotAlreadyJoined(campaign._id, shopId);
67
- this.validateDiscountSelections(campaign, dto.discountPercentage, dto.maxDiscountCap);
75
+ this.validateDiscountSelections({ campaign, discountPercentage: dto.discountPercentage, maxDiscountCap: dto.maxDiscountCap });
68
76
  await this.assertProductsBelongToShop(shopId, dto);
69
77
  const resolvedDto = await this.resolveCategorySelection(shopId, dto);
70
- const marketingId = await this.marketingService.applyMarketing(shopId, campaign, resolvedDto);
71
- const participant = await this.repository.create(limited_time_offer_participant_builder_1.LtoParticipantQueryBuilder.buildCreateInput(campaign._id, shopId, marketingId, resolvedDto));
78
+ if (!(await (0, feature_flags_1.isLtoScheduleEnabled)())) {
79
+ return this.joinShopImmediate(campaign, shopId, resolvedDto);
80
+ }
81
+ const isLive = this.isCampaignLive(campaign);
82
+ const { marketingId, pausedMarketings } = await this.setupParticipantMarketing(campaign, shopId, resolvedDto, isLive);
83
+ const capacitySnapshot = isLive && resolvedDto.isOrderCapacityEnabled
84
+ ? await this.repository.getShopOrderCapacity(shopId)
85
+ : undefined;
86
+ const participant = await this.repository.create(limited_time_offer_participant_builder_1.LtoParticipantQueryBuilder.buildCreateInput({
87
+ campaignId: campaign._id,
88
+ shopId,
89
+ marketingId,
90
+ dto: resolvedDto,
91
+ pausedMarketings,
92
+ pausedOrderCapacity: capacitySnapshot?.orderCapacity,
93
+ pausedOrderCapacityEnabled: capacitySnapshot?.orderCapacityEnabled,
94
+ }));
95
+ if (isLive && resolvedDto.isOrderCapacityEnabled) {
96
+ await this.repository.updateShopOrderCapacity(shopId, true, resolvedDto.maxOrderCapacity);
97
+ }
98
+ return participant;
99
+ }
100
+ async joinShopImmediate(campaign, shopId, resolvedDto) {
101
+ const marketingId = await this.marketingService.createMarketing(shopId, campaign, resolvedDto);
102
+ const participant = await this.repository.create(limited_time_offer_participant_builder_1.LtoParticipantQueryBuilder.buildCreateInput({
103
+ campaignId: campaign._id,
104
+ shopId,
105
+ marketingId,
106
+ dto: resolvedDto,
107
+ }));
72
108
  await this.repository.updateShopOrderCapacity(shopId, resolvedDto.isOrderCapacityEnabled, resolvedDto.maxOrderCapacity);
73
109
  return participant;
74
110
  }
111
+ isCampaignLive(campaign) {
112
+ return campaign.status === enum_1.LimitedTimeOfferCampaignStatus.ACTIVE;
113
+ }
114
+ async setupParticipantMarketing(campaign, shopId, dto, isLive) {
115
+ if (!isLive) {
116
+ const marketingId = await this.marketingService.createMarketing(shopId, campaign, dto);
117
+ return { marketingId, pausedMarketings: [] };
118
+ }
119
+ const { marketingId, pausedMarketingIds } = await this.marketingService.applyMarketing(shopId, campaign, dto);
120
+ return { marketingId, pausedMarketings: pausedMarketingIds };
121
+ }
122
+ async restoreShopCapacity(participant) {
123
+ if (participant.pausedOrderCapacityEnabled === undefined)
124
+ return;
125
+ await this.repository.restoreShopOrderCapacity(participant.shop, participant.pausedOrderCapacity, participant.pausedOrderCapacityEnabled);
126
+ }
75
127
  async withdraw(shopId) {
76
128
  const campaign = await this.fetchCurrentCampaignOrThrow();
77
129
  const participant = await this.repository.withdraw(campaign._id, shopId);
@@ -80,6 +132,16 @@ let LimitedTimeOfferParticipantService = class LimitedTimeOfferParticipantServic
80
132
  if (participant.marketing) {
81
133
  await this.marketingService.removeMarketing(participant.marketing);
82
134
  }
135
+ if (!(await (0, feature_flags_1.isLtoScheduleEnabled)()))
136
+ return;
137
+ await this.marketingService.resumeMarketings((participant.pausedMarketings ?? []));
138
+ await this.restoreShopCapacity(participant);
139
+ }
140
+ async isActiveParticipant(shopId) {
141
+ const campaign = await this.campaignService.getCurrent();
142
+ if (!campaign)
143
+ return false;
144
+ return this.repository.existsActiveByCampaignAndShop(campaign._id, shopId);
83
145
  }
84
146
  async getStatus(shopId) {
85
147
  const campaign = await this.campaignService.getCurrent();
@@ -100,12 +162,17 @@ let LimitedTimeOfferParticipantService = class LimitedTimeOfferParticipantServic
100
162
  const participant = await this.repository.findActiveByCampaignAndShop(campaign._id, shopId);
101
163
  if (!participant)
102
164
  throw (0, error_common_1.notFoundError)('You have not joined this campaign.');
103
- this.validateDiscountSelections(campaign, dto.discountPercentage, dto.maxDiscountCap, participant);
165
+ this.validateDiscountSelections({ campaign, discountPercentage: dto.discountPercentage, maxDiscountCap: dto.maxDiscountCap, participant });
104
166
  await this.assertProductsBelongToShop(shopId, dto);
105
167
  const resolvedDto = await this.resolveCategorySelection(shopId, dto);
106
- const newMarketingId = participant.marketingId
107
- ? await this.marketingService.replaceMarketing(participant.marketingId, shopId, campaign, resolvedDto)
108
- : await this.marketingService.applyMarketing(shopId, campaign, resolvedDto);
168
+ const isLive = (await (0, feature_flags_1.isLtoScheduleEnabled)()) && this.isCampaignLive(campaign);
169
+ if (participant.marketingId) {
170
+ await this.marketingService.removeMarketing(participant.marketingId);
171
+ }
172
+ const { marketingId: newMarketingId } = await this.setupParticipantMarketing(campaign, shopId, resolvedDto, isLive);
173
+ if (isLive && resolvedDto.isOrderCapacityEnabled) {
174
+ await this.repository.updateShopOrderCapacity(shopId, true, resolvedDto.maxOrderCapacity);
175
+ }
109
176
  return this.repository.updateParticipant(campaign._id, shopId, {
110
177
  products: resolvedDto.products ?? [],
111
178
  isEntireMenu: resolvedDto.isEntireMenu,
@@ -120,12 +187,7 @@ let LimitedTimeOfferParticipantService = class LimitedTimeOfferParticipantServic
120
187
  const { documents, total } = await this.repository.findByCampaign(dto);
121
188
  return {
122
189
  documents,
123
- metadata: {
124
- page: dto.page,
125
- size: dto.size,
126
- totalElements: total,
127
- totalPages: Math.ceil(total / dto.size),
128
- },
190
+ metadata: { page: dto.page, size: dto.size, totalElements: total, totalPages: Math.ceil(total / dto.size) },
129
191
  };
130
192
  }
131
193
  async getParticipantIdsByCampaignId(campaignId) {
@@ -136,8 +198,43 @@ let LimitedTimeOfferParticipantService = class LimitedTimeOfferParticipantServic
136
198
  const nearByShopDistance = settings.nearByShopDistance || 10000;
137
199
  return this.repository.findNearby(campaignId, input, nearByShopDistance);
138
200
  }
139
- async removeCampaignMarketings(campaignId) {
140
- await this.marketingService.removeAllCampaignMarketings(campaignId);
201
+ async applyLiveEffectsToParticipants(campaign) {
202
+ const participants = await this.repository.findAllActiveByCampaign(campaign._id);
203
+ for (const participant of participants) {
204
+ await this.applyLiveEffects(campaign, participant);
205
+ }
206
+ }
207
+ async applyLiveEffects(campaign, participant) {
208
+ const shopId = participant.shop;
209
+ const dto = this.toParticipantDto(participant);
210
+ const marketingId = participant.marketing
211
+ ? participant.marketing
212
+ : await this.marketingService.createMarketing(shopId, campaign, dto);
213
+ const pausedMarketings = await this.marketingService.pauseConflicts(shopId, dto);
214
+ const capacitySnapshot = dto.isOrderCapacityEnabled
215
+ ? await this.repository.getShopOrderCapacity(shopId)
216
+ : undefined;
217
+ await this.repository.updateParticipant(campaign._id, shopId, {
218
+ ...dto,
219
+ marketing: marketingId,
220
+ pausedMarketings,
221
+ pausedOrderCapacity: capacitySnapshot?.orderCapacity,
222
+ pausedOrderCapacityEnabled: capacitySnapshot?.orderCapacityEnabled,
223
+ });
224
+ if (dto.isOrderCapacityEnabled) {
225
+ await this.repository.updateShopOrderCapacity(shopId, true, participant.maxOrderCapacity);
226
+ }
227
+ }
228
+ toParticipantDto(participant) {
229
+ return {
230
+ isEntireMenu: participant.isEntireMenu,
231
+ products: (participant.products ?? []),
232
+ shopCategories: [],
233
+ discountPercentage: participant.discountPercentage ?? 0,
234
+ maxDiscountCap: participant.maxDiscountCap ?? 0,
235
+ isOrderCapacityEnabled: participant.isOrderCapacityEnabled,
236
+ maxOrderCapacity: participant.maxOrderCapacity,
237
+ };
141
238
  }
142
239
  async fetchCurrentCampaignOrThrow() {
143
240
  const campaign = await this.campaignService.getCurrent();
@@ -175,7 +272,8 @@ let LimitedTimeOfferParticipantService = class LimitedTimeOfferParticipantServic
175
272
  uniqueObjectIds(ids) {
176
273
  return [...new Map(ids.map(id => [id.toString(), id])).values()];
177
274
  }
178
- validateDiscountSelections(campaign, discountPercentage, maxDiscountCap, participant) {
275
+ validateDiscountSelections(input) {
276
+ const { campaign, discountPercentage, maxDiscountCap, participant } = input;
179
277
  if (!campaign.discountOptions.includes(discountPercentage)) {
180
278
  if (!participant || discountPercentage != participant.discountPercentage) {
181
279
  throw (0, error_common_1.badRequestError)('Selected discount is not an available option for this campaign.');