@lyxa.ai/marketing 1.0.51 → 1.0.53

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 (481) hide show
  1. package/dist/lib/index.d.ts +323 -77
  2. package/dist/lib/index.d.ts.map +1 -1
  3. package/dist/lib/index.js +1 -1
  4. package/dist/lib/index.js.map +1 -1
  5. package/dist/lib/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  6. package/dist/lib/modules/coupon/routers/coupon.router.js +1 -1
  7. package/dist/lib/modules/coupon/routers/coupon.router.js.map +1 -1
  8. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.d.ts.map +1 -1
  9. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js +16 -3
  10. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js.map +1 -1
  11. package/dist/lib/modules/coupon/validations/all-coupons.validation.d.ts +1117 -285
  12. package/dist/lib/modules/coupon/validations/all-coupons.validation.d.ts.map +1 -1
  13. package/dist/lib/modules/coupon/validations/all-coupons.validation.js +16 -2
  14. package/dist/lib/modules/coupon/validations/all-coupons.validation.js.map +1 -1
  15. package/dist/lib/modules/coupon/validations/index.d.ts +0 -1
  16. package/dist/lib/modules/coupon/validations/index.d.ts.map +1 -1
  17. package/dist/lib/modules/coupon/validations/index.js +0 -1
  18. package/dist/lib/modules/coupon/validations/index.js.map +1 -1
  19. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts +32 -32
  20. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js +9 -9
  21. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js.map +1 -1
  22. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
  23. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  24. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js +2 -5
  25. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js.map +1 -1
  26. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +1 -0
  27. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  28. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js +2 -0
  29. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js.map +1 -1
  30. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +19 -6
  31. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  32. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js +3 -2
  33. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js.map +1 -1
  34. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +3 -9
  35. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  36. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js +4 -7
  37. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js.map +1 -1
  38. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.service.d.ts +1 -0
  39. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.service.d.ts.map +1 -1
  40. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.service.js +15 -0
  41. package/dist/lib/modules/limited-time-offer/config/limited-time-offer-config.service.js.map +1 -1
  42. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts +96 -50
  43. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  44. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.js +23 -0
  45. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.js.map +1 -1
  46. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts +18 -0
  47. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -0
  48. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js +78 -0
  49. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js.map +1 -0
  50. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +12 -0
  51. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  52. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js +68 -0
  53. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js.map +1 -1
  54. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +22 -18
  55. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  56. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +1 -0
  57. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +1 -0
  58. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js +2 -0
  59. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js.map +1 -0
  60. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +88 -83
  61. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
  62. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js +3 -2
  63. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js.map +1 -1
  64. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +10 -1
  65. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  66. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js +68 -22
  67. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js.map +1 -1
  68. package/dist/lib/modules/marketing/validations/product-marketing.validation.d.ts +2 -2
  69. package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +1 -1
  70. package/dist/lib/modules/punch-marketing-history/validations/punch-marketing-history.validation.d.ts +2 -2
  71. package/dist/lib/modules/tournament/config/config.builder.d.ts.map +1 -1
  72. package/dist/lib/modules/tournament/config/config.builder.js +4 -0
  73. package/dist/lib/modules/tournament/config/config.builder.js.map +1 -1
  74. package/dist/lib/modules/tournament/config/config.repository.d.ts +8 -2
  75. package/dist/lib/modules/tournament/config/config.repository.d.ts.map +1 -1
  76. package/dist/lib/modules/tournament/config/config.repository.js +30 -1
  77. package/dist/lib/modules/tournament/config/config.repository.js.map +1 -1
  78. package/dist/lib/modules/tournament/config/config.router.d.ts +102 -12
  79. package/dist/lib/modules/tournament/config/config.router.d.ts.map +1 -1
  80. package/dist/lib/modules/tournament/config/config.types.d.ts +15 -0
  81. package/dist/lib/modules/tournament/config/config.types.d.ts.map +1 -0
  82. package/dist/lib/modules/tournament/config/config.types.js +3 -0
  83. package/dist/lib/modules/tournament/config/config.types.js.map +1 -0
  84. package/dist/lib/modules/tournament/config/config.validation.d.ts +431 -52
  85. package/dist/lib/modules/tournament/config/config.validation.d.ts.map +1 -1
  86. package/dist/lib/modules/tournament/config/config.validation.js +20 -6
  87. package/dist/lib/modules/tournament/config/config.validation.js.map +1 -1
  88. package/dist/lib/modules/tournament/integration/integration.factory.d.ts +4 -0
  89. package/dist/lib/modules/tournament/integration/integration.factory.d.ts.map +1 -0
  90. package/dist/lib/modules/tournament/integration/integration.factory.js +18 -0
  91. package/dist/lib/modules/tournament/integration/integration.factory.js.map +1 -0
  92. package/dist/lib/modules/tournament/integration/interfaces/ITournamentService.d.ts +36 -0
  93. package/dist/lib/modules/tournament/integration/interfaces/ITournamentService.d.ts.map +1 -0
  94. package/dist/lib/modules/tournament/integration/interfaces/ITournamentService.js +3 -0
  95. package/dist/lib/modules/tournament/integration/interfaces/ITournamentService.js.map +1 -0
  96. package/dist/lib/modules/tournament/integration/providers/api-football/api-football.provider.d.ts +14 -0
  97. package/dist/lib/modules/tournament/integration/providers/api-football/api-football.provider.d.ts.map +1 -0
  98. package/dist/lib/modules/tournament/integration/providers/api-football/api-football.provider.js +92 -0
  99. package/dist/lib/modules/tournament/integration/providers/api-football/api-football.provider.js.map +1 -0
  100. package/dist/lib/modules/tournament/integration/providers/api-football/api-football.types.d.ts +51 -0
  101. package/dist/lib/modules/tournament/integration/providers/api-football/api-football.types.d.ts.map +1 -0
  102. package/dist/lib/modules/tournament/integration/providers/api-football/api-football.types.js +3 -0
  103. package/dist/lib/modules/tournament/integration/providers/api-football/api-football.types.js.map +1 -0
  104. package/dist/lib/modules/tournament/integration/providers/api-football/index.d.ts +3 -0
  105. package/dist/lib/modules/tournament/integration/providers/api-football/index.d.ts.map +1 -0
  106. package/dist/lib/modules/tournament/integration/providers/api-football/index.js +19 -0
  107. package/dist/lib/modules/tournament/integration/providers/api-football/index.js.map +1 -0
  108. package/dist/lib/modules/tournament/integration/providers/index.d.ts +3 -0
  109. package/dist/lib/modules/tournament/integration/providers/index.d.ts.map +1 -0
  110. package/dist/lib/modules/tournament/integration/providers/index.js +19 -0
  111. package/dist/lib/modules/tournament/integration/providers/index.js.map +1 -0
  112. package/dist/lib/modules/tournament/integration/providers/mock.provider.d.ts +7 -0
  113. package/dist/lib/modules/tournament/integration/providers/mock.provider.d.ts.map +1 -0
  114. package/dist/lib/modules/tournament/integration/providers/mock.provider.js +22 -0
  115. package/dist/lib/modules/tournament/integration/providers/mock.provider.js.map +1 -0
  116. package/dist/lib/modules/tournament/integration/tournamentService.d.ts +9 -0
  117. package/dist/lib/modules/tournament/integration/tournamentService.d.ts.map +1 -0
  118. package/dist/lib/modules/tournament/integration/tournamentService.js +20 -0
  119. package/dist/lib/modules/tournament/integration/tournamentService.js.map +1 -0
  120. package/dist/lib/modules/tournament/match/events/evaluate-predictions.consumer.d.ts.map +1 -1
  121. package/dist/lib/modules/tournament/match/events/evaluate-predictions.consumer.js +50 -11
  122. package/dist/lib/modules/tournament/match/events/evaluate-predictions.consumer.js.map +1 -1
  123. package/dist/lib/modules/tournament/match/events/evaluate-predictions.event.d.ts +7 -3
  124. package/dist/lib/modules/tournament/match/events/evaluate-predictions.event.d.ts.map +1 -1
  125. package/dist/lib/modules/tournament/match/events/evaluate-predictions.event.js +1 -1
  126. package/dist/lib/modules/tournament/match/events/evaluate-predictions.event.js.map +1 -1
  127. package/dist/lib/modules/tournament/match/events/match-evaluation.orchestrator.d.ts +14 -0
  128. package/dist/lib/modules/tournament/match/events/match-evaluation.orchestrator.d.ts.map +1 -0
  129. package/dist/lib/modules/tournament/{notification/jobs/notification.worker.js → match/events/match-evaluation.orchestrator.js} +31 -27
  130. package/dist/lib/modules/tournament/match/events/match-evaluation.orchestrator.js.map +1 -0
  131. package/dist/lib/modules/tournament/match/match.builder.d.ts +13 -34
  132. package/dist/lib/modules/tournament/match/match.builder.d.ts.map +1 -1
  133. package/dist/lib/modules/tournament/match/match.builder.js +31 -10
  134. package/dist/lib/modules/tournament/match/match.builder.js.map +1 -1
  135. package/dist/lib/modules/tournament/match/match.repository.d.ts +1 -1
  136. package/dist/lib/modules/tournament/match/match.repository.d.ts.map +1 -1
  137. package/dist/lib/modules/tournament/match/match.repository.js.map +1 -1
  138. package/dist/lib/modules/tournament/match/match.router.d.ts +40 -4
  139. package/dist/lib/modules/tournament/match/match.router.d.ts.map +1 -1
  140. package/dist/lib/modules/tournament/match/match.service.d.ts +3 -0
  141. package/dist/lib/modules/tournament/match/match.service.d.ts.map +1 -1
  142. package/dist/lib/modules/tournament/match/match.service.js +15 -12
  143. package/dist/lib/modules/tournament/match/match.service.js.map +1 -1
  144. package/dist/lib/modules/tournament/match/match.types.d.ts +51 -0
  145. package/dist/lib/modules/tournament/match/match.types.d.ts.map +1 -0
  146. package/dist/lib/modules/tournament/match/match.types.js +3 -0
  147. package/dist/lib/modules/tournament/match/match.types.js.map +1 -0
  148. package/dist/lib/modules/tournament/notification/notification-template.repository.d.ts +2 -1
  149. package/dist/lib/modules/tournament/notification/notification-template.repository.d.ts.map +1 -1
  150. package/dist/lib/modules/tournament/notification/notification-template.repository.js +2 -1
  151. package/dist/lib/modules/tournament/notification/notification-template.repository.js.map +1 -1
  152. package/dist/lib/modules/tournament/notification/notification.builder.d.ts +30 -0
  153. package/dist/lib/modules/tournament/notification/notification.builder.d.ts.map +1 -0
  154. package/dist/lib/modules/tournament/notification/notification.builder.js +35 -0
  155. package/dist/lib/modules/tournament/notification/notification.builder.js.map +1 -0
  156. package/dist/lib/modules/tournament/notification/notification.config.d.ts +10 -9
  157. package/dist/lib/modules/tournament/notification/notification.config.d.ts.map +1 -1
  158. package/dist/lib/modules/tournament/notification/notification.config.js +0 -12
  159. package/dist/lib/modules/tournament/notification/notification.config.js.map +1 -1
  160. package/dist/lib/modules/tournament/notification/notification.service.d.ts +5 -3
  161. package/dist/lib/modules/tournament/notification/notification.service.d.ts.map +1 -1
  162. package/dist/lib/modules/tournament/notification/notification.service.js +23 -15
  163. package/dist/lib/modules/tournament/notification/notification.service.js.map +1 -1
  164. package/dist/lib/modules/tournament/participant/participant.builder.d.ts +12 -0
  165. package/dist/lib/modules/tournament/participant/participant.builder.d.ts.map +1 -0
  166. package/dist/lib/modules/tournament/participant/participant.builder.js +17 -0
  167. package/dist/lib/modules/tournament/participant/participant.builder.js.map +1 -0
  168. package/dist/lib/modules/tournament/participant/participant.repository.d.ts +8 -7
  169. package/dist/lib/modules/tournament/participant/participant.repository.d.ts.map +1 -1
  170. package/dist/lib/modules/tournament/participant/participant.repository.js +12 -2
  171. package/dist/lib/modules/tournament/participant/participant.repository.js.map +1 -1
  172. package/dist/lib/modules/tournament/participant/participant.service.d.ts +1 -0
  173. package/dist/lib/modules/tournament/participant/participant.service.d.ts.map +1 -1
  174. package/dist/lib/modules/tournament/participant/participant.service.js +15 -17
  175. package/dist/lib/modules/tournament/participant/participant.service.js.map +1 -1
  176. package/dist/lib/modules/tournament/prediction/prediction.builder.d.ts +3 -9
  177. package/dist/lib/modules/tournament/prediction/prediction.builder.d.ts.map +1 -1
  178. package/dist/lib/modules/tournament/prediction/prediction.builder.js.map +1 -1
  179. package/dist/lib/modules/tournament/prediction/prediction.repository.d.ts +11 -3
  180. package/dist/lib/modules/tournament/prediction/prediction.repository.d.ts.map +1 -1
  181. package/dist/lib/modules/tournament/prediction/prediction.repository.js +47 -0
  182. package/dist/lib/modules/tournament/prediction/prediction.repository.js.map +1 -1
  183. package/dist/lib/modules/tournament/prediction/prediction.service.d.ts +1 -1
  184. package/dist/lib/modules/tournament/prediction/prediction.service.d.ts.map +1 -1
  185. package/dist/lib/modules/tournament/prediction/prediction.service.js +16 -26
  186. package/dist/lib/modules/tournament/prediction/prediction.service.js.map +1 -1
  187. package/dist/lib/modules/tournament/prediction/prediction.types.d.ts +17 -0
  188. package/dist/lib/modules/tournament/prediction/prediction.types.d.ts.map +1 -0
  189. package/dist/lib/modules/tournament/prediction/prediction.types.js +3 -0
  190. package/dist/lib/modules/tournament/prediction/prediction.types.js.map +1 -0
  191. package/dist/lib/modules/tournament/reward/handlers/coupon-reward.handler.d.ts +8 -5
  192. package/dist/lib/modules/tournament/reward/handlers/coupon-reward.handler.d.ts.map +1 -1
  193. package/dist/lib/modules/tournament/reward/handlers/coupon-reward.handler.js +58 -16
  194. package/dist/lib/modules/tournament/reward/handlers/coupon-reward.handler.js.map +1 -1
  195. package/dist/lib/modules/tournament/reward/reward.builder.d.ts +5 -2
  196. package/dist/lib/modules/tournament/reward/reward.builder.d.ts.map +1 -1
  197. package/dist/lib/modules/tournament/reward/reward.builder.js +44 -28
  198. package/dist/lib/modules/tournament/reward/reward.builder.js.map +1 -1
  199. package/dist/lib/modules/tournament/reward/reward.factory.d.ts +1 -1
  200. package/dist/lib/modules/tournament/reward/reward.factory.d.ts.map +1 -1
  201. package/dist/lib/modules/tournament/reward/reward.factory.js.map +1 -1
  202. package/dist/lib/modules/tournament/reward/reward.interface.d.ts +2 -2
  203. package/dist/lib/modules/tournament/reward/reward.interface.d.ts.map +1 -1
  204. package/dist/lib/modules/tournament/reward/reward.interface.js.map +1 -1
  205. package/dist/lib/modules/tournament/reward/reward.service.d.ts +1 -1
  206. package/dist/lib/modules/tournament/reward/reward.service.d.ts.map +1 -1
  207. package/dist/lib/modules/tournament/reward/reward.service.js +1 -1
  208. package/dist/lib/modules/tournament/reward/reward.service.js.map +1 -1
  209. package/dist/lib/modules/tournament/reward/reward.types.d.ts +35 -2
  210. package/dist/lib/modules/tournament/reward/reward.types.d.ts.map +1 -1
  211. package/dist/lib/modules/tournament/reward/reward.types.js.map +1 -1
  212. package/dist/lib/modules/tournament/schedule/schedule.router.d.ts.map +1 -1
  213. package/dist/lib/modules/tournament/schedule/schedule.router.js +1 -3
  214. package/dist/lib/modules/tournament/schedule/schedule.router.js.map +1 -1
  215. package/dist/lib/modules/tournament/schedule/schedule.service.d.ts +3 -0
  216. package/dist/lib/modules/tournament/schedule/schedule.service.d.ts.map +1 -1
  217. package/dist/lib/modules/tournament/schedule/schedule.service.js +30 -1
  218. package/dist/lib/modules/tournament/schedule/schedule.service.js.map +1 -1
  219. package/dist/lib/modules/tournament/score/score.repository.d.ts +13 -0
  220. package/dist/lib/modules/tournament/score/score.repository.d.ts.map +1 -1
  221. package/dist/lib/modules/tournament/score/score.repository.js +20 -0
  222. package/dist/lib/modules/tournament/score/score.repository.js.map +1 -1
  223. package/dist/lib/modules/tournament/score/score.service.d.ts +3 -0
  224. package/dist/lib/modules/tournament/score/score.service.d.ts.map +1 -1
  225. package/dist/lib/modules/tournament/score/score.service.js +3 -0
  226. package/dist/lib/modules/tournament/score/score.service.js.map +1 -1
  227. package/dist/lib/modules/tournament/statistics/statistics.builder.d.ts +5 -0
  228. package/dist/lib/modules/tournament/statistics/statistics.builder.d.ts.map +1 -1
  229. package/dist/lib/modules/tournament/statistics/statistics.builder.js +47 -28
  230. package/dist/lib/modules/tournament/statistics/statistics.builder.js.map +1 -1
  231. package/dist/lib/modules/tournament/statistics/statistics.router.d.ts +4 -2
  232. package/dist/lib/modules/tournament/statistics/statistics.router.d.ts.map +1 -1
  233. package/dist/lib/modules/tournament/statistics/statistics.service.js +4 -4
  234. package/dist/lib/modules/tournament/statistics/statistics.service.js.map +1 -1
  235. package/dist/lib/modules/tournament/statistics/statistics.validation.d.ts +32 -14
  236. package/dist/lib/modules/tournament/statistics/statistics.validation.d.ts.map +1 -1
  237. package/dist/lib/modules/tournament/statistics/statistics.validation.js +2 -1
  238. package/dist/lib/modules/tournament/statistics/statistics.validation.js.map +1 -1
  239. package/dist/lib/modules/tournament/sync/sync.repository.d.ts +11 -0
  240. package/dist/lib/modules/tournament/sync/sync.repository.d.ts.map +1 -0
  241. package/dist/lib/modules/tournament/{notification/notification.scheduler.service.js → sync/sync.repository.js} +22 -28
  242. package/dist/lib/modules/tournament/sync/sync.repository.js.map +1 -0
  243. package/dist/lib/modules/tournament/sync/sync.router.d.ts +27 -0
  244. package/dist/lib/modules/tournament/sync/sync.router.d.ts.map +1 -0
  245. package/dist/lib/modules/tournament/sync/sync.router.js +15 -0
  246. package/dist/lib/modules/tournament/sync/sync.router.js.map +1 -0
  247. package/dist/lib/modules/tournament/sync/sync.service.d.ts +9 -0
  248. package/dist/lib/modules/tournament/sync/sync.service.d.ts.map +1 -0
  249. package/dist/lib/modules/tournament/sync/sync.service.js +117 -0
  250. package/dist/lib/modules/tournament/sync/sync.service.js.map +1 -0
  251. package/dist/lib/modules/tournament/team/team.builder.d.ts +4 -0
  252. package/dist/lib/modules/tournament/team/team.builder.d.ts.map +1 -1
  253. package/dist/lib/modules/tournament/team/team.builder.js +6 -0
  254. package/dist/lib/modules/tournament/team/team.builder.js.map +1 -1
  255. package/dist/lib/modules/tournament/team/team.repository.d.ts +3 -0
  256. package/dist/lib/modules/tournament/team/team.repository.d.ts.map +1 -1
  257. package/dist/lib/modules/tournament/team/team.repository.js +6 -0
  258. package/dist/lib/modules/tournament/team/team.repository.js.map +1 -1
  259. package/dist/lib/modules/tournament/team/team.router.d.ts +24 -6
  260. package/dist/lib/modules/tournament/team/team.router.d.ts.map +1 -1
  261. package/dist/lib/modules/tournament/team/team.router.js +1 -1
  262. package/dist/lib/modules/tournament/team/team.router.js.map +1 -1
  263. package/dist/lib/modules/tournament/team/team.service.d.ts +2 -1
  264. package/dist/lib/modules/tournament/team/team.service.d.ts.map +1 -1
  265. package/dist/lib/modules/tournament/team/team.service.js +26 -23
  266. package/dist/lib/modules/tournament/team/team.service.js.map +1 -1
  267. package/dist/lib/modules/tournament/team/team.validation.d.ts +23 -24
  268. package/dist/lib/modules/tournament/team/team.validation.d.ts.map +1 -1
  269. package/dist/lib/modules/tournament/team/team.validation.js +3 -4
  270. package/dist/lib/modules/tournament/team/team.validation.js.map +1 -1
  271. package/dist/lib/modules/tournament/tournament.builder.d.ts +11 -0
  272. package/dist/lib/modules/tournament/tournament.builder.d.ts.map +1 -0
  273. package/dist/lib/modules/tournament/tournament.builder.js +34 -0
  274. package/dist/lib/modules/tournament/tournament.builder.js.map +1 -0
  275. package/dist/lib/modules/tournament/tournament.router.d.ts +226 -26
  276. package/dist/lib/modules/tournament/tournament.router.d.ts.map +1 -1
  277. package/dist/lib/modules/tournament/tournament.router.js +2 -0
  278. package/dist/lib/modules/tournament/tournament.router.js.map +1 -1
  279. package/dist/lib/modules/tournament/tournament.service.d.ts.map +1 -1
  280. package/dist/lib/modules/tournament/tournament.service.js +3 -10
  281. package/dist/lib/modules/tournament/tournament.service.js.map +1 -1
  282. package/dist/lib/modules/tournament/tournament.types.d.ts +0 -3
  283. package/dist/lib/modules/tournament/tournament.types.d.ts.map +1 -1
  284. package/dist/lib/modules/tournament/tournament.types.js +1 -5
  285. package/dist/lib/modules/tournament/tournament.types.js.map +1 -1
  286. package/dist/lib/modules/tournament/tournament.utils.d.ts +4 -0
  287. package/dist/lib/modules/tournament/tournament.utils.d.ts.map +1 -1
  288. package/dist/lib/modules/tournament/tournament.utils.js +8 -1
  289. package/dist/lib/modules/tournament/tournament.utils.js.map +1 -1
  290. package/dist/lib/modules/tournament/tournament.validation.d.ts +205 -1
  291. package/dist/lib/modules/tournament/tournament.validation.d.ts.map +1 -1
  292. package/dist/lib/modules/tournament/tournament.validation.js +23 -2
  293. package/dist/lib/modules/tournament/tournament.validation.js.map +1 -1
  294. package/dist/types/index.d.ts +323 -77
  295. package/dist/types/index.d.ts.map +1 -1
  296. package/dist/types/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  297. package/dist/types/modules/coupon/services/patterns/repository/CouponMetricsRepository.d.ts.map +1 -1
  298. package/dist/types/modules/coupon/validations/all-coupons.validation.d.ts +1117 -285
  299. package/dist/types/modules/coupon/validations/all-coupons.validation.d.ts.map +1 -1
  300. package/dist/types/modules/coupon/validations/index.d.ts +0 -1
  301. package/dist/types/modules/coupon/validations/index.d.ts.map +1 -1
  302. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts +34 -32
  303. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  304. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
  305. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  306. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +1 -0
  307. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  308. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +19 -6
  309. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  310. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +3 -9
  311. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  312. package/dist/types/modules/limited-time-offer/config/limited-time-offer-config.service.d.ts +1 -0
  313. package/dist/types/modules/limited-time-offer/config/limited-time-offer-config.service.d.ts.map +1 -1
  314. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts +96 -50
  315. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  316. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts +23 -0
  317. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -0
  318. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +12 -0
  319. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  320. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +22 -18
  321. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  322. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +88 -83
  323. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
  324. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +20 -1
  325. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  326. package/dist/types/modules/marketing/validations/product-marketing.validation.d.ts +2 -2
  327. package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +1 -1
  328. package/dist/types/modules/punch-marketing-history/validations/punch-marketing-history.validation.d.ts +2 -2
  329. package/dist/types/modules/tournament/config/config.builder.d.ts.map +1 -1
  330. package/dist/types/modules/tournament/config/config.repository.d.ts +8 -2
  331. package/dist/types/modules/tournament/config/config.repository.d.ts.map +1 -1
  332. package/dist/types/modules/tournament/config/config.router.d.ts +102 -12
  333. package/dist/types/modules/tournament/config/config.router.d.ts.map +1 -1
  334. package/dist/types/modules/tournament/config/config.types.d.ts +15 -0
  335. package/dist/types/modules/tournament/config/config.types.d.ts.map +1 -0
  336. package/dist/types/modules/tournament/config/config.validation.d.ts +431 -52
  337. package/dist/types/modules/tournament/config/config.validation.d.ts.map +1 -1
  338. package/dist/types/modules/tournament/integration/integration.factory.d.ts +4 -0
  339. package/dist/types/modules/tournament/integration/integration.factory.d.ts.map +1 -0
  340. package/dist/types/modules/tournament/integration/interfaces/ITournamentService.d.ts +36 -0
  341. package/dist/types/modules/tournament/integration/interfaces/ITournamentService.d.ts.map +1 -0
  342. package/dist/types/modules/tournament/integration/providers/api-football/api-football.provider.d.ts +14 -0
  343. package/dist/types/modules/tournament/integration/providers/api-football/api-football.provider.d.ts.map +1 -0
  344. package/dist/types/modules/tournament/integration/providers/api-football/api-football.types.d.ts +51 -0
  345. package/dist/types/modules/tournament/integration/providers/api-football/api-football.types.d.ts.map +1 -0
  346. package/dist/types/modules/tournament/integration/providers/api-football/index.d.ts +3 -0
  347. package/dist/types/modules/tournament/integration/providers/api-football/index.d.ts.map +1 -0
  348. package/dist/types/modules/tournament/integration/providers/index.d.ts +3 -0
  349. package/dist/types/modules/tournament/integration/providers/index.d.ts.map +1 -0
  350. package/dist/types/modules/tournament/integration/providers/mock.provider.d.ts +7 -0
  351. package/dist/types/modules/tournament/integration/providers/mock.provider.d.ts.map +1 -0
  352. package/dist/types/modules/tournament/integration/tournamentService.d.ts +9 -0
  353. package/dist/types/modules/tournament/integration/tournamentService.d.ts.map +1 -0
  354. package/dist/types/modules/tournament/match/events/evaluate-predictions.consumer.d.ts.map +1 -1
  355. package/dist/types/modules/tournament/match/events/evaluate-predictions.event.d.ts +7 -3
  356. package/dist/types/modules/tournament/match/events/evaluate-predictions.event.d.ts.map +1 -1
  357. package/dist/types/modules/tournament/match/events/match-evaluation.orchestrator.d.ts +14 -0
  358. package/dist/types/modules/tournament/match/events/match-evaluation.orchestrator.d.ts.map +1 -0
  359. package/dist/types/modules/tournament/match/match.builder.d.ts +13 -34
  360. package/dist/types/modules/tournament/match/match.builder.d.ts.map +1 -1
  361. package/dist/types/modules/tournament/match/match.repository.d.ts +1 -1
  362. package/dist/types/modules/tournament/match/match.repository.d.ts.map +1 -1
  363. package/dist/types/modules/tournament/match/match.router.d.ts +40 -4
  364. package/dist/types/modules/tournament/match/match.router.d.ts.map +1 -1
  365. package/dist/types/modules/tournament/match/match.service.d.ts +3 -0
  366. package/dist/types/modules/tournament/match/match.service.d.ts.map +1 -1
  367. package/dist/types/modules/tournament/match/match.types.d.ts +51 -0
  368. package/dist/types/modules/tournament/match/match.types.d.ts.map +1 -0
  369. package/dist/types/modules/tournament/notification/notification-template.repository.d.ts +2 -1
  370. package/dist/types/modules/tournament/notification/notification-template.repository.d.ts.map +1 -1
  371. package/dist/types/modules/tournament/notification/notification.builder.d.ts +30 -0
  372. package/dist/types/modules/tournament/notification/notification.builder.d.ts.map +1 -0
  373. package/dist/types/modules/tournament/notification/notification.config.d.ts +10 -9
  374. package/dist/types/modules/tournament/notification/notification.config.d.ts.map +1 -1
  375. package/dist/types/modules/tournament/notification/notification.service.d.ts +5 -3
  376. package/dist/types/modules/tournament/notification/notification.service.d.ts.map +1 -1
  377. package/dist/types/modules/tournament/participant/participant.builder.d.ts +12 -0
  378. package/dist/types/modules/tournament/participant/participant.builder.d.ts.map +1 -0
  379. package/dist/types/modules/tournament/participant/participant.repository.d.ts +8 -7
  380. package/dist/types/modules/tournament/participant/participant.repository.d.ts.map +1 -1
  381. package/dist/types/modules/tournament/participant/participant.service.d.ts +1 -0
  382. package/dist/types/modules/tournament/participant/participant.service.d.ts.map +1 -1
  383. package/dist/types/modules/tournament/prediction/prediction.builder.d.ts +3 -9
  384. package/dist/types/modules/tournament/prediction/prediction.builder.d.ts.map +1 -1
  385. package/dist/types/modules/tournament/prediction/prediction.repository.d.ts +11 -3
  386. package/dist/types/modules/tournament/prediction/prediction.repository.d.ts.map +1 -1
  387. package/dist/types/modules/tournament/prediction/prediction.service.d.ts +1 -1
  388. package/dist/types/modules/tournament/prediction/prediction.service.d.ts.map +1 -1
  389. package/dist/types/modules/tournament/prediction/prediction.types.d.ts +17 -0
  390. package/dist/types/modules/tournament/prediction/prediction.types.d.ts.map +1 -0
  391. package/dist/types/modules/tournament/reward/handlers/coupon-reward.handler.d.ts +8 -5
  392. package/dist/types/modules/tournament/reward/handlers/coupon-reward.handler.d.ts.map +1 -1
  393. package/dist/types/modules/tournament/reward/reward.builder.d.ts +5 -2
  394. package/dist/types/modules/tournament/reward/reward.builder.d.ts.map +1 -1
  395. package/dist/types/modules/tournament/reward/reward.factory.d.ts +1 -1
  396. package/dist/types/modules/tournament/reward/reward.factory.d.ts.map +1 -1
  397. package/dist/types/modules/tournament/reward/reward.interface.d.ts +2 -2
  398. package/dist/types/modules/tournament/reward/reward.interface.d.ts.map +1 -1
  399. package/dist/types/modules/tournament/reward/reward.service.d.ts +1 -1
  400. package/dist/types/modules/tournament/reward/reward.service.d.ts.map +1 -1
  401. package/dist/types/modules/tournament/reward/reward.types.d.ts +35 -2
  402. package/dist/types/modules/tournament/reward/reward.types.d.ts.map +1 -1
  403. package/dist/types/modules/tournament/schedule/schedule.router.d.ts.map +1 -1
  404. package/dist/types/modules/tournament/schedule/schedule.service.d.ts +3 -0
  405. package/dist/types/modules/tournament/schedule/schedule.service.d.ts.map +1 -1
  406. package/dist/types/modules/tournament/score/score.repository.d.ts +13 -0
  407. package/dist/types/modules/tournament/score/score.repository.d.ts.map +1 -1
  408. package/dist/types/modules/tournament/score/score.service.d.ts +3 -0
  409. package/dist/types/modules/tournament/score/score.service.d.ts.map +1 -1
  410. package/dist/types/modules/tournament/statistics/statistics.builder.d.ts +5 -0
  411. package/dist/types/modules/tournament/statistics/statistics.builder.d.ts.map +1 -1
  412. package/dist/types/modules/tournament/statistics/statistics.router.d.ts +4 -2
  413. package/dist/types/modules/tournament/statistics/statistics.router.d.ts.map +1 -1
  414. package/dist/types/modules/tournament/statistics/statistics.validation.d.ts +32 -14
  415. package/dist/types/modules/tournament/statistics/statistics.validation.d.ts.map +1 -1
  416. package/dist/types/modules/tournament/sync/sync.repository.d.ts +11 -0
  417. package/dist/types/modules/tournament/sync/sync.repository.d.ts.map +1 -0
  418. package/dist/types/modules/tournament/sync/sync.router.d.ts +27 -0
  419. package/dist/types/modules/tournament/sync/sync.router.d.ts.map +1 -0
  420. package/dist/types/modules/tournament/sync/sync.service.d.ts +9 -0
  421. package/dist/types/modules/tournament/sync/sync.service.d.ts.map +1 -0
  422. package/dist/types/modules/tournament/team/team.builder.d.ts +4 -0
  423. package/dist/types/modules/tournament/team/team.builder.d.ts.map +1 -1
  424. package/dist/types/modules/tournament/team/team.repository.d.ts +3 -0
  425. package/dist/types/modules/tournament/team/team.repository.d.ts.map +1 -1
  426. package/dist/types/modules/tournament/team/team.router.d.ts +24 -6
  427. package/dist/types/modules/tournament/team/team.router.d.ts.map +1 -1
  428. package/dist/types/modules/tournament/team/team.service.d.ts +2 -1
  429. package/dist/types/modules/tournament/team/team.service.d.ts.map +1 -1
  430. package/dist/types/modules/tournament/team/team.validation.d.ts +23 -24
  431. package/dist/types/modules/tournament/team/team.validation.d.ts.map +1 -1
  432. package/dist/types/modules/tournament/tournament.builder.d.ts +11 -0
  433. package/dist/types/modules/tournament/tournament.builder.d.ts.map +1 -0
  434. package/dist/types/modules/tournament/tournament.router.d.ts +226 -26
  435. package/dist/types/modules/tournament/tournament.router.d.ts.map +1 -1
  436. package/dist/types/modules/tournament/tournament.service.d.ts.map +1 -1
  437. package/dist/types/modules/tournament/tournament.types.d.ts +0 -3
  438. package/dist/types/modules/tournament/tournament.types.d.ts.map +1 -1
  439. package/dist/types/modules/tournament/tournament.utils.d.ts +4 -0
  440. package/dist/types/modules/tournament/tournament.utils.d.ts.map +1 -1
  441. package/dist/types/modules/tournament/tournament.validation.d.ts +205 -1
  442. package/dist/types/modules/tournament/tournament.validation.d.ts.map +1 -1
  443. package/package.json +3 -3
  444. package/dist/lib/modules/tournament/match/events/match-ended.consumer.d.ts +0 -2
  445. package/dist/lib/modules/tournament/match/events/match-ended.consumer.d.ts.map +0 -1
  446. package/dist/lib/modules/tournament/match/events/match-ended.consumer.js +0 -15
  447. package/dist/lib/modules/tournament/match/events/match-ended.consumer.js.map +0 -1
  448. package/dist/lib/modules/tournament/match/events/match-ended.event.d.ts +0 -14
  449. package/dist/lib/modules/tournament/match/events/match-ended.event.d.ts.map +0 -1
  450. package/dist/lib/modules/tournament/match/events/match-ended.event.js +0 -12
  451. package/dist/lib/modules/tournament/match/events/match-ended.event.js.map +0 -1
  452. package/dist/lib/modules/tournament/notification/jobs/notification.producer.d.ts +0 -10
  453. package/dist/lib/modules/tournament/notification/jobs/notification.producer.d.ts.map +0 -1
  454. package/dist/lib/modules/tournament/notification/jobs/notification.producer.js +0 -23
  455. package/dist/lib/modules/tournament/notification/jobs/notification.producer.js.map +0 -1
  456. package/dist/lib/modules/tournament/notification/jobs/notification.worker.d.ts +0 -9
  457. package/dist/lib/modules/tournament/notification/jobs/notification.worker.d.ts.map +0 -1
  458. package/dist/lib/modules/tournament/notification/jobs/notification.worker.js.map +0 -1
  459. package/dist/lib/modules/tournament/notification/notification.schedule.config.d.ts +0 -10
  460. package/dist/lib/modules/tournament/notification/notification.schedule.config.d.ts.map +0 -1
  461. package/dist/lib/modules/tournament/notification/notification.schedule.config.js +0 -15
  462. package/dist/lib/modules/tournament/notification/notification.schedule.config.js.map +0 -1
  463. package/dist/lib/modules/tournament/notification/notification.scheduler.service.d.ts +0 -10
  464. package/dist/lib/modules/tournament/notification/notification.scheduler.service.d.ts.map +0 -1
  465. package/dist/lib/modules/tournament/notification/notification.scheduler.service.js.map +0 -1
  466. package/dist/types/events/event-initializations.d.ts +0 -2
  467. package/dist/types/events/event-initializations.d.ts.map +0 -1
  468. package/dist/types/modules/tournament/config/tournament-config.validation.d.ts +0 -201
  469. package/dist/types/modules/tournament/config/tournament-config.validation.d.ts.map +0 -1
  470. package/dist/types/modules/tournament/match/events/match-ended.consumer.d.ts +0 -2
  471. package/dist/types/modules/tournament/match/events/match-ended.consumer.d.ts.map +0 -1
  472. package/dist/types/modules/tournament/match/events/match-ended.event.d.ts +0 -14
  473. package/dist/types/modules/tournament/match/events/match-ended.event.d.ts.map +0 -1
  474. package/dist/types/modules/tournament/notification/jobs/notification.producer.d.ts +0 -10
  475. package/dist/types/modules/tournament/notification/jobs/notification.producer.d.ts.map +0 -1
  476. package/dist/types/modules/tournament/notification/jobs/notification.worker.d.ts +0 -9
  477. package/dist/types/modules/tournament/notification/jobs/notification.worker.d.ts.map +0 -1
  478. package/dist/types/modules/tournament/notification/notification.schedule.config.d.ts +0 -10
  479. package/dist/types/modules/tournament/notification/notification.schedule.config.d.ts.map +0 -1
  480. package/dist/types/modules/tournament/notification/notification.scheduler.service.d.ts +0 -10
  481. package/dist/types/modules/tournament/notification/notification.scheduler.service.d.ts.map +0 -1
