@lyxa.ai/marketing 1.0.65 → 1.0.67

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 (195) hide show
  1. package/dist/lib/index.d.ts +11810 -21
  2. package/dist/lib/index.d.ts.map +1 -1
  3. package/dist/lib/index.js +0 -2
  4. package/dist/lib/index.js.map +1 -1
  5. package/dist/lib/modules/coupon/routers/coupon.router.d.ts +0 -1074
  6. package/dist/lib/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  7. package/dist/lib/modules/coupon/services/coupon.service.d.ts +1 -1
  8. package/dist/lib/modules/coupon/services/coupon.service.js +1 -1
  9. package/dist/lib/modules/coupon/services/coupon.service.js.map +1 -1
  10. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js +3 -3
  11. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js.map +1 -1
  12. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  13. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js +0 -1
  14. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js.map +1 -1
  15. package/dist/lib/modules/coupon/transformers/coupon.transformer.d.ts +0 -50
  16. package/dist/lib/modules/coupon/transformers/coupon.transformer.d.ts.map +1 -1
  17. package/dist/lib/modules/coupon/validations/all-coupons.validation.d.ts +0 -822
  18. package/dist/lib/modules/coupon/validations/all-coupons.validation.d.ts.map +1 -1
  19. package/dist/lib/modules/coupon/validations/create-coupon.validation.d.ts +0 -98
  20. package/dist/lib/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
  21. package/dist/lib/modules/coupon/validations/create-coupon.validation.js +1 -4
  22. package/dist/lib/modules/coupon/validations/create-coupon.validation.js.map +1 -1
  23. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.d.ts +0 -374
  24. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.d.ts.map +1 -1
  25. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.js +0 -2
  26. package/dist/lib/modules/coupon/validations/referral-reward-coupon.validation.js.map +1 -1
  27. package/dist/lib/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  28. package/dist/lib/modules/deal-setting/services/deal-setting.service.js +1 -4
  29. package/dist/lib/modules/deal-setting/services/deal-setting.service.js.map +1 -1
  30. package/dist/lib/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  31. package/dist/lib/modules/featured-setting/services/featured-setting.service.js +0 -3
  32. package/dist/lib/modules/featured-setting/services/featured-setting.service.js.map +1 -1
  33. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts +8 -54
  34. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  35. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js +0 -13
  36. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js.map +1 -1
  37. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  38. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js +0 -9
  39. package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js.map +1 -1
  40. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +1 -0
  41. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  42. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js +6 -2
  43. package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js.map +1 -1
  44. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +3 -16
  45. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  46. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js +3 -22
  47. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js.map +1 -1
  48. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +0 -2
  49. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
  50. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js +0 -12
  51. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js.map +1 -1
  52. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +35 -242
  53. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  54. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js +1 -19
  55. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js.map +1 -1
  56. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +1 -10
  57. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  58. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js +1 -83
  59. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js.map +1 -1
  60. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +0 -4
  61. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  62. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js +6 -75
  63. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js.map +1 -1
  64. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
  65. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  66. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js +19 -46
  67. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js.map +1 -1
  68. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts +10 -241
  69. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  70. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts +0 -2
  71. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  72. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js +4 -13
  73. package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js.map +1 -1
  74. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
  75. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js +1 -1
  76. package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js.map +1 -1
  77. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +3 -30
  78. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
  79. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js +1 -23
  80. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js.map +1 -1
  81. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +0 -18
  82. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  83. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js +0 -103
  84. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js.map +1 -1
  85. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +2 -187
  86. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  87. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js +0 -34
  88. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js.map +1 -1
  89. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +116 -515
  90. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
  91. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js +6 -16
  92. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js.map +1 -1
  93. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +4 -11
  94. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -1
  95. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js +7 -48
  96. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js.map +1 -1
  97. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +5 -19
  98. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  99. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js +16 -114
  100. package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js.map +1 -1
  101. package/dist/lib/modules/marketing/services/marketing.service.d.ts +3 -7
  102. package/dist/lib/modules/marketing/services/marketing.service.d.ts.map +1 -1
  103. package/dist/lib/modules/marketing/services/marketing.service.js +32 -76
  104. package/dist/lib/modules/marketing/services/marketing.service.js.map +1 -1
  105. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts +0 -1
  106. package/dist/lib/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  107. package/dist/lib/modules/marketing/services/product-marketing.service.js +0 -32
  108. package/dist/lib/modules/marketing/services/product-marketing.service.js.map +1 -1
  109. package/dist/lib/modules/marketing/validations/punch-marketing.validation.d.ts +4 -4
  110. package/dist/lib/modules/referral-setting/validations/referral-setting.validation.d.ts.map +1 -1
  111. package/dist/lib/modules/referral-setting/validations/referral-setting.validation.js.map +1 -1
  112. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +2 -3
  113. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -1
  114. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js +3 -11
  115. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js.map +1 -1
  116. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts +0 -16
  117. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -1
  118. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts +2 -2
  119. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -1
  120. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.js.map +1 -1
  121. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +0 -19
  122. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -1
  123. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js +0 -1
  124. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js.map +1 -1
  125. package/dist/types/index.d.ts +11810 -21
  126. package/dist/types/index.d.ts.map +1 -1
  127. package/dist/types/modules/coupon/routers/coupon.router.d.ts +0 -1074
  128. package/dist/types/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  129. package/dist/types/modules/coupon/services/coupon.service.d.ts +1 -1
  130. package/dist/types/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  131. package/dist/types/modules/coupon/transformers/coupon.transformer.d.ts +0 -50
  132. package/dist/types/modules/coupon/transformers/coupon.transformer.d.ts.map +1 -1
  133. package/dist/types/modules/coupon/validations/all-coupons.validation.d.ts +0 -822
  134. package/dist/types/modules/coupon/validations/all-coupons.validation.d.ts.map +1 -1
  135. package/dist/types/modules/coupon/validations/create-coupon.validation.d.ts +0 -98
  136. package/dist/types/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
  137. package/dist/types/modules/coupon/validations/referral-reward-coupon.validation.d.ts +0 -374
  138. package/dist/types/modules/coupon/validations/referral-reward-coupon.validation.d.ts.map +1 -1
  139. package/dist/types/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  140. package/dist/types/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  141. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts +8 -54
  142. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  143. package/dist/types/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
  144. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +1 -0
  145. package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
  146. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +3 -16
  147. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
  148. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +0 -2
  149. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
  150. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +35 -242
  151. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  152. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +1 -10
  153. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
  154. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +0 -4
  155. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
  156. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
  157. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  158. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts +10 -241
  159. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  160. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts +0 -2
  161. package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
  162. package/dist/types/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
  163. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +3 -30
  164. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
  165. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +0 -18
  166. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
  167. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +2 -187
  168. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
  169. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +116 -515
  170. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
  171. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +4 -11
  172. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -1
  173. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +5 -19
  174. package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
  175. package/dist/types/modules/marketing/services/marketing.service.d.ts +3 -7
  176. package/dist/types/modules/marketing/services/marketing.service.d.ts.map +1 -1
  177. package/dist/types/modules/marketing/services/product-marketing.service.d.ts +0 -6
  178. package/dist/types/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
  179. package/dist/types/modules/marketing/validations/punch-marketing.validation.d.ts +4 -4
  180. package/dist/types/modules/referral-setting/validations/referral-setting.validation.d.ts.map +1 -1
  181. package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +2 -3
  182. package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -1
  183. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts +0 -16
  184. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -1
  185. package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts +2 -2
  186. package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -1
  187. package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +0 -19
  188. package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -1
  189. package/package.json +1 -1
  190. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +0 -1
  191. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +0 -1
  192. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js +0 -2
  193. package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.service.js.map +0 -1
  194. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +0 -1
  195. package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +0 -1
