@lyxa.ai/marketing 1.0.48 → 1.0.49

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 (196) hide show
  1. package/dist/lib/event/event-initializations.js +2 -2
  2. package/dist/lib/event/event-initializations.js.map +1 -1
  3. package/dist/lib/index.d.ts +228 -493
  4. package/dist/lib/index.d.ts.map +1 -1
  5. package/dist/lib/modules/coupon/services/coupon.service.d.ts +2 -2
  6. package/dist/lib/modules/coupon/services/coupon.service.d.ts.map +1 -1
  7. package/dist/lib/modules/coupon/services/coupon.service.js.map +1 -1
  8. package/dist/lib/modules/coupon/services/global-coupon.service.d.ts.map +1 -1
  9. package/dist/lib/modules/coupon/services/global-coupon.service.js +2 -0
  10. package/dist/lib/modules/coupon/services/global-coupon.service.js.map +1 -1
  11. package/dist/lib/modules/coupon/services/helper.service.d.ts.map +1 -1
  12. package/dist/lib/modules/coupon/services/helper.service.js +2 -0
  13. package/dist/lib/modules/coupon/services/helper.service.js.map +1 -1
  14. package/dist/lib/modules/coupon/services/individual-user-coupon.service.d.ts.map +1 -1
  15. package/dist/lib/modules/coupon/services/individual-user-coupon.service.js +2 -0
  16. package/dist/lib/modules/coupon/services/individual-user-coupon.service.js.map +1 -1
  17. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  18. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js +2 -0
  19. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js.map +1 -1
  20. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts +10 -21
  21. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  22. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js +5 -4
  23. package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js.map +1 -1
  24. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +154 -0
  25. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  26. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js +13 -1
  27. package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js.map +1 -1
  28. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +8 -2
  29. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  30. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js +11 -2
  31. package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js.map +1 -1
  32. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts +10 -21
  33. package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  34. package/dist/lib/modules/tournament/config/config.builder.d.ts.map +1 -1
  35. package/dist/lib/modules/tournament/config/config.builder.js +4 -0
  36. package/dist/lib/modules/tournament/config/config.builder.js.map +1 -1
  37. package/dist/lib/modules/tournament/config/config.repository.d.ts +1 -0
  38. package/dist/lib/modules/tournament/config/config.repository.d.ts.map +1 -1
  39. package/dist/lib/modules/tournament/config/config.repository.js +7 -1
  40. package/dist/lib/modules/tournament/config/config.repository.js.map +1 -1
  41. package/dist/lib/modules/tournament/config/config.router.d.ts +96 -208
  42. package/dist/lib/modules/tournament/config/config.router.d.ts.map +1 -1
  43. package/dist/lib/modules/tournament/config/config.service.d.ts +2 -2
  44. package/dist/lib/modules/tournament/config/config.service.d.ts.map +1 -1
  45. package/dist/lib/modules/tournament/config/config.service.js.map +1 -1
  46. package/dist/lib/modules/tournament/config/config.validation.d.ts +412 -659
  47. package/dist/lib/modules/tournament/config/config.validation.d.ts.map +1 -1
  48. package/dist/lib/modules/tournament/config/config.validation.js +40 -25
  49. package/dist/lib/modules/tournament/config/config.validation.js.map +1 -1
  50. package/dist/lib/modules/tournament/match/events/evaluate-predictions.consumer.d.ts +2 -0
  51. package/dist/lib/modules/tournament/match/events/evaluate-predictions.consumer.d.ts.map +1 -0
  52. package/dist/lib/modules/tournament/match/events/evaluate-predictions.consumer.js +20 -0
  53. package/dist/lib/modules/tournament/match/events/evaluate-predictions.consumer.js.map +1 -0
  54. package/dist/lib/modules/tournament/match/events/evaluate-predictions.event.d.ts +15 -0
  55. package/dist/lib/modules/tournament/match/events/evaluate-predictions.event.d.ts.map +1 -0
  56. package/dist/lib/modules/tournament/match/events/evaluate-predictions.event.js +12 -0
  57. package/dist/lib/modules/tournament/match/events/evaluate-predictions.event.js.map +1 -0
  58. package/dist/lib/modules/tournament/match/match.builder.d.ts +5 -2
  59. package/dist/lib/modules/tournament/match/match.builder.d.ts.map +1 -1
  60. package/dist/lib/modules/tournament/match/match.builder.js +12 -7
  61. package/dist/lib/modules/tournament/match/match.builder.js.map +1 -1
  62. package/dist/lib/modules/tournament/match/match.router.d.ts +50 -187
  63. package/dist/lib/modules/tournament/match/match.router.d.ts.map +1 -1
  64. package/dist/lib/modules/tournament/match/match.router.js +0 -7
  65. package/dist/lib/modules/tournament/match/match.router.js.map +1 -1
  66. package/dist/lib/modules/tournament/match/match.service.d.ts +1 -11
  67. package/dist/lib/modules/tournament/match/match.service.d.ts.map +1 -1
  68. package/dist/lib/modules/tournament/match/match.service.js +17 -61
  69. package/dist/lib/modules/tournament/match/match.service.js.map +1 -1
  70. package/dist/lib/modules/tournament/match/match.validation.d.ts +46 -34
  71. package/dist/lib/modules/tournament/match/match.validation.d.ts.map +1 -1
  72. package/dist/lib/modules/tournament/match/match.validation.js +4 -2
  73. package/dist/lib/modules/tournament/match/match.validation.js.map +1 -1
  74. package/dist/lib/modules/tournament/notification/notification.service.d.ts +2 -1
  75. package/dist/lib/modules/tournament/notification/notification.service.d.ts.map +1 -1
  76. package/dist/lib/modules/tournament/notification/notification.service.js +16 -11
  77. package/dist/lib/modules/tournament/notification/notification.service.js.map +1 -1
  78. package/dist/lib/modules/tournament/participant/participant.router.d.ts +9 -9
  79. package/dist/lib/modules/tournament/participant/participant.validation.d.ts +84 -84
  80. package/dist/lib/modules/tournament/prediction/prediction.repository.d.ts +4 -1
  81. package/dist/lib/modules/tournament/prediction/prediction.repository.d.ts.map +1 -1
  82. package/dist/lib/modules/tournament/prediction/prediction.repository.js +20 -2
  83. package/dist/lib/modules/tournament/prediction/prediction.repository.js.map +1 -1
  84. package/dist/lib/modules/tournament/prediction/prediction.router.d.ts +12 -12
  85. package/dist/lib/modules/tournament/prediction/prediction.service.d.ts +8 -0
  86. package/dist/lib/modules/tournament/prediction/prediction.service.d.ts.map +1 -1
  87. package/dist/lib/modules/tournament/prediction/prediction.service.js +20 -3
  88. package/dist/lib/modules/tournament/prediction/prediction.service.js.map +1 -1
  89. package/dist/lib/modules/tournament/prediction/prediction.validation.d.ts +64 -64
  90. package/dist/lib/modules/tournament/reward/handlers/coupon-reward.handler.d.ts +3 -0
  91. package/dist/lib/modules/tournament/reward/handlers/coupon-reward.handler.d.ts.map +1 -1
  92. package/dist/lib/modules/tournament/reward/handlers/coupon-reward.handler.js +21 -5
  93. package/dist/lib/modules/tournament/reward/handlers/coupon-reward.handler.js.map +1 -1
  94. package/dist/lib/modules/tournament/reward/reward.builder.d.ts +6 -0
  95. package/dist/lib/modules/tournament/reward/reward.builder.d.ts.map +1 -0
  96. package/dist/lib/modules/tournament/reward/reward.builder.js +43 -0
  97. package/dist/lib/modules/tournament/reward/reward.builder.js.map +1 -0
  98. package/dist/lib/modules/tournament/reward/reward.interface.d.ts.map +1 -1
  99. package/dist/lib/modules/tournament/reward/reward.interface.js.map +1 -1
  100. package/dist/lib/modules/tournament/reward/reward.service.d.ts.map +1 -1
  101. package/dist/lib/modules/tournament/reward/reward.service.js.map +1 -1
  102. package/dist/lib/modules/tournament/reward/reward.types.d.ts +1 -1
  103. package/dist/lib/modules/tournament/reward/reward.types.d.ts.map +1 -1
  104. package/dist/lib/modules/tournament/reward/reward.types.js.map +1 -1
  105. package/dist/lib/modules/tournament/score/score.repository.d.ts +6 -0
  106. package/dist/lib/modules/tournament/score/score.repository.d.ts.map +1 -0
  107. package/dist/lib/modules/tournament/score/score.repository.js +60 -0
  108. package/dist/lib/modules/tournament/score/score.repository.js.map +1 -0
  109. package/dist/lib/modules/tournament/score/score.service.d.ts +6 -0
  110. package/dist/lib/modules/tournament/score/score.service.d.ts.map +1 -0
  111. package/dist/lib/modules/tournament/score/score.service.js +60 -0
  112. package/dist/lib/modules/tournament/score/score.service.js.map +1 -0
  113. package/dist/lib/modules/tournament/team/team.router.d.ts +22 -54
  114. package/dist/lib/modules/tournament/team/team.router.d.ts.map +1 -1
  115. package/dist/lib/modules/tournament/team/team.validation.d.ts +14 -14
  116. package/dist/lib/modules/tournament/tournament.router.d.ts +216 -470
  117. package/dist/lib/modules/tournament/tournament.router.d.ts.map +1 -1
  118. package/dist/lib/modules/tournament/tournament.router.js +8 -0
  119. package/dist/lib/modules/tournament/tournament.router.js.map +1 -1
  120. package/dist/lib/modules/tournament/tournament.service.d.ts +8 -0
  121. package/dist/lib/modules/tournament/tournament.service.d.ts.map +1 -0
  122. package/dist/lib/modules/tournament/tournament.service.js +63 -0
  123. package/dist/lib/modules/tournament/tournament.service.js.map +1 -0
  124. package/dist/lib/modules/tournament/tournament.validation.d.ts +133 -0
  125. package/dist/lib/modules/tournament/tournament.validation.d.ts.map +1 -0
  126. package/dist/lib/modules/tournament/tournament.validation.js +14 -0
  127. package/dist/lib/modules/tournament/tournament.validation.js.map +1 -0
  128. package/dist/types/index.d.ts +228 -493
  129. package/dist/types/index.d.ts.map +1 -1
  130. package/dist/types/modules/coupon/services/coupon.service.d.ts +2 -2
  131. package/dist/types/modules/coupon/services/coupon.service.d.ts.map +1 -1
  132. package/dist/types/modules/coupon/services/global-coupon.service.d.ts.map +1 -1
  133. package/dist/types/modules/coupon/services/helper.service.d.ts.map +1 -1
  134. package/dist/types/modules/coupon/services/individual-user-coupon.service.d.ts.map +1 -1
  135. package/dist/types/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  136. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts +10 -21
  137. package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
  138. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +154 -0
  139. package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
  140. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +8 -2
  141. package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
  142. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts +10 -21
  143. package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
  144. package/dist/types/modules/tournament/config/config.builder.d.ts.map +1 -1
  145. package/dist/types/modules/tournament/config/config.repository.d.ts +1 -0
  146. package/dist/types/modules/tournament/config/config.repository.d.ts.map +1 -1
  147. package/dist/types/modules/tournament/config/config.router.d.ts +96 -208
  148. package/dist/types/modules/tournament/config/config.router.d.ts.map +1 -1
  149. package/dist/types/modules/tournament/config/config.service.d.ts +2 -2
  150. package/dist/types/modules/tournament/config/config.service.d.ts.map +1 -1
  151. package/dist/types/modules/tournament/config/config.validation.d.ts +412 -659
  152. package/dist/types/modules/tournament/config/config.validation.d.ts.map +1 -1
  153. package/dist/types/modules/tournament/match/events/evaluate-predictions.consumer.d.ts +2 -0
  154. package/dist/types/modules/tournament/match/events/evaluate-predictions.consumer.d.ts.map +1 -0
  155. package/dist/types/modules/tournament/match/events/evaluate-predictions.event.d.ts +15 -0
  156. package/dist/types/modules/tournament/match/events/evaluate-predictions.event.d.ts.map +1 -0
  157. package/dist/types/modules/tournament/match/match.builder.d.ts +5 -2
  158. package/dist/types/modules/tournament/match/match.builder.d.ts.map +1 -1
  159. package/dist/types/modules/tournament/match/match.router.d.ts +50 -187
  160. package/dist/types/modules/tournament/match/match.router.d.ts.map +1 -1
  161. package/dist/types/modules/tournament/match/match.service.d.ts +1 -11
  162. package/dist/types/modules/tournament/match/match.service.d.ts.map +1 -1
  163. package/dist/types/modules/tournament/match/match.validation.d.ts +46 -34
  164. package/dist/types/modules/tournament/match/match.validation.d.ts.map +1 -1
  165. package/dist/types/modules/tournament/notification/notification.service.d.ts +2 -1
  166. package/dist/types/modules/tournament/notification/notification.service.d.ts.map +1 -1
  167. package/dist/types/modules/tournament/participant/participant.router.d.ts +9 -9
  168. package/dist/types/modules/tournament/participant/participant.validation.d.ts +84 -84
  169. package/dist/types/modules/tournament/prediction/prediction.repository.d.ts +4 -1
  170. package/dist/types/modules/tournament/prediction/prediction.repository.d.ts.map +1 -1
  171. package/dist/types/modules/tournament/prediction/prediction.router.d.ts +12 -12
  172. package/dist/types/modules/tournament/prediction/prediction.service.d.ts +8 -0
  173. package/dist/types/modules/tournament/prediction/prediction.service.d.ts.map +1 -1
  174. package/dist/types/modules/tournament/prediction/prediction.validation.d.ts +64 -64
  175. package/dist/types/modules/tournament/reward/handlers/coupon-reward.handler.d.ts +3 -0
  176. package/dist/types/modules/tournament/reward/handlers/coupon-reward.handler.d.ts.map +1 -1
  177. package/dist/types/modules/tournament/reward/reward.builder.d.ts +6 -0
  178. package/dist/types/modules/tournament/reward/reward.builder.d.ts.map +1 -0
  179. package/dist/types/modules/tournament/reward/reward.interface.d.ts.map +1 -1
  180. package/dist/types/modules/tournament/reward/reward.service.d.ts.map +1 -1
  181. package/dist/types/modules/tournament/reward/reward.types.d.ts +1 -1
  182. package/dist/types/modules/tournament/reward/reward.types.d.ts.map +1 -1
  183. package/dist/types/modules/tournament/score/score.repository.d.ts +6 -0
  184. package/dist/types/modules/tournament/score/score.repository.d.ts.map +1 -0
  185. package/dist/types/modules/tournament/score/score.service.d.ts +6 -0
  186. package/dist/types/modules/tournament/score/score.service.d.ts.map +1 -0
  187. package/dist/types/modules/tournament/team/team.router.d.ts +22 -54
  188. package/dist/types/modules/tournament/team/team.router.d.ts.map +1 -1
  189. package/dist/types/modules/tournament/team/team.validation.d.ts +14 -14
  190. package/dist/types/modules/tournament/tournament.router.d.ts +216 -470
  191. package/dist/types/modules/tournament/tournament.router.d.ts.map +1 -1
  192. package/dist/types/modules/tournament/tournament.service.d.ts +8 -0
  193. package/dist/types/modules/tournament/tournament.service.d.ts.map +1 -0
  194. package/dist/types/modules/tournament/tournament.validation.d.ts +133 -0
  195. package/dist/types/modules/tournament/tournament.validation.d.ts.map +1 -0
  196. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LtoEmptyResponseSchema = exports.LtoCampaignParticipantsResponseSchema = exports.LtoCampaignHistoryResponseSchema = exports.LtoCampaignNullableResponseSchema = exports.LtoCampaignResponseSchema = exports.LtoCampaignParticipantItemSchema = exports.LtoCampaignHistoryItemSchema = exports.LtoCampaignSchema = exports.GetLtoCampaignParticipantsSchema = exports.GetLtoCampaignHistorySchema = exports.UpdateLtoCampaignSchema = exports.CreateLtoCampaignSchema = void 0;