@@ -1,23 +1,16 @@
1
1
  import { DocumentType, mongoose } from '@typegoose/typegoose';
2
2
  import { LimitedTimeOfferCampaign as Model } from '@lyxa.ai/core/dist/libraries/mongo/models';
3
3
  import { LimitedTimeOfferCampaignStatus } from '@lyxa.ai/core/dist/utilities/enum';
4
- import { CreateLtoCampaignDTO, GetActiveCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO } from '../limited-time-offer-campaign.validation';
4
+ import { CreateLtoCampaignDTO, GetLtoCampaignHistoryDTO, LtoActiveCampaignDTO, UpdateLtoCampaignDTO } from '../limited-time-offer-campaign.validation';
5
5
  export declare class LtoCampaignService {
6
6
  private repository;
7
7
  private scheduler;
8
8
  private lifecycle;
9
- private participantMarketing;
10
9
  private configService;
11
10
  constructor();
12
11
  create(dto: CreateLtoCampaignDTO): Promise<DocumentType<Model>>;
13
12
  getCurrent(): Promise<DocumentType<Model> | null>;
14
- getActive(dto: GetActiveCampaignDTO): Promise<{
15
- _id: mongoose.Types.ObjectId;
16
- title: string;
17
- subtitle: string;
18
- startTime: Date;
19
- endTime: Date;
20
- } | null>;
13
+ getActive(): Promise<LtoActiveCampaignDTO | null>;
21
14
  getById(campaignId: mongoose.Types.ObjectId): Promise<DocumentType<Model>>;
22
15
  getHistory(dto: GetLtoCampaignHistoryDTO): Promise<{
23
16
  documents: {
@@ -37,6 +30,7 @@ export declare class LtoCampaignService {
37
30
  }>;
38
31
  update(dto: UpdateLtoCampaignDTO): Promise<DocumentType<Model>>;
39
32
  cancel(campaignId: mongoose.Types.ObjectId): Promise<void>;
33
+ expire(campaignId: mongoose.Types.ObjectId): Promise<void>;
40
34
  private assertUpdateAllowed;
41
35
  private shouldExpireImmediately;
42
36
  private applyImmediateExpiry;
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.service.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAC,wBAAwB,IAAI,KAAK,EAAC,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAC,8BAA8B,EAAgB,MAAM,mCAAmC,CAAC;AAEhG,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACvB,MAAM,2CAA2C,CAAC;AAUnD,qBACa,kBAAkB;IAC3B,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,aAAa,CAAgC;;IAUxC,MAAM,CAAC,GAAG,EAAE,oBAAoB;IAqBhC,UAAU;IAIV,SAAS,CAAC,GAAG,EAAE,oBAAoB;;;;;;;IAanC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;IAM3C,UAAU,CAAC,GAAG,EAAE,wBAAwB;;;;;;;;;;;;;;;;IAQxC,MAAM,CAAC,GAAG,EAAE,oBAAoB;IAoBhC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;IAcvD,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,uBAAuB;YAIjB,oBAAoB;YASpB,wBAAwB;YAmBxB,uBAAuB;IAMrC,OAAO,CAAC,cAAc;YAMR,kBAAkB;CAUnC;AAED,eAAO,MAAM,kBAAkB,oBAAoC,CAAC"}
1
+ {"version":3,"file":"limited-time-offer-campaign.service.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAC,wBAAwB,IAAI,KAAK,EAAC,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAC,8BAA8B,EAAgB,MAAM,mCAAmC,CAAC;AAEhG,OAAO,EACH,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,2CAA2C,CAAC;AASnD,qBACa,kBAAkB;IAC3B,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,aAAa,CAAgC;;IASxC,MAAM,CAAC,GAAG,EAAE,oBAAoB;IAqBhC,UAAU;IAIV,SAAS,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAajD,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;IAM3C,UAAU,CAAC,GAAG,EAAE,wBAAwB;;;;;;;;;;;;;;;;IAQxC,MAAM,CAAC,GAAG,EAAE,oBAAoB;IAoBhC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1D,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,uBAAuB;YAIjB,oBAAoB;YASpB,wBAAwB;YAmBxB,uBAAuB;IAMrC,OAAO,CAAC,cAAc;YAMR,kBAAkB;CAUnC;AAED,eAAO,MAAM,kBAAkB,oBAAoC,CAAC"}
@@ -48,7 +48,6 @@ const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
48
48
  const error_common_1 = require("@lyxa.ai/core/dist/utilities/error-common");
49
49
  const limited_time_offer_campaign_lifecycle_service_1 = require("./limited-time-offer-campaign-lifecycle.service");
50
50
  const limited_time_offer_campaign_scheduler_service_1 = require("./limited-time-offer-campaign-scheduler.service");
51
- const limited_time_offer_participant_marketing_service_1 = require("../../../limited-time-offer/participant/services/limited-time-offer-participant-marketing.service");
52
51
  const limited_time_offer_campaign_repository_1 = require("../../../limited-time-offer/campaign/limited-time-offer-campaign.repository");
53
52
  const limited_time_offer_campaign_builder_1 = require("../../../limited-time-offer/campaign/limited-time-offer-campaign.builder");
54
53
  const limited_time_offer_config_service_1 = require("../../../limited-time-offer/config/limited-time-offer-config.service");
@@ -57,13 +56,11 @@ let LtoCampaignService = class LtoCampaignService {
57
56
  repository;
58
57
  scheduler;
59
58
  lifecycle;
60
- participantMarketing;
61
59
  configService;
62
60
  constructor() {
63
61
  this.repository = typedi_1.default.get(limited_time_offer_campaign_repository_1.LtoCampaignRepository);
64
62
  this.scheduler = typedi_1.default.get(limited_time_offer_campaign_scheduler_service_1.LtoCampaignSchedulerService);
65
63
  this.lifecycle = typedi_1.default.get(limited_time_offer_campaign_lifecycle_service_1.LtoCampaignLifecycleService);
66
- this.participantMarketing = typedi_1.default.get(limited_time_offer_participant_marketing_service_1.LtoParticipantMarketingService);
67
64
  this.configService = typedi_1.default.get(limited_time_offer_config_service_1.LimitedTimeOfferConfigService);
68
65
  }
69
66
  async create(dto) {
@@ -83,7 +80,7 @@ let LtoCampaignService = class LtoCampaignService {
83
80
  async getCurrent() {
84
81
  return this.repository.findCurrent();
85
82
  }
86
- async getActive(dto) {
83
+ async getActive() {
87
84
  const campaign = await this.repository.findActive();
88
85
  if (!campaign)
89
86
  return null;
@@ -129,11 +126,11 @@ let LtoCampaignService = class LtoCampaignService {
129
126
  throw (0, error_common_1.notFoundError)('Campaign not found');
130
127
  this.assertEditable(campaign.status);
131
128
  await this.scheduler.cancelJobs(campaignId);
132
- if (campaign.status === enum_1.LimitedTimeOfferCampaignStatus.ACTIVE) {
133
- await this.participantMarketing.removeAllCampaignMarketings(campaignId);
134
- }
135
129
  await this.lifecycle.cancelCampaign(campaignId);
136
130
  }
131
+ async expire(campaignId) {
132
+ await this.lifecycle.expireCampaign(campaignId);
133
+ }
137
134
  assertUpdateAllowed(campaign, dto) {
138
135
  this.assertEditable(campaign.status);
139
136
  if (campaign.status === enum_1.LimitedTimeOfferCampaignStatus.ACTIVE && !dto.confirmActive) {
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.service.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0C;AAG1C,4DAAgG;AAChG,4EAAwG;AAOxG,mHAA4F;AAC5F,mHAA4F;AAC5F,wKAAiJ;AACjJ,wIAAkH;AAClH,kIAAiH;AACjH,4HAAmH;AAEnH,MAAM,eAAe,GAAG,CAAC,qCAA8B,CAAC,SAAS,EAAE,qCAA8B,CAAC,MAAM,CAAC,CAAC;AAGnG,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACnB,UAAU,CAAwB;IAClC,SAAS,CAA8B;IACvC,SAAS,CAA8B;IACvC,oBAAoB,CAAiC;IACrD,aAAa,CAAgC;IAErD;QACI,IAAI,CAAC,UAAU,GAAG,gBAAS,CAAC,GAAG,CAAC,8DAAqB,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,gBAAS,CAAC,GAAG,CAAC,2EAA2B,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,gBAAS,CAAC,GAAG,CAAC,2EAA2B,CAAC,CAAC;QAC5D,IAAI,CAAC,oBAAoB,GAAG,gBAAS,CAAC,GAAG,CAAC,iFAA8B,CAAC,CAAC;QAC1E,IAAI,CAAC,aAAa,GAAG,gBAAS,CAAC,GAAG,CAAC,iEAA6B,CAAC,CAAC;IACtE,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAyB;QACzC,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAErC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG;YAC/B,CAAC,CAAC,qCAA8B,CAAC,MAAM;YACvC,CAAC,CAAC,qCAA8B,CAAC,SAAS,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CACzC,6DAAuB,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAC5G,CAAC;QAEF,IAAI,MAAM,KAAK,qCAA8B,CAAC,SAAS,EAAE,CAAC;YACtD,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAE/D,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,GAAyB;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QACpD,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,OAAO;YACH,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC5B,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,UAAmC;QACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAA,4BAAa,EAAC,oBAAoB,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,GAA6B;QACjD,MAAM,EAAC,SAAS,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO;YACH,SAAS;YACT,QAAQ,EAAE,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,EAAC;SAC5G,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAyB;QACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAA,4BAAa,EAAC,oBAAoB,CAAC,CAAC;QAEzD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,6DAAuB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAExE,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM;YAAE,MAAM,IAAA,4BAAa,EAAC,iCAAiC,CAAC,CAAC;QAEpE,MAAM,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAE3E,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,UAAmC;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAA,4BAAa,EAAC,oBAAoB,CAAC,CAAC;QAEzD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,MAAM,KAAK,qCAA8B,CAAC,MAAM,EAAE,CAAC;YAC5D,MAAM,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAEO,mBAAmB,CAAC,QAA6B,EAAE,GAAyB;QAChF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,QAAQ,CAAC,MAAM,KAAK,qCAA8B,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAClF,MAAM,IAAA,8BAAe,EAAC,4DAA4D,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,qCAA8B,CAAC,SAAS,EAAE,CAAC;YAC7F,MAAM,IAAA,8BAAe,EAAC,mCAAmC,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,MAAsC,EAAE,OAAa;QACjF,OAAO,MAAM,KAAK,qCAA8B,CAAC,MAAM,IAAI,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC;IACrF,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,UAAmC,EAAE,OAAe;QACnF,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAA,4BAAa,EAAC,iCAAiC,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAClC,UAAmC,EACnC,aAA6C,EAC7C,QAA6B,EAC7B,GAAyB;QAEzB,MAAM,YAAY,GACd,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,SAAU,CAAC,OAAO,EAAE;YACzD,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,OAAQ,CAAC,OAAO,EAAE,CAAC;QAE1D,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,aAAa,KAAK,qCAA8B,CAAC,SAAS,EAAE,CAAC;YAC7D,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IAEO,KAAK,CAAC,uBAAuB;QACjC,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAA,4BAAa,EAAC,iFAAiF,CAAC,CAAC;QAC3G,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,MAAsC;QACzD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,MAAM,IAAA,8BAAe,EAAC,qDAAqD,CAAC,CAAC;QACjF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,oBAAa,CAAC,QAAQ,CAAC;aACpE,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,IAAA,8BAAe,EAAC,uEAAuE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtH,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7E,MAAM,IAAA,8BAAe,EAAC,uEAAuE,CAAC,CAAC;QACnG,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ,CAAA;AAvKY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,gBAAO,GAAE;;GACG,kBAAkB,CAuK9B;AAEY,QAAA,kBAAkB,GAAG,gBAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC","sourcesContent":["import Container, {Service} from 'typedi';\nimport {DocumentType, mongoose} from '@typegoose/typegoose';\nimport {LimitedTimeOfferCampaign as Model} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {LimitedTimeOfferCampaignStatus, MarketingType} from '@lyxa.ai/core/dist/utilities/enum';\nimport {badRequestError, conflictError, notFoundError} from '@lyxa.ai/core/dist/utilities/error-common';\nimport {\n CreateLtoCampaignDTO,\n GetActiveCampaignDTO,\n GetLtoCampaignHistoryDTO,\n UpdateLtoCampaignDTO,\n} from '../limited-time-offer-campaign.validation';\nimport {LtoCampaignLifecycleService} from './limited-time-offer-campaign-lifecycle.service';\nimport {LtoCampaignSchedulerService} from './limited-time-offer-campaign-scheduler.service';\nimport {LtoParticipantMarketingService} from '@modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service';\nimport {LtoCampaignRepository} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.repository';\nimport {LtoCampaignQueryBuilder} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.builder';\nimport {LimitedTimeOfferConfigService} from '@modules/limited-time-offer/config/limited-time-offer-config.service';\n\nconst ACTIVE_STATUSES = [LimitedTimeOfferCampaignStatus.SCHEDULED, LimitedTimeOfferCampaignStatus.ACTIVE];\n\n@Service()\nexport class LtoCampaignService {\n private repository: LtoCampaignRepository;\n private scheduler: LtoCampaignSchedulerService;\n private lifecycle: LtoCampaignLifecycleService;\n private participantMarketing: LtoParticipantMarketingService;\n private configService: LimitedTimeOfferConfigService;\n\n constructor() {\n this.repository = Container.get(LtoCampaignRepository);\n this.scheduler = Container.get(LtoCampaignSchedulerService);\n this.lifecycle = Container.get(LtoCampaignLifecycleService);\n this.participantMarketing = Container.get(LtoParticipantMarketingService);\n this.configService = Container.get(LimitedTimeOfferConfigService);\n }\n\n public async create(dto: CreateLtoCampaignDTO) {\n await this.assertNoCampaignRunning();\n\n const now = new Date();\n const config = await this.loadConfigSnapshot();\n const status = dto.startDate <= now\n ? LimitedTimeOfferCampaignStatus.ACTIVE\n : LimitedTimeOfferCampaignStatus.SCHEDULED;\n\n const campaign = await this.repository.create(\n LtoCampaignQueryBuilder.buildCreateInput(dto, status, await this.repository.nextCampaignNumber(), config),\n );\n\n if (status === LimitedTimeOfferCampaignStatus.SCHEDULED) {\n await this.scheduler.scheduleActivation(campaign._id, dto.startDate);\n }\n await this.scheduler.scheduleExpiry(campaign._id, dto.endDate);\n\n return campaign;\n }\n\n public async getCurrent() {\n return this.repository.findCurrent();\n }\n\n public async getActive(dto: GetActiveCampaignDTO) {\n const campaign = await this.repository.findActive();\n if (!campaign) return null;\n\n return {\n _id: campaign._id,\n title: campaign.title,\n subtitle: campaign.subTitle,\n startTime: campaign.startDate,\n endTime: campaign.endDate,\n };\n }\n\n public async getById(campaignId: mongoose.Types.ObjectId) {\n const campaign = await this.repository.findById(campaignId);\n if (!campaign) throw notFoundError('Campaign not found');\n return campaign;\n }\n\n public async getHistory(dto: GetLtoCampaignHistoryDTO) {\n const {documents, total} = await this.repository.findHistory(dto);\n return {\n documents,\n metadata: {page: dto.page, size: dto.size, totalElements: total, totalPages: Math.ceil(total / dto.size)},\n };\n }\n\n public async update(dto: UpdateLtoCampaignDTO) {\n const campaign = await this.repository.findById(dto._id);\n if (!campaign) throw notFoundError('Campaign not found');\n\n this.assertUpdateAllowed(campaign, dto);\n\n const updates = LtoCampaignQueryBuilder.buildUpdateInput(campaign, dto);\n\n if (this.shouldExpireImmediately(campaign.status, dto.endDate)) {\n return this.applyImmediateExpiry(dto._id, updates);\n }\n\n const result = await this.repository.updateById(dto._id, updates);\n if (!result) throw notFoundError('Campaign not found after update');\n\n await this.rescheduleIfDatesChanged(dto._id, result.status, campaign, dto);\n\n return result;\n }\n\n public async cancel(campaignId: mongoose.Types.ObjectId) {\n const campaign = await this.repository.findById(campaignId);\n if (!campaign) throw notFoundError('Campaign not found');\n\n this.assertEditable(campaign.status);\n await this.scheduler.cancelJobs(campaignId);\n\n if (campaign.status === LimitedTimeOfferCampaignStatus.ACTIVE) {\n await this.participantMarketing.removeAllCampaignMarketings(campaignId);\n }\n\n await this.lifecycle.cancelCampaign(campaignId);\n }\n\n private assertUpdateAllowed(campaign: DocumentType<Model>, dto: UpdateLtoCampaignDTO): void {\n this.assertEditable(campaign.status);\n\n if (campaign.status === LimitedTimeOfferCampaignStatus.ACTIVE && !dto.confirmActive) {\n throw badRequestError('Set confirmActive=true to confirm editing a live campaign.');\n }\n\n if (dto.startDate < new Date() && campaign.status === LimitedTimeOfferCampaignStatus.SCHEDULED) {\n throw badRequestError('Start date cannot be in the past.');\n }\n }\n\n private shouldExpireImmediately(status: LimitedTimeOfferCampaignStatus, endDate: Date): boolean {\n return status === LimitedTimeOfferCampaignStatus.ACTIVE && endDate <= new Date();\n }\n\n private async applyImmediateExpiry(campaignId: mongoose.Types.ObjectId, updates: object) {\n await this.scheduler.cancelJobs(campaignId);\n await this.repository.updateById(campaignId, updates);\n await this.lifecycle.expireCampaign(campaignId);\n const result = await this.repository.findById(campaignId);\n if (!result) throw notFoundError('Campaign not found after expiry');\n return result;\n }\n\n private async rescheduleIfDatesChanged(\n campaignId: mongoose.Types.ObjectId,\n currentStatus: LimitedTimeOfferCampaignStatus,\n original: DocumentType<Model>,\n dto: UpdateLtoCampaignDTO,\n ): Promise<void> {\n const datesChanged =\n dto.startDate.getTime() !== original.startDate!.getTime() ||\n dto.endDate.getTime() !== original.endDate!.getTime();\n\n if (!datesChanged) return;\n\n await this.scheduler.cancelJobs(campaignId);\n if (currentStatus === LimitedTimeOfferCampaignStatus.SCHEDULED) {\n await this.scheduler.scheduleActivation(campaignId, dto.startDate);\n }\n await this.scheduler.scheduleExpiry(campaignId, dto.endDate);\n }\n\n private async assertNoCampaignRunning(): Promise<void> {\n if (await this.repository.hasActiveCampaign()) {\n throw conflictError('A campaign is already scheduled or active. Delete it before creating a new one.');\n }\n }\n\n private assertEditable(status: LimitedTimeOfferCampaignStatus): void {\n if (!ACTIVE_STATUSES.includes(status)) {\n throw badRequestError('Only SCHEDULED or ACTIVE campaigns can be modified.');\n }\n }\n\n private async loadConfigSnapshot() {\n const config = await this.configService.getByType(MarketingType.DISCOUNT)\n .catch(() => { throw badRequestError('Global config is incomplete. Set discount options and max caps first.'); });\n\n if (config.discountOptions.length === 0 || config.maxDiscountCaps.length === 0) {\n throw badRequestError('Global config is incomplete. Set discount options and max caps first.');\n }\n\n return config;\n }\n}\n\nexport const ltoCampaignService = Container.get(LtoCampaignService);\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.service.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, {Service} from 'typedi';\nimport {DocumentType, mongoose} from '@typegoose/typegoose';\nimport {LimitedTimeOfferCampaign as Model} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {LimitedTimeOfferCampaignStatus, MarketingType} from '@lyxa.ai/core/dist/utilities/enum';\nimport {badRequestError, conflictError, notFoundError} from '@lyxa.ai/core/dist/utilities/error-common';\nimport {\n CreateLtoCampaignDTO,\n GetLtoCampaignHistoryDTO,\n LtoActiveCampaignDTO,\n UpdateLtoCampaignDTO,\n} from '../limited-time-offer-campaign.validation';\nimport {LtoCampaignLifecycleService} from './limited-time-offer-campaign-lifecycle.service';\nimport {LtoCampaignSchedulerService} from './limited-time-offer-campaign-scheduler.service';\nimport {LtoCampaignRepository} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.repository';\nimport {LtoCampaignQueryBuilder} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.builder';\nimport {LimitedTimeOfferConfigService} from '@modules/limited-time-offer/config/limited-time-offer-config.service';\n\nconst ACTIVE_STATUSES = [LimitedTimeOfferCampaignStatus.SCHEDULED, LimitedTimeOfferCampaignStatus.ACTIVE];\n\n@Service()\nexport class LtoCampaignService {\n private repository: LtoCampaignRepository;\n private scheduler: LtoCampaignSchedulerService;\n private lifecycle: LtoCampaignLifecycleService;\n private configService: LimitedTimeOfferConfigService;\n\n constructor() {\n this.repository = Container.get(LtoCampaignRepository);\n this.scheduler = Container.get(LtoCampaignSchedulerService);\n this.lifecycle = Container.get(LtoCampaignLifecycleService);\n this.configService = Container.get(LimitedTimeOfferConfigService);\n }\n\n public async create(dto: CreateLtoCampaignDTO) {\n await this.assertNoCampaignRunning();\n\n const now = new Date();\n const config = await this.loadConfigSnapshot();\n const status = dto.startDate <= now\n ? LimitedTimeOfferCampaignStatus.ACTIVE\n : LimitedTimeOfferCampaignStatus.SCHEDULED;\n\n const campaign = await this.repository.create(\n LtoCampaignQueryBuilder.buildCreateInput(dto, status, await this.repository.nextCampaignNumber(), config),\n );\n\n if (status === LimitedTimeOfferCampaignStatus.SCHEDULED) {\n await this.scheduler.scheduleActivation(campaign._id, dto.startDate);\n }\n await this.scheduler.scheduleExpiry(campaign._id, dto.endDate);\n\n return campaign;\n }\n\n public async getCurrent() {\n return this.repository.findCurrent();\n }\n\n public async getActive(): Promise<LtoActiveCampaignDTO | null> {\n const campaign = await this.repository.findActive();\n if (!campaign) return null;\n\n return {\n _id: campaign._id,\n title: campaign.title,\n subtitle: campaign.subTitle,\n startTime: campaign.startDate,\n endTime: campaign.endDate,\n };\n }\n\n public async getById(campaignId: mongoose.Types.ObjectId) {\n const campaign = await this.repository.findById(campaignId);\n if (!campaign) throw notFoundError('Campaign not found');\n return campaign;\n }\n\n public async getHistory(dto: GetLtoCampaignHistoryDTO) {\n const {documents, total} = await this.repository.findHistory(dto);\n return {\n documents,\n metadata: {page: dto.page, size: dto.size, totalElements: total, totalPages: Math.ceil(total / dto.size)},\n };\n }\n\n public async update(dto: UpdateLtoCampaignDTO) {\n const campaign = await this.repository.findById(dto._id);\n if (!campaign) throw notFoundError('Campaign not found');\n\n this.assertUpdateAllowed(campaign, dto);\n\n const updates = LtoCampaignQueryBuilder.buildUpdateInput(campaign, dto);\n\n if (this.shouldExpireImmediately(campaign.status, dto.endDate)) {\n return this.applyImmediateExpiry(dto._id, updates);\n }\n\n const result = await this.repository.updateById(dto._id, updates);\n if (!result) throw notFoundError('Campaign not found after update');\n\n await this.rescheduleIfDatesChanged(dto._id, result.status, campaign, dto);\n\n return result;\n }\n\n public async cancel(campaignId: mongoose.Types.ObjectId): Promise<void> {\n const campaign = await this.repository.findById(campaignId);\n if (!campaign) throw notFoundError('Campaign not found');\n\n this.assertEditable(campaign.status);\n await this.scheduler.cancelJobs(campaignId);\n await this.lifecycle.cancelCampaign(campaignId);\n }\n\n public async expire(campaignId: mongoose.Types.ObjectId): Promise<void> {\n await this.lifecycle.expireCampaign(campaignId);\n }\n\n private assertUpdateAllowed(campaign: DocumentType<Model>, dto: UpdateLtoCampaignDTO): void {\n this.assertEditable(campaign.status);\n\n if (campaign.status === LimitedTimeOfferCampaignStatus.ACTIVE && !dto.confirmActive) {\n throw badRequestError('Set confirmActive=true to confirm editing a live campaign.');\n }\n\n if (dto.startDate < new Date() && campaign.status === LimitedTimeOfferCampaignStatus.SCHEDULED) {\n throw badRequestError('Start date cannot be in the past.');\n }\n }\n\n private shouldExpireImmediately(status: LimitedTimeOfferCampaignStatus, endDate: Date): boolean {\n return status === LimitedTimeOfferCampaignStatus.ACTIVE && endDate <= new Date();\n }\n\n private async applyImmediateExpiry(campaignId: mongoose.Types.ObjectId, updates: object) {\n await this.scheduler.cancelJobs(campaignId);\n await this.repository.updateById(campaignId, updates);\n await this.lifecycle.expireCampaign(campaignId);\n const result = await this.repository.findById(campaignId);\n if (!result) throw notFoundError('Campaign not found after expiry');\n return result;\n }\n\n private async rescheduleIfDatesChanged(\n campaignId: mongoose.Types.ObjectId,\n currentStatus: LimitedTimeOfferCampaignStatus,\n original: DocumentType<Model>,\n dto: UpdateLtoCampaignDTO,\n ): Promise<void> {\n const datesChanged =\n dto.startDate.getTime() !== original.startDate!.getTime() ||\n dto.endDate.getTime() !== original.endDate!.getTime();\n\n if (!datesChanged) return;\n\n await this.scheduler.cancelJobs(campaignId);\n if (currentStatus === LimitedTimeOfferCampaignStatus.SCHEDULED) {\n await this.scheduler.scheduleActivation(campaignId, dto.startDate);\n }\n await this.scheduler.scheduleExpiry(campaignId, dto.endDate);\n }\n\n private async assertNoCampaignRunning(): Promise<void> {\n if (await this.repository.hasActiveCampaign()) {\n throw conflictError('A campaign is already scheduled or active. Delete it before creating a new one.');\n }\n }\n\n private assertEditable(status: LimitedTimeOfferCampaignStatus): void {\n if (!ACTIVE_STATUSES.includes(status)) {\n throw badRequestError('Only SCHEDULED or ACTIVE campaigns can be modified.');\n }\n }\n\n private async loadConfigSnapshot() {\n const config = await this.configService.getByType(MarketingType.DISCOUNT)\n .catch(() => { throw badRequestError('Global config is incomplete. Set discount options and max caps first.'); });\n\n if (config.discountOptions.length === 0 || config.maxDiscountCaps.length === 0) {\n throw badRequestError('Global config is incomplete. Set discount options and max caps first.');\n }\n\n return config;\n }\n}\n\nexport const ltoCampaignService = Container.get(LtoCampaignService);\n"]}
@@ -2,6 +2,7 @@ import { MarketingType } from '@lyxa.ai/core/dist/utilities/enum';
2
2
  import { CreateLimitedTimeOfferConfigDTO, LimitedTimeOfferConfigDTO, UpdateLimitedTimeOfferConfigDTO } from './limited-time-offer-config.validation';
3
3
  export declare class LimitedTimeOfferConfigService {
4
4
  private repository;
5
+ private campaignRepository;
5
6
  constructor();
6
7
  create(input: CreateLimitedTimeOfferConfigDTO): Promise<LimitedTimeOfferConfigDTO>;
7
8
  getByType(campaignType: MarketingType): Promise<LimitedTimeOfferConfigDTO>;
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-config.service.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/config/limited-time-offer-config.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,mCAAmC,CAAC;AAChE,OAAO,EACH,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAClC,MAAM,wCAAwC,CAAC;AAKhD,qBACa,6BAA6B;IACtC,OAAO,CAAC,UAAU,CAAsB;;IAM3B,MAAM,CAAC,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAOlF,SAAS,CAAC,YAAY,EAAE,aAAa,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAM1E,MAAM,CAAC,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAelG;AAED,eAAO,MAAM,6BAA6B,+BAA+C,CAAC"}
1
+ {"version":3,"file":"limited-time-offer-config.service.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/config/limited-time-offer-config.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,mCAAmC,CAAC;AAChE,OAAO,EACH,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAClC,MAAM,wCAAwC,CAAC;AAOhD,qBACa,6BAA6B;IACtC,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,kBAAkB,CAAwB;;IAOrC,MAAM,CAAC,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAOlF,SAAS,CAAC,YAAY,EAAE,aAAa,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAM1E,MAAM,CAAC,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,yBAAyB,CAAC;CA2BlG;AAED,eAAO,MAAM,6BAA6B,+BAA+C,CAAC"}
@@ -48,10 +48,14 @@ const server_1 = require("@trpc/server");
48
48
  const error_common_1 = require("@lyxa.ai/core/dist/utilities/error-common");
49
49
  const limited_time_offer_config_repository_1 = require("./limited-time-offer-config.repository");
50
50
  const limited_time_offer_config_builder_1 = require("./limited-time-offer-config.builder");
51
+ const limited_time_offer_campaign_repository_1 = require("../campaign/limited-time-offer-campaign.repository");
52
+ const limited_time_offer_campaign_builder_1 = require("../campaign/limited-time-offer-campaign.builder");
51
53
  let LimitedTimeOfferConfigService = class LimitedTimeOfferConfigService {
52
54
  repository;
55
+ campaignRepository;
53
56
  constructor() {
54
57
  this.repository = typedi_1.default.get(limited_time_offer_config_repository_1.LtoConfigRepository);
58
+ this.campaignRepository = typedi_1.default.get(limited_time_offer_campaign_repository_1.LtoCampaignRepository);
55
59
  }
56
60
  async create(input) {
57
61
  if (await this.repository.existsByCampaignType(input.campaignType)) {
@@ -75,6 +79,17 @@ let LimitedTimeOfferConfigService = class LimitedTimeOfferConfigService {
75
79
  const result = await this.repository.updateById(input._id, limited_time_offer_config_builder_1.LtoConfigQueryBuilder.buildUpdateInput(input));
76
80
  if (!result)
77
81
  throw new server_1.TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'Failed to update config' });
82
+ const campaign = await this.campaignRepository.findCurrent();
83
+ if (campaign) {
84
+ this.campaignRepository.updateById(campaign._id, limited_time_offer_campaign_builder_1.LtoCampaignQueryBuilder.buildUpdateInput(campaign, {
85
+ _id: campaign._id,
86
+ startDate: campaign.startDate,
87
+ endDate: campaign.endDate,
88
+ confirmActive: true,
89
+ discountOptions: input.discountOptions,
90
+ maxDiscountCaps: input.maxDiscountCaps,
91
+ }));
92
+ }
78
93
  return result;
79
94
  }
80
95
  };
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-config.service.js","sourceRoot":"/","sources":["modules/limited-time-offer/config/limited-time-offer-config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0C;AAC1C,yCAAuC;AAOvC,4EAAwG;AACxG,iGAA2E;AAC3E,2FAA0E;AAGnE,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAC9B,UAAU,CAAsB;IAExC;QACI,IAAI,CAAC,UAAU,GAAG,gBAAS,CAAC,GAAG,CAAC,0DAAmB,CAAC,CAAC;IACzD,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAsC;QACtD,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACjE,MAAM,IAAA,4BAAa,EAAC,mEAAmE,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAuC,CAAC;IAC/E,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,YAA2B;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM;YAAE,MAAM,IAAA,4BAAa,EAAC,kBAAkB,CAAC,CAAC;QACrD,OAAO,MAAmC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAsC;QACtD,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAA,8BAAe,EAAC,oEAAoE,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAA,4BAAa,EAAC,kBAAkB,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,yDAAqB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1G,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAS,CAAC,EAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,yBAAyB,EAAC,CAAC,CAAC;QAEtG,OAAO,MAAmC,CAAC;IAC/C,CAAC;CAGJ,CAAA;AAnCY,sEAA6B;wCAA7B,6BAA6B;IADzC,IAAA,gBAAO,GAAE;;GACG,6BAA6B,CAmCzC;AAEY,QAAA,6BAA6B,GAAG,gBAAS,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC","sourcesContent":["import Container, {Service} from 'typedi';\nimport {TRPCError} from '@trpc/server';\nimport {MarketingType} from '@lyxa.ai/core/dist/utilities/enum';\nimport {\n CreateLimitedTimeOfferConfigDTO,\n LimitedTimeOfferConfigDTO,\n UpdateLimitedTimeOfferConfigDTO,\n} from './limited-time-offer-config.validation';\nimport {badRequestError, conflictError, notFoundError} from '@lyxa.ai/core/dist/utilities/error-common';\nimport {LtoConfigRepository} from './limited-time-offer-config.repository';\nimport {LtoConfigQueryBuilder} from './limited-time-offer-config.builder';\n\n@Service()\nexport class LimitedTimeOfferConfigService {\n private repository: LtoConfigRepository;\n\n constructor() {\n this.repository = Container.get(LtoConfigRepository);\n }\n\n public async create(input: CreateLimitedTimeOfferConfigDTO): Promise<LimitedTimeOfferConfigDTO> {\n if (await this.repository.existsByCampaignType(input.campaignType)) {\n throw conflictError('Config for this campaign type already exists. Use update instead.');\n }\n return this.repository.create(input) as Promise<LimitedTimeOfferConfigDTO>;\n }\n\n public async getByType(campaignType: MarketingType): Promise<LimitedTimeOfferConfigDTO> {\n const result = await this.repository.findByCampaignType(campaignType);\n if (!result) throw notFoundError('Config not found');\n return result as LimitedTimeOfferConfigDTO;\n }\n\n public async update(input: UpdateLimitedTimeOfferConfigDTO): Promise<LimitedTimeOfferConfigDTO> {\n if (input.discountOptions.length === 0 || input.maxDiscountCaps.length === 0) {\n throw badRequestError('At least one discount option and one max discount cap are required');\n }\n\n const existing = await this.repository.findById(input._id);\n if (!existing) throw notFoundError('Config not found');\n\n const result = await this.repository.updateById(input._id, LtoConfigQueryBuilder.buildUpdateInput(input));\n if (!result) throw new TRPCError({code: 'INTERNAL_SERVER_ERROR', message: 'Failed to update config'});\n\n return result as LimitedTimeOfferConfigDTO;\n }\n\n // TODO [limited-time-offer] @zbib - add admin logging\n}\n\nexport const limitedTimeOfferConfigService = Container.get(LimitedTimeOfferConfigService);\n"]}
1
+ {"version":3,"file":"limited-time-offer-config.service.js","sourceRoot":"/","sources":["modules/limited-time-offer/config/limited-time-offer-config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0C;AAC1C,yCAAuC;AAOvC,4EAAwG;AACxG,iGAA2E;AAC3E,2FAA0E;AAC1E,+GAA2F;AAC3F,yGAA0F;AAGnF,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAC9B,UAAU,CAAsB;IAChC,kBAAkB,CAAwB;IAElD;QACI,IAAI,CAAC,UAAU,GAAG,gBAAS,CAAC,GAAG,CAAC,0DAAmB,CAAC,CAAC;QACrD,IAAI,CAAC,kBAAkB,GAAG,gBAAS,CAAC,GAAG,CAAC,8DAAqB,CAAC,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAsC;QACtD,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACjE,MAAM,IAAA,4BAAa,EAAC,mEAAmE,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAuC,CAAC;IAC/E,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,YAA2B;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM;YAAE,MAAM,IAAA,4BAAa,EAAC,kBAAkB,CAAC,CAAC;QACrD,OAAO,MAAmC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAsC;QACtD,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAA,8BAAe,EAAC,oEAAoE,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAA,4BAAa,EAAC,kBAAkB,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,yDAAqB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1G,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAS,CAAC,EAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,yBAAyB,EAAC,CAAC,CAAC;QAEtG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAA;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,6DAAuB,CAAC,gBAAgB,CAAC,QAAQ,EAAE;gBAChG,GAAG,EAAE,QAAQ,CAAC,GAAG;gBACjB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,aAAa,EAAE,IAAI;gBACnB,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,eAAe,EAAE,KAAK,CAAC,eAAe;aACzC,CAAC,CAAC,CAAC;QACR,CAAC;QAED,OAAO,MAAmC,CAAC;IAC/C,CAAC;CAGJ,CAAA;AAjDY,sEAA6B;wCAA7B,6BAA6B;IADzC,IAAA,gBAAO,GAAE;;GACG,6BAA6B,CAiDzC;AAEY,QAAA,6BAA6B,GAAG,gBAAS,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC","sourcesContent":["import Container, {Service} from 'typedi';\nimport {TRPCError} from '@trpc/server';\nimport {MarketingType} from '@lyxa.ai/core/dist/utilities/enum';\nimport {\n CreateLimitedTimeOfferConfigDTO,\n LimitedTimeOfferConfigDTO,\n UpdateLimitedTimeOfferConfigDTO,\n} from './limited-time-offer-config.validation';\nimport {badRequestError, conflictError, notFoundError} from '@lyxa.ai/core/dist/utilities/error-common';\nimport {LtoConfigRepository} from './limited-time-offer-config.repository';\nimport {LtoConfigQueryBuilder} from './limited-time-offer-config.builder';\nimport { LtoCampaignRepository } from '../campaign/limited-time-offer-campaign.repository';\nimport { LtoCampaignQueryBuilder } from '../campaign/limited-time-offer-campaign.builder';\n\n@Service()\nexport class LimitedTimeOfferConfigService {\n private repository: LtoConfigRepository;\n private campaignRepository: LtoCampaignRepository;\n\n constructor() {\n this.repository = Container.get(LtoConfigRepository);\n this.campaignRepository = Container.get(LtoCampaignRepository);\n } \n\n public async create(input: CreateLimitedTimeOfferConfigDTO): Promise<LimitedTimeOfferConfigDTO> {\n if (await this.repository.existsByCampaignType(input.campaignType)) {\n throw conflictError('Config for this campaign type already exists. Use update instead.');\n }\n return this.repository.create(input) as Promise<LimitedTimeOfferConfigDTO>;\n }\n\n public async getByType(campaignType: MarketingType): Promise<LimitedTimeOfferConfigDTO> {\n const result = await this.repository.findByCampaignType(campaignType);\n if (!result) throw notFoundError('Config not found');\n return result as LimitedTimeOfferConfigDTO;\n }\n\n public async update(input: UpdateLimitedTimeOfferConfigDTO): Promise<LimitedTimeOfferConfigDTO> {\n if (input.discountOptions.length === 0 || input.maxDiscountCaps.length === 0) {\n throw badRequestError('At least one discount option and one max discount cap are required');\n }\n\n const existing = await this.repository.findById(input._id);\n if (!existing) throw notFoundError('Config not found');\n\n const result = await this.repository.updateById(input._id, LtoConfigQueryBuilder.buildUpdateInput(input));\n if (!result) throw new TRPCError({code: 'INTERNAL_SERVER_ERROR', message: 'Failed to update config'});\n\n const campaign = await this.campaignRepository.findCurrent()\n if (campaign) {\n this.campaignRepository.updateById(campaign._id, LtoCampaignQueryBuilder.buildUpdateInput(campaign, {\n _id: campaign._id,\n startDate: campaign.startDate,\n endDate: campaign.endDate,\n confirmActive: true,\n discountOptions: input.discountOptions,\n maxDiscountCaps: input.maxDiscountCaps,\n }));\n }\n\n return result as LimitedTimeOfferConfigDTO;\n }\n\n // TODO [limited-time-offer] @zbib - add admin logging\n}\n\nexport const limitedTimeOfferConfigService = Container.get(LimitedTimeOfferConfigService);\n"]}
@@ -14,6 +14,48 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
14
14
  };
15
15
  transformer: false;
16
16
  }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
17
+ getActive: import("@trpc/server").TRPCQueryProcedure<{
18
+ input: {
19
+ latitude: number;
20
+ longitude: number;
21
+ };
22
+ output: {
23
+ message: string;
24
+ success: boolean;
25
+ data?: {
26
+ _id: string | import("mongoose").Types.ObjectId;
27
+ title?: string | undefined;
28
+ subtitle?: string | undefined;
29
+ startTime?: Date | null | undefined;
30
+ endTime?: Date | null | undefined;
31
+ } | {
32
+ documents: ({
33
+ _id: string | import("mongoose").Types.ObjectId;
34
+ title?: string | undefined;
35
+ subtitle?: string | undefined;
36
+ startTime?: Date | null | undefined;
37
+ endTime?: Date | null | undefined;
38
+ } | null)[];
39
+ metadata?: {
40
+ page: number;
41
+ size: number;
42
+ totalElements: number;
43
+ totalPages: number;
44
+ } | undefined;
45
+ } | null | undefined;
46
+ };
47
+ meta: object;
48
+ }>;
49
+ cancel: import("@trpc/server").TRPCMutationProcedure<{
50
+ input: {
51
+ campaignId: string | import("mongoose").Types.ObjectId;
52
+ };
53
+ output: {
54
+ message: string;
55
+ success: boolean;
56
+ };
57
+ meta: object;
58
+ }>;
17
59
  config: import("@trpc/server").TRPCBuiltRouter<{
18
60
  ctx: import("@lyxa.ai/core/dist/libraries/trpc/context").LyxaHTTPContext;
19
61
  meta: object;
@@ -241,38 +283,6 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
241
283
  };
242
284
  meta: object;
243
285
  }>;
244
- getActive: import("@trpc/server").TRPCQueryProcedure<{
245
- input: {
246
- latitude?: number | undefined;
247
- longitude?: number | undefined;
248
- };
249
- output: {
250
- message: string;
251
- success: boolean;
252
- data?: {
253
- _id: string | import("mongoose").Types.ObjectId;
254
- title?: string | undefined;
255
- subtitle?: string | undefined;
256
- startTime?: Date | null | undefined;
257
- endTime?: Date | null | undefined;
258
- } | {
259
- documents: ({
260
- _id: string | import("mongoose").Types.ObjectId;
261
- title?: string | undefined;
262
- subtitle?: string | undefined;
263
- startTime?: Date | null | undefined;
264
- endTime?: Date | null | undefined;
265
- } | null)[];
266
- metadata?: {
267
- page: number;
268
- size: number;
269
- totalElements: number;
270
- totalPages: number;
271
- } | undefined;
272
- } | null | undefined;
273
- };
274
- meta: object;
275
- }>;
276
286
  getById: import("@trpc/server").TRPCQueryProcedure<{
277
287
  input: {
278
288
  campaignId: string | import("mongoose").Types.ObjectId;
@@ -407,6 +417,38 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
407
417
  };
408
418
  meta: object;
409
419
  }>;
420
+ getActive: import("@trpc/server").TRPCQueryProcedure<{
421
+ input: {
422
+ latitude: number;
423
+ longitude: number;
424
+ };
425
+ output: {
426
+ message: string;
427
+ success: boolean;
428
+ data?: {
429
+ _id: string | import("mongoose").Types.ObjectId;
430
+ title?: string | undefined;
431
+ subtitle?: string | undefined;
432
+ startTime?: Date | null | undefined;
433
+ endTime?: Date | null | undefined;
434
+ } | {
435
+ documents: ({
436
+ _id: string | import("mongoose").Types.ObjectId;
437
+ title?: string | undefined;
438
+ subtitle?: string | undefined;
439
+ startTime?: Date | null | undefined;
440
+ endTime?: Date | null | undefined;
441
+ } | null)[];
442
+ metadata?: {
443
+ page: number;
444
+ size: number;
445
+ totalElements: number;
446
+ totalPages: number;
447
+ } | undefined;
448
+ } | null | undefined;
449
+ };
450
+ meta: object;
451
+ }>;
410
452
  cancel: import("@trpc/server").TRPCMutationProcedure<{
411
453
  input: {
412
454
  campaignId: string | import("mongoose").Types.ObjectId;
@@ -442,6 +484,7 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
442
484
  isOrderCapacityEnabled: boolean;
443
485
  products?: (string | import("mongoose").Types.ObjectId)[] | undefined;
444
486
  maxOrderCapacity?: number | undefined;
487
+ shopCategories?: (string | import("mongoose").Types.ObjectId)[] | undefined;
445
488
  };
446
489
  output: {
447
490
  message: string;
@@ -496,6 +539,7 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
496
539
  isOrderCapacityEnabled: boolean;
497
540
  products?: (string | import("mongoose").Types.ObjectId)[] | undefined;
498
541
  maxOrderCapacity?: number | undefined;
542
+ shopCategories?: (string | import("mongoose").Types.ObjectId)[] | undefined;
499
543
  };
500
544
  output: {
501
545
  message: string;
@@ -557,15 +601,6 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
557
601
  success: boolean;
558
602
  data?: {
559
603
  campaignState: import("./participant/limited-time-offer-participant.validation").LtoCardState;
560
- campaign?: {
561
- _id: string | import("mongoose").Types.ObjectId;
562
- startDate?: Date | null | undefined;
563
- endDate?: Date | null | undefined;
564
- title?: string | undefined;
565
- subTitle?: string | undefined;
566
- discountOptions?: number[] | undefined;
567
- maxDiscountCaps?: number[] | undefined;
568
- } | undefined;
569
604
  participant?: {
570
605
  isEntireMenu: boolean;
571
606
  joinedAt: Date;
@@ -576,18 +611,18 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
576
611
  maxDiscountCap?: number | undefined;
577
612
  maxOrderCapacity?: number | undefined;
578
613
  } | undefined;
614
+ campaign?: {
615
+ _id: string | import("mongoose").Types.ObjectId;
616
+ startDate?: Date | null | undefined;
617
+ endDate?: Date | null | undefined;
618
+ title?: string | undefined;
619
+ subTitle?: string | undefined;
620
+ discountOptions?: number[] | undefined;
621
+ maxDiscountCaps?: number[] | undefined;
622
+ } | undefined;
579
623
  } | {
580
624
  documents: {
581
625
  campaignState: import("./participant/limited-time-offer-participant.validation").LtoCardState;
582
- campaign?: {
583
- _id: string | import("mongoose").Types.ObjectId;
584
- startDate?: Date | null | undefined;
585
- endDate?: Date | null | undefined;
586
- title?: string | undefined;
587
- subTitle?: string | undefined;
588
- discountOptions?: number[] | undefined;
589
- maxDiscountCaps?: number[] | undefined;
590
- } | undefined;
591
626
  participant?: {
592
627
  isEntireMenu: boolean;
593
628
  joinedAt: Date;
@@ -598,6 +633,15 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
598
633
  maxDiscountCap?: number | undefined;
599
634
  maxOrderCapacity?: number | undefined;
600
635
  } | undefined;
636
+ campaign?: {
637
+ _id: string | import("mongoose").Types.ObjectId;
638
+ startDate?: Date | null | undefined;
639
+ endDate?: Date | null | undefined;
640
+ title?: string | undefined;
641
+ subTitle?: string | undefined;
642
+ discountOptions?: number[] | undefined;
643
+ maxDiscountCaps?: number[] | undefined;
644
+ } | undefined;
601
645
  }[];
602
646
  metadata?: {
603
647
  page: number;
@@ -620,6 +664,7 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
620
664
  message: string;
621
665
  success: boolean;
622
666
  data?: {
667
+ shopId: string | import("mongoose").Types.ObjectId;
623
668
  joinedAt: Date;
624
669
  shopName: string | null;
625
670
  shopPhoto?: string | null | undefined;
@@ -627,6 +672,7 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
627
672
  maxDiscountCap?: number | undefined;
628
673
  } | {
629
674
  documents: {
675
+ shopId: string | import("mongoose").Types.ObjectId;
630
676
  joinedAt: Date;
631
677
  shopName: string | null;
632
678
  shopPhoto?: string | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer.router.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/limited-time-offer.router.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIjC,CAAC"}
1
+ {"version":3,"file":"limited-time-offer.router.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/limited-time-offer.router.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwBjC,CAAC"}
@@ -1,11 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.limitedTimeOfferRouter = void 0;
4
+ const zod_1 = require("zod");
4
5
  const trpc_1 = require("@lyxa.ai/core/dist/libraries/trpc");
6
+ const auth_1 = require("@lyxa.ai/core/dist/libraries/trpc/middlewares/auth");
7
+ const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
8
+ const error_handler_1 = require("@lyxa.ai/core/dist/utilities/error-handler");
9
+ const response_1 = require("@lyxa.ai/core/dist/utilities/response");
10
+ const validation_1 = require("@lyxa.ai/core/dist/utilities/validation");
5
11
  const limited_time_offer_router_1 = require("./config/limited-time-offer.router");
6
12
  const campaign_router_1 = require("./campaign/campaign.router");
7
13
  const limited_time_offer_participant_router_1 = require("./participant/limited-time-offer-participant.router");
14
+ const limited_time_offer_service_1 = require("./limited-time-offer.service");
15
+ const limited_time_offer_campaign_validation_1 = require("./campaign/limited-time-offer-campaign.validation");
16
+ const crmProcedure = (0, auth_1.createAuthenticatedProcedure)({ entityTypes: [enum_1.AuthEntityType.CRM] });
8
17
  exports.limitedTimeOfferRouter = (0, trpc_1.createTRPCRouter)({
18
+ getActive: trpc_1.publicProcedure
19
+ .input(limited_time_offer_campaign_validation_1.GetActiveCampaignSchema)
20
+ .output(limited_time_offer_campaign_validation_1.LtoActiveCampaignResponseSchema)
21
+ .query(async ({ input }) => error_handler_1.ErrorHandler.wrapAsync(async () => {
22
+ const result = await limited_time_offer_service_1.limitedTimeOfferService.getActiveCampaign(input);
23
+ return (0, response_1.response)('Active campaign fetched successfully', result);
24
+ })),
25
+ cancel: crmProcedure
26
+ .input(zod_1.z.object({ campaignId: validation_1.ZodValidation.objectId() }))
27
+ .output(limited_time_offer_campaign_validation_1.LtoEmptyResponseSchema)
28
+ .mutation(async ({ input }) => error_handler_1.ErrorHandler.wrapAsync(async () => {
29
+ await limited_time_offer_service_1.limitedTimeOfferService.cancelCampaign(input.campaignId);
30
+ return (0, response_1.response)('Campaign cancelled successfully');
31
+ })),
9
32
  config: limited_time_offer_router_1.configRouter,
10
33
  campaign: campaign_router_1.campaignRouter,
11
34
  participant: limited_time_offer_participant_router_1.participantRouter,
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer.router.js","sourceRoot":"/","sources":["modules/limited-time-offer/limited-time-offer.router.ts"],"names":[],"mappings":";;;AAAA,4DAAqE;AACrE,kFAAkE;AAClE,gEAA4D;AAC5D,+GAAwF;AAE3E,QAAA,sBAAsB,GAAG,IAAA,uBAAgB,EAAC;IACnD,MAAM,EAAE,wCAAY;IACpB,QAAQ,EAAE,gCAAc;IACxB,WAAW,EAAE,yDAAiB;CACjC,CAAC,CAAC","sourcesContent":["import { createTRPCRouter } from '@lyxa.ai/core/dist/libraries/trpc';\nimport { configRouter } from './config/limited-time-offer.router';\nimport { campaignRouter } from './campaign/campaign.router';\nimport { participantRouter } from './participant/limited-time-offer-participant.router';\n\nexport const limitedTimeOfferRouter = createTRPCRouter({\n config: configRouter,\n campaign: campaignRouter,\n participant: participantRouter,\n});\n"]}
1
+ {"version":3,"file":"limited-time-offer.router.js","sourceRoot":"/","sources":["modules/limited-time-offer/limited-time-offer.router.ts"],"names":[],"mappings":";;;AAAA,6BAAsB;AACtB,4DAAoF;AACpF,6EAAgG;AAChG,4DAAiE;AACjE,8EAAwE;AACxE,oEAA+D;AAC/D,wEAAsE;AACtE,kFAAgE;AAChE,gEAA0D;AAC1D,+GAAsF;AACtF,6EAAgF;AAChF,8GAI2D;AAE3D,MAAM,YAAY,GAAG,IAAA,mCAA4B,EAAC,EAAC,WAAW,EAAE,CAAC,qBAAc,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;AAE1E,QAAA,sBAAsB,GAAG,IAAA,uBAAgB,EAAC;IACnD,SAAS,EAAE,sBAAe;SACrB,KAAK,CAAC,gEAAuB,CAAC;SAC9B,MAAM,CAAC,wEAA+B,CAAC;SACvC,KAAK,CAAC,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE,CACrB,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,oDAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,IAAA,mBAAQ,EAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC,CACL;IAEL,MAAM,EAAE,YAAY;SACf,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC,EAAC,UAAU,EAAE,0BAAa,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;SACvD,MAAM,CAAC,+DAAsB,CAAC;SAC9B,QAAQ,CAAC,KAAK,EAAE,EAAC,KAAK,EAAC,EAAE,EAAE,CACxB,4BAAY,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC9B,MAAM,oDAAO,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,IAAA,mBAAQ,EAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC,CAAC,CACL;IAEL,MAAM,EAAE,wCAAY;IACpB,QAAQ,EAAE,gCAAc;IACxB,WAAW,EAAE,yDAAiB;CACjC,CAAC,CAAC","sourcesContent":["import {z} from 'zod';\nimport {createTRPCRouter, publicProcedure} from '@lyxa.ai/core/dist/libraries/trpc';\nimport {createAuthenticatedProcedure} from '@lyxa.ai/core/dist/libraries/trpc/middlewares/auth';\nimport {AuthEntityType} from '@lyxa.ai/core/dist/utilities/enum';\nimport {ErrorHandler} from '@lyxa.ai/core/dist/utilities/error-handler';\nimport {response} from '@lyxa.ai/core/dist/utilities/response';\nimport {ZodValidation} from '@lyxa.ai/core/dist/utilities/validation';\nimport {configRouter} from './config/limited-time-offer.router';\nimport {campaignRouter} from './campaign/campaign.router';\nimport {participantRouter} from './participant/limited-time-offer-participant.router';\nimport {limitedTimeOfferService as service} from './limited-time-offer.service';\nimport {\n GetActiveCampaignSchema,\n LtoActiveCampaignResponseSchema,\n LtoEmptyResponseSchema,\n} from './campaign/limited-time-offer-campaign.validation';\n\nconst crmProcedure = createAuthenticatedProcedure({entityTypes: [AuthEntityType.CRM]});\n\nexport const limitedTimeOfferRouter = createTRPCRouter({\n getActive: publicProcedure\n .input(GetActiveCampaignSchema)\n .output(LtoActiveCampaignResponseSchema)\n .query(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n const result = await service.getActiveCampaign(input);\n return response('Active campaign fetched successfully', result);\n })\n ),\n\n cancel: crmProcedure\n .input(z.object({campaignId: ZodValidation.objectId()}))\n .output(LtoEmptyResponseSchema)\n .mutation(async ({input}) =>\n ErrorHandler.wrapAsync(async () => {\n await service.cancelCampaign(input.campaignId);\n return response('Campaign cancelled successfully');\n })\n ),\n\n config: configRouter,\n campaign: campaignRouter,\n participant: participantRouter,\n});\n"]}
@@ -0,0 +1,18 @@
1
+ import { mongoose } from '@typegoose/typegoose';
2
+ import { GetActiveCampaignDTO } from '../limited-time-offer/campaign/limited-time-offer-campaign.validation';
3
+ export declare class LimitedTimeOfferService {
4
+ private campaignService;
5
+ private participantService;
6
+ constructor();
7
+ getActiveCampaign(input: GetActiveCampaignDTO): Promise<{
8
+ _id: mongoose.Types.ObjectId;
9
+ title?: string | undefined;
10
+ subtitle?: string | undefined;
11
+ startTime?: Date | null | undefined;
12
+ endTime?: Date | null | undefined;
13
+ } | null>;
14
+ cancelCampaign(campaignId: mongoose.Types.ObjectId): Promise<void>;
15
+ expireCampaign(campaignId: mongoose.Types.ObjectId): Promise<void>;
16
+ }
17
+ export declare const limitedTimeOfferService: LimitedTimeOfferService;
18
+ //# sourceMappingURL=limited-time-offer.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limited-time-offer.service.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/limited-time-offer.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAK9C,OAAO,EAAC,oBAAoB,EAAC,MAAM,6EAA6E,CAAC;AAWjH,qBACa,uBAAuB;IAChC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,kBAAkB,CAAqC;;IAOlD,iBAAiB,CAAC,KAAK,EAAE,oBAAoB;;;;;;;IAQ7C,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAIlF;AAED,eAAO,MAAM,uBAAuB,yBAAyC,CAAC"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.limitedTimeOfferService = exports.LimitedTimeOfferService = void 0;
46
+ const typedi_1 = __importStar(require("typedi"));
47
+ const limited_time_offer_campaign_service_1 = require("../limited-time-offer/campaign/services/limited-time-offer-campaign.service");
48
+ const limited_time_offer_participant_service_1 = require("../limited-time-offer/participant/services/limited-time-offer-participant.service");
49
+ let LimitedTimeOfferService = class LimitedTimeOfferService {
50
+ campaignService;
51
+ participantService;
52
+ constructor() {
53
+ this.campaignService = limited_time_offer_campaign_service_1.ltoCampaignService;
54
+ this.participantService = limited_time_offer_participant_service_1.ltoParticipantService;
55
+ }
56
+ async getActiveCampaign(input) {
57
+ const campaign = await this.campaignService.getActive();
58
+ if (!campaign)
59
+ return null;
60
+ const nearbyParticipants = await this.participantService.getNearby(campaign._id, input);
61
+ return nearbyParticipants.length > 0 ? campaign : null;
62
+ }
63
+ async cancelCampaign(campaignId) {
64
+ await this.campaignService.cancel(campaignId);
65
+ await this.participantService.removeCampaignMarketings(campaignId);
66
+ }
67
+ async expireCampaign(campaignId) {
68
+ await this.campaignService.expire(campaignId);
69
+ await this.participantService.removeCampaignMarketings(campaignId);
70
+ }
71
+ };
72
+ exports.LimitedTimeOfferService = LimitedTimeOfferService;
73
+ exports.LimitedTimeOfferService = LimitedTimeOfferService = __decorate([
74
+ (0, typedi_1.Service)(),
75
+ __metadata("design:paramtypes", [])
76
+ ], LimitedTimeOfferService);
77
+ exports.limitedTimeOfferService = typedi_1.default.get(LimitedTimeOfferService);
78
+ //# sourceMappingURL=limited-time-offer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limited-time-offer.service.js","sourceRoot":"/","sources":["modules/limited-time-offer/limited-time-offer.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0C;AAE1C,2IAG2F;AAE3F,oJAGiG;AAQ1F,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACxB,eAAe,CAAqB;IACpC,kBAAkB,CAAqC;IAE/D;QACI,IAAI,CAAC,eAAe,GAAG,wDAAkB,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,8DAAqB,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,KAA2B;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;QACxD,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxF,OAAO,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,UAAmC;QAC3D,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACvE,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,UAAmC;QAC3D,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACvE,CAAC;CACJ,CAAA;AA1BY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,gBAAO,GAAE;;GACG,uBAAuB,CA0BnC;AAEY,QAAA,uBAAuB,GAAG,gBAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC","sourcesContent":["import Container, {Service} from 'typedi';\nimport {mongoose} from '@typegoose/typegoose';\nimport {\n ltoCampaignService,\n LtoCampaignService,\n} from '@modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service';\nimport {GetActiveCampaignDTO} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.validation';\nimport {\n LimitedTimeOfferParticipantService,\n ltoParticipantService,\n} from '@modules/limited-time-offer/participant/services/limited-time-offer-participant.service';\n\n/**\n * Application/orchestration layer for the Limited Time Offer module. Owns every flow that spans the\n * campaign and participant aggregates so neither domain service has to reach across the boundary.\n * Pure single-aggregate operations stay on their respective domain services.\n */\n@Service()\nexport class LimitedTimeOfferService {\n private campaignService: LtoCampaignService;\n private participantService: LimitedTimeOfferParticipantService;\n\n constructor() {\n this.campaignService = ltoCampaignService;\n this.participantService = ltoParticipantService;\n }\n\n public async getActiveCampaign(input: GetActiveCampaignDTO) {\n const campaign = await this.campaignService.getActive();\n if (!campaign) return null;\n\n const nearbyParticipants = await this.participantService.getNearby(campaign._id, input);\n return nearbyParticipants.length > 0 ? campaign : null;\n }\n\n public async cancelCampaign(campaignId: mongoose.Types.ObjectId): Promise<void> {\n await this.campaignService.cancel(campaignId);\n await this.participantService.removeCampaignMarketings(campaignId);\n }\n\n public async expireCampaign(campaignId: mongoose.Types.ObjectId): Promise<void> {\n await this.campaignService.expire(campaignId);\n await this.participantService.removeCampaignMarketings(campaignId);\n }\n}\n\nexport const limitedTimeOfferService = Container.get(LimitedTimeOfferService);\n"]}