@@ -1,23 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LtoCampaignQueryBuilder = void 0;
4
- exports.nextOccurrenceDate = nextOccurrenceDate;
5
4
  const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
6
- function nextOccurrenceDate(repeatDays, refStart, refEnd) {
7
- const durationMs = refEnd.getTime() - refStart.getTime();
8
- const now = new Date();
9
- for (let daysAhead = 0; daysAhead < 8; daysAhead++) {
10
- const candidate = new Date(now);
11
- candidate.setDate(now.getDate() + daysAhead);
12
- candidate.setHours(refStart.getHours(), refStart.getMinutes(), refStart.getSeconds(), 0);
13
- if (repeatDays.includes(candidate.getDay()) && candidate.getTime() > now.getTime()) {
14
- const startDate = candidate;
15
- const endDate = new Date(startDate.getTime() + durationMs);
16
- return { startDate, endDate };
17
- }
18
- }
19
- return { startDate: refStart, endDate: refEnd };
20
- }
21
5
  const ARCHIVED_STATUSES = [enum_1.LimitedTimeOfferCampaignStatus.EXPIRED, enum_1.LimitedTimeOfferCampaignStatus.CANCELLED];
22
6
  const SORT_FIELD_MAP = {
23
7
  id: '_id',
@@ -28,18 +12,16 @@ const SORT_FIELD_MAP = {
28
12
  status: 'status',
29
13
  };
30
14
  class LtoCampaignQueryBuilder {
31
- static buildCreateInput(input) {
32
- const { dto, status, campaignNumber, config, startDate, endDate } = input;
15
+ static buildCreateInput(dto, status, campaignNumber, config) {
33
16
  return {
34
17
  campaignNumber,
35
18
  title: dto.title,
36
19
  subTitle: dto.subTitle,
37
- startDate,
38
- endDate,
20
+ startDate: dto.startDate,
21
+ endDate: dto.endDate,
39
22
  status,
40
23
  discountOptions: config.discountOptions,
41
24
  maxDiscountCaps: config.maxDiscountCaps,
42
- repeatDays: dto.repeatDays ?? [],
43
25
  };
44
26
  }
45
27
  static buildUpdateInput(campaign, dto) {
@@ -51,7 +33,6 @@ class LtoCampaignQueryBuilder {
51
33
  endDate: dto.endDate,
52
34
  ...(dto.discountOptions && { discountOptions: dto.discountOptions }),
53
35
  ...(dto.maxDiscountCaps && { maxDiscountCaps: dto.maxDiscountCaps }),
54
- ...(dto.repeatDays !== undefined && { repeatDays: dto.repeatDays }),
55
36
  status: isScheduledFromActive ? enum_1.LimitedTimeOfferCampaignStatus.SCHEDULED : campaign.status
56
37
  };
57
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.builder.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":"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","sourcesContent":["import {LimitedTimeOfferCampaign} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {CreateLtoCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO} from './limited-time-offer-campaign.validation';\n\nexport function nextOccurrenceDate(repeatDays: number[], refStart: Date, refEnd: Date): {startDate: Date; endDate: Date} {\n const durationMs = refEnd.getTime() - refStart.getTime();\n const now = new Date();\n\n for (let daysAhead = 0; daysAhead < 8; daysAhead++) {\n const candidate = new Date(now);\n candidate.setDate(now.getDate() + daysAhead);\n candidate.setHours(refStart.getHours(), refStart.getMinutes(), refStart.getSeconds(), 0);\n\n if (repeatDays.includes(candidate.getDay()) && candidate.getTime() > now.getTime()) {\n const startDate = candidate;\n const endDate = new Date(startDate.getTime() + durationMs);\n return {startDate, endDate};\n }\n }\n\n return {startDate: refStart, endDate: refEnd};\n}\n\nconst ARCHIVED_STATUSES = [LimitedTimeOfferCampaignStatus.EXPIRED, LimitedTimeOfferCampaignStatus.CANCELLED];\n\nconst SORT_FIELD_MAP: Record<string, string> = {\n id: '_id',\n campaignNumber: 'campaignNumber',\n startDateTime: 'startDate',\n endDateTime: 'endDate',\n shopsJoined: 'shopsJoined',\n status: 'status',\n};\n\nexport class LtoCampaignQueryBuilder {\n static buildCreateInput(input: {\n dto: CreateLtoCampaignDTO;\n status: LimitedTimeOfferCampaignStatus;\n campaignNumber: number;\n config: {discountOptions: number[]; maxDiscountCaps: number[]};\n startDate: Date;\n endDate: Date;\n }) {\n const {dto, status, campaignNumber, config, startDate, endDate} = input;\n return {\n campaignNumber,\n title: dto.title,\n subTitle: dto.subTitle,\n startDate,\n endDate,\n status,\n discountOptions: config.discountOptions,\n maxDiscountCaps: config.maxDiscountCaps,\n repeatDays: dto.repeatDays ?? [],\n };\n }\n\n static buildUpdateInput(campaign: LimitedTimeOfferCampaign, dto: UpdateLtoCampaignDTO) {\n const isScheduledFromActive =\n\t\t\t\t\tcampaign.status === LimitedTimeOfferCampaignStatus.ACTIVE && dto.startDate > campaign.startDate;\n return {\n title: dto.title ?? campaign.title,\n subTitle: dto.subTitle ?? campaign.subTitle,\n startDate: dto.startDate,\n endDate: dto.endDate,\n ...(dto.discountOptions && {discountOptions: dto.discountOptions}),\n ...(dto.maxDiscountCaps && {maxDiscountCaps: dto.maxDiscountCaps}),\n ...(dto.repeatDays !== undefined && {repeatDays: dto.repeatDays}),\n status: isScheduledFromActive ? LimitedTimeOfferCampaignStatus.SCHEDULED : campaign.status\n };\n }\n\n static buildHistoryFilter(dto: GetLtoCampaignHistoryDTO) {\n return dto.status ? {status: dto.status} : {status: {$in: ARCHIVED_STATUSES}};\n }\n\n static buildSortField(sortBy?: string): string {\n return sortBy ? (SORT_FIELD_MAP[sortBy] ?? 'createdAt') : 'createdAt';\n }\n\n static buildSortDirection(sortOrder?: string): 1 | -1 {\n return sortOrder === 'asc' ? 1 : -1;\n }\n}\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.builder.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.ts"],"names":[],"mappings":";;;AACA,4DAAiF;AAGjF,MAAM,iBAAiB,GAAG,CAAC,qCAA8B,CAAC,OAAO,EAAE,qCAA8B,CAAC,SAAS,CAAC,CAAC;AAE7G,MAAM,cAAc,GAA2B;IAC3C,EAAE,EAAE,KAAK;IACT,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,WAAW;IAC1B,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAa,uBAAuB;IAChC,MAAM,CAAC,gBAAgB,CACnB,GAAyB,EACzB,MAAsC,EACtC,cAAsB,EACtB,MAA8D;QAE9D,OAAO;YACH,cAAc;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM;YACN,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,eAAe,EAAE,MAAM,CAAC,eAAe;SAC1C,CAAC;IACN,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,QAAkC,EAAE,GAAyB;QACjF,MAAM,qBAAqB,GAC9B,QAAQ,CAAC,MAAM,KAAK,qCAA8B,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC7F,OAAO;YACH,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;YAClC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;YAC3C,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAC,eAAe,EAAE,GAAG,CAAC,eAAe,EAAC,CAAC;YAClE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAC,eAAe,EAAE,GAAG,CAAC,eAAe,EAAC,CAAC;YAClE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,qCAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;SAC7F,CAAC;IACN,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAA6B;QACnD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAE,iBAAiB,EAAC,EAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAe;QACjC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,SAAkB;QACxC,OAAO,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;CACJ;AA5CD,0DA4CC","sourcesContent":["import {LimitedTimeOfferCampaign} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {CreateLtoCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO} from './limited-time-offer-campaign.validation';\n\nconst ARCHIVED_STATUSES = [LimitedTimeOfferCampaignStatus.EXPIRED, LimitedTimeOfferCampaignStatus.CANCELLED];\n\nconst SORT_FIELD_MAP: Record<string, string> = {\n id: '_id',\n campaignNumber: 'campaignNumber',\n startDateTime: 'startDate',\n endDateTime: 'endDate',\n shopsJoined: 'shopsJoined',\n status: 'status',\n};\n\nexport class LtoCampaignQueryBuilder {\n static buildCreateInput(\n dto: CreateLtoCampaignDTO,\n status: LimitedTimeOfferCampaignStatus,\n campaignNumber: number,\n config: {discountOptions: number[]; maxDiscountCaps: number[]},\n ) {\n return {\n campaignNumber,\n title: dto.title,\n subTitle: dto.subTitle,\n startDate: dto.startDate,\n endDate: dto.endDate,\n status,\n discountOptions: config.discountOptions,\n maxDiscountCaps: config.maxDiscountCaps,\n };\n }\n\n static buildUpdateInput(campaign: LimitedTimeOfferCampaign, dto: UpdateLtoCampaignDTO) {\n const isScheduledFromActive =\n\t\t\t\t\tcampaign.status === LimitedTimeOfferCampaignStatus.ACTIVE && dto.startDate > campaign.startDate;\n return {\n title: dto.title ?? campaign.title,\n subTitle: dto.subTitle ?? campaign.subTitle,\n startDate: dto.startDate,\n endDate: dto.endDate,\n ...(dto.discountOptions && {discountOptions: dto.discountOptions}),\n ...(dto.maxDiscountCaps && {maxDiscountCaps: dto.maxDiscountCaps}),\n status: isScheduledFromActive ? LimitedTimeOfferCampaignStatus.SCHEDULED : campaign.status\n };\n }\n\n static buildHistoryFilter(dto: GetLtoCampaignHistoryDTO) {\n return dto.status ? {status: dto.status} : {status: {$in: ARCHIVED_STATUSES}};\n }\n\n static buildSortField(sortBy?: string): string {\n return sortBy ? (SORT_FIELD_MAP[sortBy] ?? 'createdAt') : 'createdAt';\n }\n\n static buildSortDirection(sortOrder?: string): 1 | -1 {\n return sortOrder === 'asc' ? 1 : -1;\n }\n}\n"]}
@@ -13,8 +13,6 @@ export declare class LtoCampaignRepository {
13
13
  updateById(id: mongoose.Types.ObjectId, updates: object): Promise<DocumentType<Model> | null>;
14
14
  setStatus(id: mongoose.Types.ObjectId, status: LimitedTimeOfferCampaignStatus, archive?: boolean): Promise<void>;
15
15
  nextCampaignNumber(): Promise<number>;
16
- findScheduledRecurring(): Promise<DocumentType<Model>[]>;
17
- findActiveRecurring(): Promise<DocumentType<Model>[]>;
18
16
  findHistory(dto: GetLtoCampaignHistoryDTO): Promise<{
19
17
  documents: LtoCampaignHistoryItemDTO[];
20
18
  total: number;
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.repository.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAEH,wBAAwB,IAAI,KAAK,EAGpC,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAc,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAC,wBAAwB,EAAE,yBAAyB,EAAC,MAAM,0CAA0C,CAAC;AAK7G,qBACa,qBAAqB;IAC9B,OAAO,CAAC,KAAK,CAAgE;;IAMvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAInD,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIlD,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIjD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI1E,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI7F,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,8BAA8B,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9G,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IASrC,sBAAsB,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAOxD,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAOrD,WAAW,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,yBAAyB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;CA4CrH;AAED,eAAO,MAAM,qBAAqB,uBAAuC,CAAC"}
1
+ {"version":3,"file":"limited-time-offer-campaign.repository.d.ts","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAEH,wBAAwB,IAAI,KAAK,EAGpC,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAc,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAC,wBAAwB,EAAE,yBAAyB,EAAC,MAAM,0CAA0C,CAAC;AAK7G,qBACa,qBAAqB;IAC9B,OAAO,CAAC,KAAK,CAAgE;;IAMvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAInD,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIlD,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAIjD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI1E,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAI7F,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,8BAA8B,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9G,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IASrC,WAAW,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,yBAAyB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;CA4CrH;AAED,eAAO,MAAM,qBAAqB,uBAAuC,CAAC"}
@@ -80,18 +80,6 @@ let LtoCampaignRepository = class LtoCampaignRepository {
80
80
  const counter = await models_1.CounterModel.findOneAndUpdate({ counterType: enum_1.CounterType.LTO_CAMPAIGN }, { $inc: { value: 1 } }, { upsert: true, new: true, setDefaultsOnInsert: true });
81
81
  return counter.value;
82
82
  }
83
- async findScheduledRecurring() {
84
- return this.model.find({
85
- status: enum_1.LimitedTimeOfferCampaignStatus.SCHEDULED,
86
- repeatDays: { $exists: true, $not: { $size: 0 } },
87
- });
88
- }
89
- async findActiveRecurring() {
90
- return this.model.find({
91
- status: enum_1.LimitedTimeOfferCampaignStatus.ACTIVE,
92
- repeatDays: { $exists: true, $not: { $size: 0 } },
93
- });
94
- }
95
83
  async findHistory(dto) {
96
84
  const filter = limited_time_offer_campaign_builder_1.LtoCampaignQueryBuilder.buildHistoryFilter(dto);
97
85
  const sortField = limited_time_offer_campaign_builder_1.LtoCampaignQueryBuilder.buildSortField(dto.sortBy);
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.repository.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, {Service} from 'typedi';\nimport {DocumentType, mongoose} from '@typegoose/typegoose';\nimport {\n CounterModel,\n LimitedTimeOfferCampaign as Model,\n LimitedTimeOfferCampaignModel,\n LimitedTimeOfferParticipantModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {SoftDeleteModel} from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {CounterType, LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {GetLtoCampaignHistoryDTO, LtoCampaignHistoryItemDTO} from './limited-time-offer-campaign.validation';\nimport {LtoCampaignQueryBuilder} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.builder';\n\nconst ACTIVE_STATUSES = [LimitedTimeOfferCampaignStatus.SCHEDULED, LimitedTimeOfferCampaignStatus.ACTIVE];\n\n@Service()\nexport class LtoCampaignRepository {\n private model: typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n\n constructor() {\n this.model = LimitedTimeOfferCampaignModel as typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n }\n\n async create(input: object): Promise<DocumentType<Model>> {\n return this.model.create(input);\n }\n\n async findCurrent(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: {$in: ACTIVE_STATUSES}}).sort({createdAt: -1});\n }\n\n async findActive(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: LimitedTimeOfferCampaignStatus.ACTIVE}).sort({createdAt: -1});\n }\n\n async findById(id: mongoose.Types.ObjectId): Promise<DocumentType<Model> | null> {\n return this.model.findById(id);\n }\n\n async hasActiveCampaign(): Promise<boolean> {\n return !!(await this.model.exists({status: {$in: ACTIVE_STATUSES}}));\n }\n\n async updateById(id: mongoose.Types.ObjectId, updates: object): Promise<DocumentType<Model> | null> {\n return this.model.findByIdAndUpdate(id, {$set: updates}, {new: true});\n }\n\n async setStatus(id: mongoose.Types.ObjectId, status: LimitedTimeOfferCampaignStatus, archive = false): Promise<void> {\n await this.model.findByIdAndUpdate(id, {\n $set: {status, ...(archive && {archivedAt: new Date()})},\n });\n }\n\n async nextCampaignNumber(): Promise<number> {\n const counter = await CounterModel.findOneAndUpdate(\n {counterType: CounterType.LTO_CAMPAIGN},\n {$inc: {value: 1}},\n {upsert: true, new: true, setDefaultsOnInsert: true},\n );\n return counter.value;\n }\n\n async findScheduledRecurring(): Promise<DocumentType<Model>[]> {\n return this.model.find({\n status: LimitedTimeOfferCampaignStatus.SCHEDULED,\n repeatDays: {$exists: true, $not: {$size: 0}},\n });\n }\n\n async findActiveRecurring(): Promise<DocumentType<Model>[]> {\n return this.model.find({\n status: LimitedTimeOfferCampaignStatus.ACTIVE,\n repeatDays: {$exists: true, $not: {$size: 0}},\n });\n }\n\n async findHistory(dto: GetLtoCampaignHistoryDTO): Promise<{documents: LtoCampaignHistoryItemDTO[]; total: number}> {\n const filter = LtoCampaignQueryBuilder.buildHistoryFilter(dto);\n const sortField = LtoCampaignQueryBuilder.buildSortField(dto.sortBy);\n const sortDirection = LtoCampaignQueryBuilder.buildSortDirection(dto.sortOrder);\n\n const [result] = await this.model.aggregate([\n {$match: filter},\n {\n $lookup: {\n from: LimitedTimeOfferParticipantModel.collection.name,\n let: {campaignId: '$_id'},\n pipeline: [\n {$match: {$expr: {$and: [{$eq: ['$campaign', '$$campaignId']}, {$eq: ['$isWithdrawn', false]}]}}},\n {$count: 'count'},\n ],\n as: 'joinedStats',\n },\n },\n {$addFields: {shopsJoined: {$ifNull: [{$arrayElemAt: ['$joinedStats.count', 0]}, 0]}}},\n {$sort: {[sortField]: sortDirection, _id: sortDirection}},\n {\n $facet: {\n total: [{$count: 'count'}],\n documents: [\n {$skip: (dto.page - 1) * dto.size},\n {$limit: dto.size},\n {$project: {_id: 1, campaignNumber: 1, startDate: 1, endDate: 1, status: 1, shopsJoined: 1}},\n ],\n },\n },\n ]);\n\n const total: number = result?.total?.[0]?.count ?? 0;\n const documents: LtoCampaignHistoryItemDTO[] = (result?.documents ?? []).map((d: any) => ({\n id: d._id.toString(),\n campaignNumber: d.campaignNumber,\n startDateTime: d.startDate,\n endDateTime: d.endDate,\n shopsJoined: d.shopsJoined,\n status: d.status,\n }));\n\n return {documents, total};\n }\n}\n\nexport const ltoCampaignRepository = Container.get(LtoCampaignRepository);\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.repository.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, {Service} from 'typedi';\nimport {DocumentType, mongoose} from '@typegoose/typegoose';\nimport {\n CounterModel,\n LimitedTimeOfferCampaign as Model,\n LimitedTimeOfferCampaignModel,\n LimitedTimeOfferParticipantModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {SoftDeleteModel} from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {CounterType, LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {GetLtoCampaignHistoryDTO, LtoCampaignHistoryItemDTO} from './limited-time-offer-campaign.validation';\nimport {LtoCampaignQueryBuilder} from '@modules/limited-time-offer/campaign/limited-time-offer-campaign.builder';\n\nconst ACTIVE_STATUSES = [LimitedTimeOfferCampaignStatus.SCHEDULED, LimitedTimeOfferCampaignStatus.ACTIVE];\n\n@Service()\nexport class LtoCampaignRepository {\n private model: typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n\n constructor() {\n this.model = LimitedTimeOfferCampaignModel as typeof LimitedTimeOfferCampaignModel & SoftDeleteModel<Model>;\n }\n\n async create(input: object): Promise<DocumentType<Model>> {\n return this.model.create(input);\n }\n\n async findCurrent(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: {$in: ACTIVE_STATUSES}}).sort({createdAt: -1});\n }\n\n async findActive(): Promise<DocumentType<Model> | null> {\n return this.model.findOne({status: LimitedTimeOfferCampaignStatus.ACTIVE}).sort({createdAt: -1});\n }\n\n async findById(id: mongoose.Types.ObjectId): Promise<DocumentType<Model> | null> {\n return this.model.findById(id);\n }\n\n async hasActiveCampaign(): Promise<boolean> {\n return !!(await this.model.exists({status: {$in: ACTIVE_STATUSES}}));\n }\n\n async updateById(id: mongoose.Types.ObjectId, updates: object): Promise<DocumentType<Model> | null> {\n return this.model.findByIdAndUpdate(id, {$set: updates}, {new: true});\n }\n\n async setStatus(id: mongoose.Types.ObjectId, status: LimitedTimeOfferCampaignStatus, archive = false): Promise<void> {\n await this.model.findByIdAndUpdate(id, {\n $set: {status, ...(archive && {archivedAt: new Date()})},\n });\n }\n\n async nextCampaignNumber(): Promise<number> {\n const counter = await CounterModel.findOneAndUpdate(\n {counterType: CounterType.LTO_CAMPAIGN},\n {$inc: {value: 1}},\n {upsert: true, new: true, setDefaultsOnInsert: true},\n );\n return counter.value;\n }\n\n async findHistory(dto: GetLtoCampaignHistoryDTO): Promise<{documents: LtoCampaignHistoryItemDTO[]; total: number}> {\n const filter = LtoCampaignQueryBuilder.buildHistoryFilter(dto);\n const sortField = LtoCampaignQueryBuilder.buildSortField(dto.sortBy);\n const sortDirection = LtoCampaignQueryBuilder.buildSortDirection(dto.sortOrder);\n\n const [result] = await this.model.aggregate([\n {$match: filter},\n {\n $lookup: {\n from: LimitedTimeOfferParticipantModel.collection.name,\n let: {campaignId: '$_id'},\n pipeline: [\n {$match: {$expr: {$and: [{$eq: ['$campaign', '$$campaignId']}, {$eq: ['$isWithdrawn', false]}]}}},\n {$count: 'count'},\n ],\n as: 'joinedStats',\n },\n },\n {$addFields: {shopsJoined: {$ifNull: [{$arrayElemAt: ['$joinedStats.count', 0]}, 0]}}},\n {$sort: {[sortField]: sortDirection, _id: sortDirection}},\n {\n $facet: {\n total: [{$count: 'count'}],\n documents: [\n {$skip: (dto.page - 1) * dto.size},\n {$limit: dto.size},\n {$project: {_id: 1, campaignNumber: 1, startDate: 1, endDate: 1, status: 1, shopsJoined: 1}},\n ],\n },\n },\n ]);\n\n const total: number = result?.total?.[0]?.count ?? 0;\n const documents: LtoCampaignHistoryItemDTO[] = (result?.documents ?? []).map((d: any) => ({\n id: d._id.toString(),\n campaignNumber: d.campaignNumber,\n startDateTime: d.startDate,\n endDateTime: d.endDate,\n shopsJoined: d.shopsJoined,\n status: d.status,\n }));\n\n return {documents, total};\n }\n}\n\nexport const ltoCampaignRepository = Container.get(LtoCampaignRepository);\n"]}