3
+ exports.LtoEmptyResponseSchema = exports.LtoCampaignParticipantsResponseSchema = exports.LtoCampaignHistoryResponseSchema = exports.LtoActiveCampaignResponseSchema = exports.LtoCampaignNullableResponseSchema = exports.LtoCampaignResponseSchema = exports.LtoActiveCampaignSchema = exports.LtoCampaignParticipantItemSchema = exports.LtoCampaignHistoryItemSchema = exports.LtoCampaignSchema = exports.GetLtoCampaignParticipantsSchema = exports.GetLtoCampaignHistorySchema = exports.GetActiveCampaignSchema = exports.UpdateLtoCampaignSchema = exports.CreateLtoCampaignSchema = void 0;
4
4
  const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
5
5
  const validation_1 = require("@lyxa.ai/core/dist/utilities/validation");
6
6
  const zod_1 = require("zod");
@@ -40,6 +40,10 @@ exports.UpdateLtoCampaignSchema = zod_1.z
40
40
  ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, message: 'End date must be after start date', path: ['endDate'] });
41
41
  }
42
42
  });
43
+ exports.GetActiveCampaignSchema = zod_1.z.object({
44
+ latitude: validation_1.ZodValidation.number('Latitude').optional(),
45
+ longitude: validation_1.ZodValidation.number('Longitude').optional(),
46
+ });
43
47
  exports.GetLtoCampaignHistorySchema = zod_1.z.object({
44
48
  page: zod_1.z.number().int().positive().default(1),
45
49
  size: zod_1.z.number().int().positive().max(50).default(20),
@@ -89,8 +93,16 @@ exports.LtoCampaignParticipantItemSchema = zod_1.z.object({
89
93
  discountPercentage: validation_1.ZodValidation.number('Discount percentage').optional(),
90
94
  maxDiscountCap: validation_1.ZodValidation.number('Max discount cap').optional(),
91
95
  });
96
+ exports.LtoActiveCampaignSchema = zod_1.z.object({
97
+ _id: validation_1.ZodValidation.objectId(),
98
+ title: validation_1.ZodValidation.string('Campaign title').optional(),
99
+ subtitle: validation_1.ZodValidation.string('Campaign subtitle').optional(),
100
+ startTime: zod_1.z.date().nullable().optional(),
101
+ endTime: zod_1.z.date().nullable().optional(),
102
+ });
92
103
  exports.LtoCampaignResponseSchema = (0, validation_1.createResponseSchema)(exports.LtoCampaignSchema);
93
104
  exports.LtoCampaignNullableResponseSchema = (0, validation_1.createResponseSchema)(exports.LtoCampaignSchema.nullable());
105
+ exports.LtoActiveCampaignResponseSchema = (0, validation_1.createResponseSchema)(exports.LtoActiveCampaignSchema.nullable());
94
106
  exports.LtoCampaignHistoryResponseSchema = (0, validation_1.createResponseSchema)(exports.LtoCampaignHistoryItemSchema);
95
107
  exports.LtoCampaignParticipantsResponseSchema = (0, validation_1.createResponseSchema)(exports.LtoCampaignParticipantItemSchema);
96
108
  exports.LtoEmptyResponseSchema = zod_1.z.object({
@@ -1 +1 @@
1
- {"version":3,"file":"limited-time-offer-campaign.validation.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {createPaginatedSchema, createResponseSchema, DTO, ZodValidation} from '@lyxa.ai/core/dist/utilities/validation';\nimport {z} from 'zod';\n\nexport const CreateLtoCampaignSchema = z\n .object({\n title: ZodValidation.string('Campaign title').optional(),\n subTitle: ZodValidation.string('Campaign subtitle').optional(),\n startDate: ZodValidation.date('Start date'),\n endDate: ZodValidation.date('End date'),\n })\n .superRefine((d, ctx) => {\n const now = new Date();\n if (d.endDate <= now) {\n ctx.addIssue({code: z.ZodIssueCode.custom, message: 'End date cannot be in the past', path: ['endDate']});\n }\n if (d.endDate <= d.startDate) {\n ctx.addIssue({code: z.ZodIssueCode.custom, message: 'End date must be after start date', path: ['endDate']});\n }\n });\n\nexport const UpdateLtoCampaignSchema = z\n .object({\n _id: ZodValidation.objectId(),\n title: ZodValidation.string('Campaign title').optional(),\n subTitle: ZodValidation.string('Campaign subtitle').optional(),\n startDate: ZodValidation.date('Start date'),\n endDate: ZodValidation.date('End date'),\n discountOptions: z.array(ZodValidation.number('Discount option')).min(1).optional(),\n maxDiscountCaps: z.array(ZodValidation.number('Max discount cap')).min(1).optional(),\n confirmActive: z.boolean().optional(),\n })\n .superRefine((d, ctx) => {\n const now = new Date();\n if (d.endDate <= now) {\n ctx.addIssue({code: z.ZodIssueCode.custom, message: 'End date cannot be in the past', path: ['endDate']});\n }\n if (d.endDate <= d.startDate) {\n ctx.addIssue({code: z.ZodIssueCode.custom, message: 'End date must be after start date', path: ['endDate']});\n }\n });\n\nexport const GetLtoCampaignHistorySchema = z.object({\n page: z.number().int().positive().default(1),\n size: z.number().int().positive().max(50).default(20),\n status: z\n .union([\n z.literal(LimitedTimeOfferCampaignStatus.EXPIRED),\n z.literal(LimitedTimeOfferCampaignStatus.CANCELLED),\n ])\n .optional(),\n sortBy: z\n .enum(['id', 'campaignNumber', 'startDateTime', 'endDateTime', 'shopsJoined', 'status'])\n .optional(),\n sortOrder: z.enum(['asc', 'desc']).optional(),\n});\n\nexport const GetLtoCampaignParticipantsSchema = z.object({\n campaignId: ZodValidation.objectId(),\n search: ZodValidation.string('Search').optional(),\n page: z.number().int().positive().default(1),\n size: z.number().int().positive().max(100).default(20),\n});\n\nexport const LtoCampaignSchema = z.object({\n _id: ZodValidation.objectId(),\n campaignNumber: ZodValidation.number('Campaign number'),\n title: ZodValidation.string('Campaign title').optional(),\n subTitle: ZodValidation.string('Campaign subtitle').optional(),\n startDate: z.date().nullable().optional(),\n endDate: z.date().nullable().optional(),\n status: ZodValidation.enumType(LimitedTimeOfferCampaignStatus, 'Status'),\n discountOptions: z.array(ZodValidation.number('Discount option')).default([]),\n maxDiscountCaps: z.array(ZodValidation.number('Max discount cap')).default([]),\n archivedAt: z.date().nullable().optional(),\n createdAt: z.date().nullable().optional(),\n updatedAt: z.date().nullable().optional(),\n});\n\nexport const LtoCampaignHistoryItemSchema = z.object({\n id: z.string(),\n campaignNumber: ZodValidation.number('Campaign number'),\n startDateTime: z.date().nullable().optional(),\n endDateTime: z.date().nullable().optional(),\n shopsJoined: ZodValidation.number('Shops joined'),\n status: ZodValidation.enumType(LimitedTimeOfferCampaignStatus, 'Status'),\n});\n\nexport const LtoCampaignParticipantItemSchema = z.object({\n shopName: z.string().nullable(),\n shopPhoto: z.string().nullable().optional(),\n joinedAt: z.date(),\n discountPercentage: ZodValidation.number('Discount percentage').optional(),\n maxDiscountCap: ZodValidation.number('Max discount cap').optional(),\n});\n\n// Response schemas\nexport const LtoCampaignResponseSchema = createResponseSchema(LtoCampaignSchema);\nexport const LtoCampaignNullableResponseSchema = createResponseSchema(LtoCampaignSchema.nullable());\nexport const LtoCampaignHistoryResponseSchema = createResponseSchema(LtoCampaignHistoryItemSchema);\nexport const LtoCampaignParticipantsResponseSchema = createResponseSchema(LtoCampaignParticipantItemSchema);\nexport const LtoEmptyResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n\n// DTOs\nexport type CreateLtoCampaignDTO = DTO<typeof CreateLtoCampaignSchema>;\nexport type UpdateLtoCampaignDTO = DTO<typeof UpdateLtoCampaignSchema>;\nexport type GetLtoCampaignHistoryDTO = DTO<typeof GetLtoCampaignHistorySchema>;\nexport type GetLtoCampaignParticipantsDTO = DTO<typeof GetLtoCampaignParticipantsSchema>;\nexport type LtoCampaignDTO = DTO<typeof LtoCampaignSchema>;\nexport type LtoCampaignHistoryItemDTO = DTO<typeof LtoCampaignHistoryItemSchema>;\nexport type LtoCampaignParticipantItemDTO = DTO<typeof LtoCampaignParticipantItemSchema>;\n"]}
1
+ {"version":3,"file":"limited-time-offer-campaign.validation.js","sourceRoot":"/","sources":["modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {LimitedTimeOfferCampaignStatus} from '@lyxa.ai/core/dist/utilities/enum';\nimport {createPaginatedSchema, createResponseSchema, DTO, ZodValidation} from '@lyxa.ai/core/dist/utilities/validation';\nimport {z} from 'zod';\n\nexport const CreateLtoCampaignSchema = z\n .object({\n title: ZodValidation.string('Campaign title').optional(),\n subTitle: ZodValidation.string('Campaign subtitle').optional(),\n startDate: ZodValidation.date('Start date'),\n endDate: ZodValidation.date('End date'),\n })\n .superRefine((d, ctx) => {\n const now = new Date();\n if (d.endDate <= now) {\n ctx.addIssue({code: z.ZodIssueCode.custom, message: 'End date cannot be in the past', path: ['endDate']});\n }\n if (d.endDate <= d.startDate) {\n ctx.addIssue({code: z.ZodIssueCode.custom, message: 'End date must be after start date', path: ['endDate']});\n }\n });\n\nexport const UpdateLtoCampaignSchema = z\n .object({\n _id: ZodValidation.objectId(),\n title: ZodValidation.string('Campaign title').optional(),\n subTitle: ZodValidation.string('Campaign subtitle').optional(),\n startDate: ZodValidation.date('Start date'),\n endDate: ZodValidation.date('End date'),\n discountOptions: z.array(ZodValidation.number('Discount option')).min(1).optional(),\n maxDiscountCaps: z.array(ZodValidation.number('Max discount cap')).min(1).optional(),\n confirmActive: z.boolean().optional(),\n })\n .superRefine((d, ctx) => {\n const now = new Date();\n if (d.endDate <= now) {\n ctx.addIssue({code: z.ZodIssueCode.custom, message: 'End date cannot be in the past', path: ['endDate']});\n }\n if (d.endDate <= d.startDate) {\n ctx.addIssue({code: z.ZodIssueCode.custom, message: 'End date must be after start date', path: ['endDate']});\n }\n });\n\nexport const GetActiveCampaignSchema = z.object({\n latitude: ZodValidation.number('Latitude').optional(),\n longitude: ZodValidation.number('Longitude').optional(),\n});\n\nexport const GetLtoCampaignHistorySchema = z.object({\n page: z.number().int().positive().default(1),\n size: z.number().int().positive().max(50).default(20),\n status: z\n .union([\n z.literal(LimitedTimeOfferCampaignStatus.EXPIRED),\n z.literal(LimitedTimeOfferCampaignStatus.CANCELLED),\n ])\n .optional(),\n sortBy: z\n .enum(['id', 'campaignNumber', 'startDateTime', 'endDateTime', 'shopsJoined', 'status'])\n .optional(),\n sortOrder: z.enum(['asc', 'desc']).optional(),\n});\n\nexport const GetLtoCampaignParticipantsSchema = z.object({\n campaignId: ZodValidation.objectId(),\n search: ZodValidation.string('Search').optional(),\n page: z.number().int().positive().default(1),\n size: z.number().int().positive().max(100).default(20),\n});\n\nexport const LtoCampaignSchema = z.object({\n _id: ZodValidation.objectId(),\n campaignNumber: ZodValidation.number('Campaign number'),\n title: ZodValidation.string('Campaign title').optional(),\n subTitle: ZodValidation.string('Campaign subtitle').optional(),\n startDate: z.date().nullable().optional(),\n endDate: z.date().nullable().optional(),\n status: ZodValidation.enumType(LimitedTimeOfferCampaignStatus, 'Status'),\n discountOptions: z.array(ZodValidation.number('Discount option')).default([]),\n maxDiscountCaps: z.array(ZodValidation.number('Max discount cap')).default([]),\n archivedAt: z.date().nullable().optional(),\n createdAt: z.date().nullable().optional(),\n updatedAt: z.date().nullable().optional(),\n});\n\nexport const LtoCampaignHistoryItemSchema = z.object({\n id: z.string(),\n campaignNumber: ZodValidation.number('Campaign number'),\n startDateTime: z.date().nullable().optional(),\n endDateTime: z.date().nullable().optional(),\n shopsJoined: ZodValidation.number('Shops joined'),\n status: ZodValidation.enumType(LimitedTimeOfferCampaignStatus, 'Status'),\n});\n\nexport const LtoCampaignParticipantItemSchema = z.object({\n shopName: z.string().nullable(),\n shopPhoto: z.string().nullable().optional(),\n joinedAt: z.date(),\n discountPercentage: ZodValidation.number('Discount percentage').optional(),\n maxDiscountCap: ZodValidation.number('Max discount cap').optional(),\n});\n\nexport const LtoActiveCampaignSchema = z.object({\n _id: ZodValidation.objectId(),\n title: ZodValidation.string('Campaign title').optional(),\n subtitle: ZodValidation.string('Campaign subtitle').optional(),\n startTime: z.date().nullable().optional(),\n endTime: z.date().nullable().optional(),\n});\n\n// Response schemas\nexport const LtoCampaignResponseSchema = createResponseSchema(LtoCampaignSchema);\nexport const LtoCampaignNullableResponseSchema = createResponseSchema(LtoCampaignSchema.nullable());\nexport const LtoActiveCampaignResponseSchema = createResponseSchema(LtoActiveCampaignSchema.nullable());\nexport const LtoCampaignHistoryResponseSchema = createResponseSchema(LtoCampaignHistoryItemSchema);\nexport const LtoCampaignParticipantsResponseSchema = createResponseSchema(LtoCampaignParticipantItemSchema);\nexport const LtoEmptyResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n\n// DTOs\nexport type GetActiveCampaignDTO = DTO<typeof GetActiveCampaignSchema>;\nexport type CreateLtoCampaignDTO = DTO<typeof CreateLtoCampaignSchema>;\nexport type UpdateLtoCampaignDTO = DTO<typeof UpdateLtoCampaignSchema>;\nexport type GetLtoCampaignHistoryDTO = DTO<typeof GetLtoCampaignHistorySchema>;\nexport type GetLtoCampaignParticipantsDTO = DTO<typeof GetLtoCampaignParticipantsSchema>;\nexport type LtoCampaignDTO = DTO<typeof LtoCampaignSchema>;\nexport type LtoActiveCampaignDTO = DTO<typeof LtoActiveCampaignSchema>;\nexport type LtoCampaignHistoryItemDTO = DTO<typeof LtoCampaignHistoryItemSchema>;\nexport type LtoCampaignParticipantItemDTO = DTO<typeof LtoCampaignParticipantItemSchema>;\n"]}
@@ -1,7 +1,7 @@
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, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO } from '../limited-time-offer-campaign.validation';
4
+ import { CreateLtoCampaignDTO, GetActiveCampaignDTO, GetLtoCampaignHistoryDTO, UpdateLtoCampaignDTO } from '../limited-time-offer-campaign.validation';
5
5
  export declare class LtoCampaignService {
6
6
  private repository;
7
7
  private scheduler;
@@ -11,7 +11,13 @@ export declare class LtoCampaignService {
11
11
  constructor();
12
12
  create(dto: CreateLtoCampaignDTO): Promise<DocumentType<Model>>;
13
13
  getCurrent(): Promise<DocumentType<Model> | null>;
14
- getActive(): 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>;
15
21
  getById(campaignId: mongoose.Types.ObjectId): Promise<DocumentType<Model>>;
16
22
  getHistory(dto: GetLtoCampaignHistoryDTO): Promise<{
17
23
  documents: {
@@ -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,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;IAIT,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,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"}
@@ -83,8 +83,17 @@ let LtoCampaignService = class LtoCampaignService {
83
83
  async getCurrent() {
84
84
  return this.repository.findCurrent();
85
85
  }
86
- async getActive() {
87
- return this.repository.findActive();
86
+ async getActive(dto) {
87
+ const campaign = await this.repository.findActive();
88
+ if (!campaign)
89
+ return null;
90
+ return {
91
+ _id: campaign._id,
92
+ title: campaign.title,
93
+ subtitle: campaign.subTitle,
94
+ startTime: campaign.startDate,
95
+ endTime: campaign.endDate,
96
+ };
88
97
  }
89
98
  async getById(campaignId) {
90
99
  const campaign = await this.repository.findById(campaignId);
@@ -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":"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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 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() {\n return this.repository.findActive();\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"]}
@@ -242,37 +242,26 @@ export declare const limitedTimeOfferRouter: import("@trpc/server").TRPCBuiltRou
242
242
  meta: object;
243
243
  }>;
244
244
  getActive: import("@trpc/server").TRPCQueryProcedure<{
245
- input: void;
245
+ input: {
246
+ latitude?: number | undefined;
247
+ longitude?: number | undefined;
248
+ };
246
249
  output: {
247
250
  message: string;
248
251
  success: boolean;
249
252
  data?: {
250
- status: import("@lyxa.ai/core/dist/utilities/enum").LimitedTimeOfferCampaignStatus;
251
253
  _id: string | import("mongoose").Types.ObjectId;
252
- campaignNumber: number;
253
- createdAt?: Date | null | undefined;
254
- startDate?: Date | null | undefined;
255
- endDate?: Date | null | undefined;
256
- updatedAt?: Date | null | undefined;
257
254
  title?: string | undefined;
258
- subTitle?: string | undefined;
259
- discountOptions?: number[] | undefined;
260
- maxDiscountCaps?: number[] | undefined;
261
- archivedAt?: Date | null | undefined;
255
+ subtitle?: string | undefined;
256
+ startTime?: Date | null | undefined;
257
+ endTime?: Date | null | undefined;
262
258
  } | {
263
259
  documents: ({
264
- status: import("@lyxa.ai/core/dist/utilities/enum").LimitedTimeOfferCampaignStatus;
265
260
  _id: string | import("mongoose").Types.ObjectId;
266
- campaignNumber: number;
267
- createdAt?: Date | null | undefined;
268
- startDate?: Date | null | undefined;
269
- endDate?: Date | null | undefined;
270
- updatedAt?: Date | null | undefined;
271
261
  title?: string | undefined;
272
- subTitle?: string | undefined;
273
- discountOptions?: number[] | undefined;
274
- maxDiscountCaps?: number[] | undefined;
275
- archivedAt?: Date | null | undefined;
262
+ subtitle?: string | undefined;
263
+ startTime?: Date | null | undefined;
264
+ endTime?: Date | null | undefined;
276
265
  } | null)[];
277
266
  metadata?: {
278
267
  page: number;
@@ -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":"AAKA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.builder.d.ts","sourceRoot":"/","sources":["modules/tournament/config/config.builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAErE,qBAAa,uBAAuB;IAChC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQrF"}
1
+ {"version":3,"file":"config.builder.d.ts","sourceRoot":"/","sources":["modules/tournament/config/config.builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAErE,qBAAa,uBAAuB;IAChC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUrF"}
@@ -4,6 +4,8 @@ exports.TournamentConfigBuilder = void 0;
4
4
  class TournamentConfigBuilder {
5
5
  static buildUpdate(input) {
6
6
  const updates = {};
7
+ if (input.name !== undefined)
8
+ updates.name = input.name;
7
9
  if (input.tag !== undefined)
8
10
  updates.tag = input.tag;
9
11
  if (input.startDate !== undefined)
@@ -12,6 +14,8 @@ class TournamentConfigBuilder {
12
14
  updates.endDate = input.endDate;
13
15
  if (input.status !== undefined)
14
16
  updates.status = input.status;
17
+ if (input.reward !== undefined)
18
+ updates.reward = input.reward;
15
19
  return updates;
16
20
  }
17
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.builder.js","sourceRoot":"/","sources":["modules/tournament/config/config.builder.ts"],"names":[],"mappings":";;;AAEA,MAAa,uBAAuB;IAChC,MAAM,CAAC,WAAW,CAAC,KAAqC;QACpD,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QACrD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACvE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QACjE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9D,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AATD,0DASC","sourcesContent":["import { UpdateTournamentConfigInputDTO } from './config.validation';\n\nexport class TournamentConfigBuilder {\n static buildUpdate(input: UpdateTournamentConfigInputDTO): Record<string, unknown> {\n const updates: Record<string, unknown> = {};\n if (input.tag !== undefined) updates.tag = input.tag;\n if (input.startDate !== undefined) updates.startDate = input.startDate;\n if (input.endDate !== undefined) updates.endDate = input.endDate;\n if (input.status !== undefined) updates.status = input.status;\n return updates;\n }\n}\n"]}
1
+ {"version":3,"file":"config.builder.js","sourceRoot":"/","sources":["modules/tournament/config/config.builder.ts"],"names":[],"mappings":";;;AAEA,MAAa,uBAAuB;IAChC,MAAM,CAAC,WAAW,CAAC,KAAqC;QACpD,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QACrD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACvE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QACjE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9D,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AAXD,0DAWC","sourcesContent":["import { UpdateTournamentConfigInputDTO } from './config.validation';\n\nexport class TournamentConfigBuilder {\n static buildUpdate(input: UpdateTournamentConfigInputDTO): Record<string, unknown> {\n const updates: Record<string, unknown> = {};\n if (input.name !== undefined) updates.name = input.name;\n if (input.tag !== undefined) updates.tag = input.tag;\n if (input.startDate !== undefined) updates.startDate = input.startDate;\n if (input.endDate !== undefined) updates.endDate = input.endDate;\n if (input.status !== undefined) updates.status = input.status;\n if (input.reward !== undefined) updates.reward = input.reward;\n return updates;\n }\n}\n"]}
@@ -3,6 +3,7 @@ import { Tournament as Model } from '@lyxa.ai/core/dist/libraries/mongo/models';
3
3
  export declare class TournamentConfigRepository {
4
4
  private model;
5
5
  constructor();
6
+ findActive(): Promise<Pick<Model, 'name' | 'tag' | 'startDate' | 'endDate'> | null>;
6
7
  existsByTag(tag: string): Promise<boolean>;
7
8
  create(input: object): Promise<Model>;
8
9
  findById(id: mongoose.Types.ObjectId): Promise<Model | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.repository.d.ts","sourceRoot":"/","sources":["modules/tournament/config/config.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,IAAI,KAAK,EAAmB,MAAM,2CAA2C,CAAC;AAEjG,qBACa,0BAA0B;IACtC,OAAO,CAAC,KAAK,CAAyB;;IAMhC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAKrC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAI5D,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAI3B,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAIrF;AAED,eAAO,MAAM,0BAA0B,4BAA4C,CAAC"}
1
+ {"version":3,"file":"config.repository.d.ts","sourceRoot":"/","sources":["modules/tournament/config/config.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,IAAI,KAAK,EAAmB,MAAM,2CAA2C,CAAC;AAGjG,qBACa,0BAA0B;IACtC,OAAO,CAAC,KAAK,CAAyB;;IAMhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IAMnF,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAKrC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAI5D,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAI3B,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAIrF;AAED,eAAO,MAAM,0BAA0B,4BAA4C,CAAC"}
@@ -45,11 +45,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.tournamentConfigRepository = exports.TournamentConfigRepository = void 0;
46
46
  const typedi_1 = __importStar(require("typedi"));
47
47
  const models_1 = require("@lyxa.ai/core/dist/libraries/mongo/models");
48
+ const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
48
49
  let TournamentConfigRepository = class TournamentConfigRepository {
49
50
  model;
50
51
  constructor() {
51
52
  this.model = models_1.TournamentModel;
52
53
  }
54
+ async findActive() {
55
+ return this.model
56
+ .findOne({ status: enum_1.Status.ACTIVE }, { name: 1, tag: 1, startDate: 1, endDate: 1, _id: 0 })
57
+ .lean();
58
+ }
53
59
  async existsByTag(tag) {
54
60
  return !!(await this.model.exists({ tag }));
55
61
  }
@@ -64,7 +70,7 @@ let TournamentConfigRepository = class TournamentConfigRepository {
64
70
  return this.model.find().sort({ createdAt: -1 }).lean();
65
71
  }
66
72
  async updateById(id, updates) {
67
- const doc = await this.model.findByIdAndUpdate(id, { $set: updates }, { new: true }).lean();
73
+ const doc = await this.model.findByIdAndUpdate(id, { $set: updates }, { new: true, strict: false }).lean();
68
74
  return doc;
69
75
  }
70
76
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.repository.js","sourceRoot":"/","sources":["modules/tournament/config/config.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAE5C,sEAAiG;AAG1F,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAC9B,KAAK,CAAyB;IAEtC;QACC,IAAI,CAAC,KAAK,GAAG,wBAAe,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACzB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAA2B;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAA2B,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAsB,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAA2B,EAAE,OAAe;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5F,OAAO,GAAmB,CAAC;IAC5B,CAAC;CACD,CAAA;AA5BY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,gBAAO,GAAE;;GACG,0BAA0B,CA4BtC;AAEY,QAAA,0BAA0B,GAAG,gBAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { mongoose } from '@typegoose/typegoose';\nimport { Tournament as Model, TournamentModel } from '@lyxa.ai/core/dist/libraries/mongo/models';\n\n@Service()\nexport class TournamentConfigRepository {\n\tprivate model: typeof TournamentModel;\n\n\tconstructor() {\n\t\tthis.model = TournamentModel;\n\t}\n\n\tasync existsByTag(tag: string): Promise<boolean> {\n\t\treturn !!(await this.model.exists({ tag }));\n\t}\n\n\tasync create(input: object): Promise<Model> {\n\t\tconst doc = await this.model.create(input);\n\t\treturn doc.toObject();\n\t}\n\n\tasync findById(id: mongoose.Types.ObjectId): Promise<Model | null> {\n\t\treturn this.model.findById(id).lean() as Promise<Model | null>;\n\t}\n\n\tasync findAll(): Promise<Model[]> {\n\t\treturn this.model.find().sort({ createdAt: -1 }).lean() as Promise<Model[]>;\n\t}\n\n\tasync updateById(id: mongoose.Types.ObjectId, updates: object): Promise<Model | null> {\n\t\tconst doc = await this.model.findByIdAndUpdate(id, { $set: updates }, { new: true }).lean();\n\t\treturn doc as Model | null;\n\t}\n}\n\nexport const tournamentConfigRepository = Container.get(TournamentConfigRepository);\n"]}
1
+ {"version":3,"file":"config.repository.js","sourceRoot":"/","sources":["modules/tournament/config/config.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAE5C,sEAAiG;AACjG,4DAA2D;AAGpD,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAC9B,KAAK,CAAyB;IAEtC;QACC,IAAI,CAAC,KAAK,GAAG,wBAAe,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU;QACf,OAAO,IAAI,CAAC,KAAK;aACf,OAAO,CAAC,EAAE,MAAM,EAAE,aAAM,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;aACzF,IAAI,EAA2E,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACzB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAA2B;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAA2B,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAsB,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAA2B,EAAE,OAAe;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3G,OAAO,GAAmB,CAAC;IAC5B,CAAC;CACD,CAAA;AAlCY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,gBAAO,GAAE;;GACG,0BAA0B,CAkCtC;AAEY,QAAA,0BAA0B,GAAG,gBAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { mongoose } from '@typegoose/typegoose';\nimport { Tournament as Model, TournamentModel } from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport { Status } from '@lyxa.ai/core/dist/utilities/enum';\n\n@Service()\nexport class TournamentConfigRepository {\n\tprivate model: typeof TournamentModel;\n\n\tconstructor() {\n\t\tthis.model = TournamentModel;\n\t}\n\n\tasync findActive(): Promise<Pick<Model, 'name' | 'tag' | 'startDate' | 'endDate'> | null> {\n\t\treturn this.model\n\t\t\t.findOne({ status: Status.ACTIVE }, { name: 1, tag: 1, startDate: 1, endDate: 1, _id: 0 })\n\t\t\t.lean() as Promise<Pick<Model, 'name' | 'tag' | 'startDate' | 'endDate'> | null>;\n\t}\n\n\tasync existsByTag(tag: string): Promise<boolean> {\n\t\treturn !!(await this.model.exists({ tag }));\n\t}\n\n\tasync create(input: object): Promise<Model> {\n\t\tconst doc = await this.model.create(input);\n\t\treturn doc.toObject();\n\t}\n\n\tasync findById(id: mongoose.Types.ObjectId): Promise<Model | null> {\n\t\treturn this.model.findById(id).lean() as Promise<Model | null>;\n\t}\n\n\tasync findAll(): Promise<Model[]> {\n\t\treturn this.model.find().sort({ createdAt: -1 }).lean() as Promise<Model[]>;\n\t}\n\n\tasync updateById(id: mongoose.Types.ObjectId, updates: object): Promise<Model | null> {\n\t\tconst doc = await this.model.findByIdAndUpdate(id, { $set: updates }, { new: true, strict: false }).lean();\n\t\treturn doc as Model | null;\n\t}\n}\n\nexport const tournamentConfigRepository = Container.get(TournamentConfigRepository);\n"]}