@lyxa.ai/marketing 1.0.27 → 1.0.29

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 (159) hide show
  1. package/dist/lib/index.d.ts +11 -4
  2. package/dist/lib/index.d.ts.map +1 -1
  3. package/dist/lib/modules/coupon/routers/coupon.router.d.ts +7 -0
  4. package/dist/lib/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  5. package/dist/lib/modules/coupon/routers/coupon.router.js +6 -0
  6. package/dist/lib/modules/coupon/routers/coupon.router.js.map +1 -1
  7. package/dist/lib/modules/coupon/services/coupon.service.d.ts +2 -2
  8. package/dist/lib/modules/coupon/services/coupon.service.d.ts.map +1 -1
  9. package/dist/lib/modules/coupon/services/coupon.service.js +36 -32
  10. package/dist/lib/modules/coupon/services/coupon.service.js.map +1 -1
  11. package/dist/lib/modules/coupon/services/custom-coupon.service.d.ts.map +1 -1
  12. package/dist/lib/modules/coupon/services/custom-coupon.service.js +6 -0
  13. package/dist/lib/modules/coupon/services/custom-coupon.service.js.map +1 -1
  14. package/dist/lib/modules/coupon/services/global-coupon.service.d.ts.map +1 -1
  15. package/dist/lib/modules/coupon/services/global-coupon.service.js +6 -0
  16. package/dist/lib/modules/coupon/services/global-coupon.service.js.map +1 -1
  17. package/dist/lib/modules/coupon/services/helper.service.d.ts +12 -0
  18. package/dist/lib/modules/coupon/services/helper.service.d.ts.map +1 -0
  19. package/dist/lib/modules/coupon/services/helper.service.js +147 -0
  20. package/dist/lib/modules/coupon/services/helper.service.js.map +1 -0
  21. package/dist/lib/modules/coupon/services/individual-store-coupon.service.d.ts.map +1 -1
  22. package/dist/lib/modules/coupon/services/individual-store-coupon.service.js +6 -0
  23. package/dist/lib/modules/coupon/services/individual-store-coupon.service.js.map +1 -1
  24. package/dist/lib/modules/coupon/services/individual-user-coupon.service.d.ts.map +1 -1
  25. package/dist/lib/modules/coupon/services/individual-user-coupon.service.js +7 -1
  26. package/dist/lib/modules/coupon/services/individual-user-coupon.service.js.map +1 -1
  27. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.d.ts +6 -1
  28. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.d.ts.map +1 -1
  29. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js +102 -6
  30. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js.map +1 -1
  31. package/dist/lib/modules/coupon/services/referral-code-coupon.service.d.ts +0 -1
  32. package/dist/lib/modules/coupon/services/referral-code-coupon.service.d.ts.map +1 -1
  33. package/dist/lib/modules/coupon/services/referral-code-coupon.service.js +14 -14
  34. package/dist/lib/modules/coupon/services/referral-code-coupon.service.js.map +1 -1
  35. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.d.ts +2 -1
  36. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  37. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js +22 -20
  38. package/dist/lib/modules/coupon/services/referral-reward-coupon.service.js.map +1 -1
  39. package/dist/lib/modules/coupon/services/shops-categories-coupon.service.d.ts.map +1 -1
  40. package/dist/lib/modules/coupon/services/shops-categories-coupon.service.js +8 -1
  41. package/dist/lib/modules/coupon/services/shops-categories-coupon.service.js.map +1 -1
  42. package/dist/lib/modules/coupon/validations/coupon.validation.js +3 -6
  43. package/dist/lib/modules/coupon/validations/coupon.validation.js.map +1 -1
  44. package/dist/lib/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  45. package/dist/lib/modules/deal-setting/services/deal-setting.service.d.ts +2 -0
  46. package/dist/lib/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  47. package/dist/lib/modules/deal-setting/services/deal-setting.service.js +32 -8
  48. package/dist/lib/modules/deal-setting/services/deal-setting.service.js.map +1 -1
  49. package/dist/lib/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  50. package/dist/lib/modules/featured-setting/services/featured-setting.service.d.ts +2 -0
  51. package/dist/lib/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  52. package/dist/lib/modules/featured-setting/services/featured-setting.service.js +54 -8
  53. package/dist/lib/modules/featured-setting/services/featured-setting.service.js.map +1 -1
  54. package/dist/lib/modules/marketing/routers/marketing.router.d.ts +4 -4
  55. package/dist/lib/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  56. package/dist/lib/modules/marketing/routers/marketing.router.js +0 -2
  57. package/dist/lib/modules/marketing/routers/marketing.router.js.map +1 -1
  58. package/dist/lib/modules/marketing/services/buy1-get1-marketing.service.d.ts.map +1 -1
  59. package/dist/lib/modules/marketing/services/buy1-get1-marketing.service.js +48 -20
  60. package/dist/lib/modules/marketing/services/buy1-get1-marketing.service.js.map +1 -1
  61. package/dist/lib/modules/marketing/services/discount-marketing.service.d.ts.map +1 -1
  62. package/dist/lib/modules/marketing/services/discount-marketing.service.js +47 -19
  63. package/dist/lib/modules/marketing/services/discount-marketing.service.js.map +1 -1
  64. package/dist/lib/modules/marketing/services/marketing.service.d.ts.map +1 -1
  65. package/dist/lib/modules/marketing/services/marketing.service.js +12 -2
  66. package/dist/lib/modules/marketing/services/marketing.service.js.map +1 -1
  67. package/dist/lib/modules/marketing/transformers/buy1-get1-marketing.transformer.d.ts +2 -0
  68. package/dist/lib/modules/marketing/transformers/buy1-get1-marketing.transformer.d.ts.map +1 -1
  69. package/dist/lib/modules/marketing/transformers/discount-marketing.transformer.d.ts +2 -0
  70. package/dist/lib/modules/marketing/transformers/discount-marketing.transformer.d.ts.map +1 -1
  71. package/dist/lib/modules/marketing/transformers/featured-marketing.transformer.d.ts +1 -0
  72. package/dist/lib/modules/marketing/transformers/featured-marketing.transformer.d.ts.map +1 -1
  73. package/dist/lib/modules/marketing/transformers/free-delivery-marketing.transformer.d.ts +1 -0
  74. package/dist/lib/modules/marketing/transformers/free-delivery-marketing.transformer.d.ts.map +1 -1
  75. package/dist/lib/modules/marketing/transformers/punch-marketing.transformer.d.ts +1 -0
  76. package/dist/lib/modules/marketing/transformers/punch-marketing.transformer.d.ts.map +1 -1
  77. package/dist/lib/modules/marketing/validations/buy1-get1-marketing.validation.d.ts +28 -0
  78. package/dist/lib/modules/marketing/validations/buy1-get1-marketing.validation.d.ts.map +1 -1
  79. package/dist/lib/modules/marketing/validations/buy1-get1-marketing.validation.js +1 -0
  80. package/dist/lib/modules/marketing/validations/buy1-get1-marketing.validation.js.map +1 -1
  81. package/dist/lib/modules/marketing/validations/discount-marketing.validation.d.ts +254 -123
  82. package/dist/lib/modules/marketing/validations/discount-marketing.validation.d.ts.map +1 -1
  83. package/dist/lib/modules/marketing/validations/discount-marketing.validation.js +19 -3
  84. package/dist/lib/modules/marketing/validations/discount-marketing.validation.js.map +1 -1
  85. package/dist/lib/modules/marketing/validations/featured-marketing.validation.d.ts +14 -0
  86. package/dist/lib/modules/marketing/validations/featured-marketing.validation.d.ts.map +1 -1
  87. package/dist/lib/modules/marketing/validations/featured-marketing.validation.js +12 -13
  88. package/dist/lib/modules/marketing/validations/featured-marketing.validation.js.map +1 -1
  89. package/dist/lib/modules/marketing/validations/free-delivery-marketing.validation.d.ts +107 -26
  90. package/dist/lib/modules/marketing/validations/free-delivery-marketing.validation.d.ts.map +1 -1
  91. package/dist/lib/modules/marketing/validations/free-delivery-marketing.validation.js +36 -2
  92. package/dist/lib/modules/marketing/validations/free-delivery-marketing.validation.js.map +1 -1
  93. package/dist/lib/modules/marketing/validations/marketing.validation.d.ts +10 -0
  94. package/dist/lib/modules/marketing/validations/marketing.validation.d.ts.map +1 -1
  95. package/dist/lib/modules/marketing/validations/marketing.validation.js +1 -0
  96. package/dist/lib/modules/marketing/validations/marketing.validation.js.map +1 -1
  97. package/dist/lib/modules/marketing/validations/punch-marketing.validation.d.ts +127 -30
  98. package/dist/lib/modules/marketing/validations/punch-marketing.validation.d.ts.map +1 -1
  99. package/dist/lib/modules/marketing/validations/punch-marketing.validation.js +77 -2
  100. package/dist/lib/modules/marketing/validations/punch-marketing.validation.js.map +1 -1
  101. package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  102. package/dist/lib/modules/punch-marketing-history/services/punch-marketing-history.service.d.ts.map +1 -1
  103. package/dist/lib/modules/punch-marketing-history/services/punch-marketing-history.service.js +12 -9
  104. package/dist/lib/modules/punch-marketing-history/services/punch-marketing-history.service.js.map +1 -1
  105. package/dist/types/index.d.ts +11 -4
  106. package/dist/types/index.d.ts.map +1 -1
  107. package/dist/types/modules/coupon/routers/coupon.router.d.ts +7 -0
  108. package/dist/types/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  109. package/dist/types/modules/coupon/services/coupon.service.d.ts +2 -2
  110. package/dist/types/modules/coupon/services/coupon.service.d.ts.map +1 -1
  111. package/dist/types/modules/coupon/services/custom-coupon.service.d.ts.map +1 -1
  112. package/dist/types/modules/coupon/services/global-coupon.service.d.ts.map +1 -1
  113. package/dist/types/modules/coupon/services/helper.service.d.ts +12 -0
  114. package/dist/types/modules/coupon/services/helper.service.d.ts.map +1 -0
  115. package/dist/types/modules/coupon/services/individual-store-coupon.service.d.ts.map +1 -1
  116. package/dist/types/modules/coupon/services/individual-user-coupon.service.d.ts.map +1 -1
  117. package/dist/types/modules/coupon/services/patterns/repository/CouponRepository.d.ts +6 -1
  118. package/dist/types/modules/coupon/services/patterns/repository/CouponRepository.d.ts.map +1 -1
  119. package/dist/types/modules/coupon/services/referral-code-coupon.service.d.ts +0 -1
  120. package/dist/types/modules/coupon/services/referral-code-coupon.service.d.ts.map +1 -1
  121. package/dist/types/modules/coupon/services/referral-reward-coupon.service.d.ts +2 -1
  122. package/dist/types/modules/coupon/services/referral-reward-coupon.service.d.ts.map +1 -1
  123. package/dist/types/modules/coupon/services/shops-categories-coupon.service.d.ts.map +1 -1
  124. package/dist/types/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  125. package/dist/types/modules/deal-setting/services/deal-setting.service.d.ts +2 -0
  126. package/dist/types/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
  127. package/dist/types/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  128. package/dist/types/modules/featured-setting/services/featured-setting.service.d.ts +2 -0
  129. package/dist/types/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
  130. package/dist/types/modules/marketing/routers/marketing.router.d.ts +4 -4
  131. package/dist/types/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  132. package/dist/types/modules/marketing/services/buy1-get1-marketing.service.d.ts.map +1 -1
  133. package/dist/types/modules/marketing/services/discount-marketing.service.d.ts.map +1 -1
  134. package/dist/types/modules/marketing/services/marketing.service.d.ts.map +1 -1
  135. package/dist/types/modules/marketing/transformers/buy1-get1-marketing.transformer.d.ts +2 -0
  136. package/dist/types/modules/marketing/transformers/buy1-get1-marketing.transformer.d.ts.map +1 -1
  137. package/dist/types/modules/marketing/transformers/discount-marketing.transformer.d.ts +2 -0
  138. package/dist/types/modules/marketing/transformers/discount-marketing.transformer.d.ts.map +1 -1
  139. package/dist/types/modules/marketing/transformers/featured-marketing.transformer.d.ts +1 -0
  140. package/dist/types/modules/marketing/transformers/featured-marketing.transformer.d.ts.map +1 -1
  141. package/dist/types/modules/marketing/transformers/free-delivery-marketing.transformer.d.ts +1 -0
  142. package/dist/types/modules/marketing/transformers/free-delivery-marketing.transformer.d.ts.map +1 -1
  143. package/dist/types/modules/marketing/transformers/punch-marketing.transformer.d.ts +1 -0
  144. package/dist/types/modules/marketing/transformers/punch-marketing.transformer.d.ts.map +1 -1
  145. package/dist/types/modules/marketing/validations/buy1-get1-marketing.validation.d.ts +28 -0
  146. package/dist/types/modules/marketing/validations/buy1-get1-marketing.validation.d.ts.map +1 -1
  147. package/dist/types/modules/marketing/validations/discount-marketing.validation.d.ts +254 -123
  148. package/dist/types/modules/marketing/validations/discount-marketing.validation.d.ts.map +1 -1
  149. package/dist/types/modules/marketing/validations/featured-marketing.validation.d.ts +14 -0
  150. package/dist/types/modules/marketing/validations/featured-marketing.validation.d.ts.map +1 -1
  151. package/dist/types/modules/marketing/validations/free-delivery-marketing.validation.d.ts +107 -26
  152. package/dist/types/modules/marketing/validations/free-delivery-marketing.validation.d.ts.map +1 -1
  153. package/dist/types/modules/marketing/validations/marketing.validation.d.ts +10 -0
  154. package/dist/types/modules/marketing/validations/marketing.validation.d.ts.map +1 -1
  155. package/dist/types/modules/marketing/validations/punch-marketing.validation.d.ts +127 -30
  156. package/dist/types/modules/marketing/validations/punch-marketing.validation.d.ts.map +1 -1
  157. package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  158. package/dist/types/modules/punch-marketing-history/services/punch-marketing-history.service.d.ts.map +1 -1
  159. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"marketing.validation.d.ts","sourceRoot":"/","sources":["modules/marketing/validations/marketing.validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGN,GAAG,EACH,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAMnF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;CAO/B,CAAC;AAYF,QAAA,MACa,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACvB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCACnB,iBAAiB,mNACb,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCACgB,CAAC;AAKrD,OAAO,EACN,yBAAyB,EACzB,eAAe,EACf,iBAAiB,IAAI,2BAA2B,EAChD,qBAAqB,GACrB,CAAC;AAEF,eAAO,MAAM,uCAAuC;;;;;;;;;EAGlD,CAAC;AAKH,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC;AACvD,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,oCAAoC,GAAG,GAAG,CAAC,OAAO,uCAAuC,CAAC,CAAC"}
1
+ {"version":3,"file":"marketing.validation.d.ts","sourceRoot":"/","sources":["modules/marketing/validations/marketing.validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGN,GAAG,EACH,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAMnF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CAQ/B,CAAC;AAYF,QAAA,MACa,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACvB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCACnB,iBAAiB,mNACb,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCACgB,CAAC;AAKrD,OAAO,EACN,yBAAyB,EACzB,eAAe,EACf,iBAAiB,IAAI,2BAA2B,EAChD,qBAAqB,GACrB,CAAC;AAEF,eAAO,MAAM,uCAAuC;;;;;;;;;EAGlD,CAAC;AAKH,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC;AACvD,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,oCAAoC,GAAG,GAAG,CAAC,OAAO,uCAAuC,CAAC,CAAC"}
@@ -12,6 +12,7 @@ exports.baseMarketingFields = {
12
12
  duration: common_validation_1.DurationSchema,
13
13
  status: global_validation_1.ZodValidation.enumType(enum_1.MarketingStatus, 'Marketing status').default(enum_1.MarketingStatus.ACTIVE),
14
14
  pausedAt: global_validation_1.ZodValidation.date('Paused at').optional().nullable().default(null),
15
+ admin: global_validation_1.ZodValidation.objectId('Admin').optional().nullable(),
15
16
  };
16
17
  const schemaBuilder = (0, global_validation_1.createSchemaBuilder)(exports.baseMarketingFields);
17
18
  const { BaseSchema: MarketingValidationSchema, EntitySchema: MarketingSchema, IdSchema: MarketingIdSchema, UpdateSchema: UpdateMarketingSchema, } = schemaBuilder.getAllSchemas({ createdAt: true });
@@ -1 +1 @@
1
- {"version":3,"file":"marketing.validation.js","sourceRoot":"/","sources":["modules/marketing/validations/marketing.validation.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,iGAImE;AACnE,4DAAmF;AACnF,iGAA2F;AAK9E,QAAA,mBAAmB,GAAG;IAClC,IAAI,EAAE,iCAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpC,aAAa,EAAE,iCAAa,CAAC,QAAQ,CAAC,oBAAa,EAAE,gBAAgB,CAAC;IACtE,kBAAkB,EAAE,iCAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAC/D,QAAQ,EAAE,kCAAc;IACxB,MAAM,EAAE,iCAAa,CAAC,QAAQ,CAAC,sBAAe,EAAE,kBAAkB,CAAC,CAAC,OAAO,CAAC,sBAAe,CAAC,MAAM,CAAC;IACnG,QAAQ,EAAE,iCAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC7E,CAAC;AAOF,MAAM,aAAa,GAAG,IAAA,uCAAmB,EAAC,2BAAmB,CAAC,CAAC;AAK/D,MAAM,EACL,UAAU,EAAE,yBAAyB,EACrC,YAAY,EAAE,eAAe,EAC7B,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,qBAAqB,GACnC,GAAG,aAAa,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAMpD,8DAAyB;AACzB,0CAAe;AACM,wDAA2B;AAChD,sDAAqB;AAGT,QAAA,uCAAuC,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/D,OAAO,EAAE,iCAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC1C,IAAI,EAAE,iCAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;CACpC,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport {\n\tZodValidation,\n\tcreateSchemaBuilder,\n\tDTO,\n} from '@lyxa.ai/core/dist/utilities/validation/global-validation';\nimport { MarketingStatus, MarketingType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { DurationSchema } from '@lyxa.ai/core/dist/utilities/validation/common-validation';\n\n/**\n * Define the base parent schema fields\n */\nexport const baseMarketingFields = {\n\tshop: ZodValidation.objectId('Shop'),\n\tmarketingType: ZodValidation.enumType(MarketingType, 'Marketing type'),\n\tisAppliedByCompany: ZodValidation.boolean('isAppliedByCompany'),\n\tduration: DurationSchema,\n\tstatus: ZodValidation.enumType(MarketingStatus, 'Marketing status').default(MarketingStatus.ACTIVE),\n\tpausedAt: ZodValidation.date('Paused at').optional().nullable().default(null),\n};\n\n/**\n * Create schema builder for Parent entity\n * - Includes timestamps\n * - Excludes 'createdAt' from update operations\n */\nconst schemaBuilder = createSchemaBuilder(baseMarketingFields);\n\n/**\n * Get all schemas for the Parent entity\n */\nconst {\n\tBaseSchema: MarketingValidationSchema,\n\tEntitySchema: MarketingSchema,\n\tIdSchema: MarketingIdSchema,\n\tUpdateSchema: UpdateMarketingSchema,\n} = schemaBuilder.getAllSchemas({ createdAt: true });\n\n/**\n * Export schemas\n */\nexport {\n\tMarketingValidationSchema,\n\tMarketingSchema,\n\tMarketingIdSchema as MarketingIdValidationSchema,\n\tUpdateMarketingSchema,\n};\n\nexport const ProductEntireMenuMarketingHandlerSchema = z.object({\n\tproduct: ZodValidation.objectId('Product'),\n\tshop: ZodValidation.objectId('Shop'),\n});\n\n/**\n * Export DTO types\n */\nexport type CreateMarketingDTO = DTO<typeof MarketingValidationSchema>;\nexport type MarketingDTO = DTO<typeof MarketingSchema>;\nexport type UpdateMarketingDTO = DTO<typeof UpdateMarketingSchema>;\nexport type ProductEntireMenuMarketingHandlerDTO = DTO<typeof ProductEntireMenuMarketingHandlerSchema>;\n"]}
1
+ {"version":3,"file":"marketing.validation.js","sourceRoot":"/","sources":["modules/marketing/validations/marketing.validation.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,iGAImE;AACnE,4DAAmF;AACnF,iGAA2F;AAK9E,QAAA,mBAAmB,GAAG;IAClC,IAAI,EAAE,iCAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpC,aAAa,EAAE,iCAAa,CAAC,QAAQ,CAAC,oBAAa,EAAE,gBAAgB,CAAC;IACtE,kBAAkB,EAAE,iCAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAC/D,QAAQ,EAAE,kCAAc;IACxB,MAAM,EAAE,iCAAa,CAAC,QAAQ,CAAC,sBAAe,EAAE,kBAAkB,CAAC,CAAC,OAAO,CAAC,sBAAe,CAAC,MAAM,CAAC;IACnG,QAAQ,EAAE,iCAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7E,KAAK,EAAE,iCAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC5D,CAAC;AAOF,MAAM,aAAa,GAAG,IAAA,uCAAmB,EAAC,2BAAmB,CAAC,CAAC;AAK/D,MAAM,EACL,UAAU,EAAE,yBAAyB,EACrC,YAAY,EAAE,eAAe,EAC7B,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,qBAAqB,GACnC,GAAG,aAAa,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAMpD,8DAAyB;AACzB,0CAAe;AACM,wDAA2B;AAChD,sDAAqB;AAGT,QAAA,uCAAuC,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/D,OAAO,EAAE,iCAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC1C,IAAI,EAAE,iCAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;CACpC,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\nimport {\n\tZodValidation,\n\tcreateSchemaBuilder,\n\tDTO,\n} from '@lyxa.ai/core/dist/utilities/validation/global-validation';\nimport { MarketingStatus, MarketingType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { DurationSchema } from '@lyxa.ai/core/dist/utilities/validation/common-validation';\n\n/**\n * Define the base parent schema fields\n */\nexport const baseMarketingFields = {\n\tshop: ZodValidation.objectId('Shop'),\n\tmarketingType: ZodValidation.enumType(MarketingType, 'Marketing type'),\n\tisAppliedByCompany: ZodValidation.boolean('isAppliedByCompany'),\n\tduration: DurationSchema,\n\tstatus: ZodValidation.enumType(MarketingStatus, 'Marketing status').default(MarketingStatus.ACTIVE),\n\tpausedAt: ZodValidation.date('Paused at').optional().nullable().default(null),\n\tadmin: ZodValidation.objectId('Admin').optional().nullable(),\n};\n\n/**\n * Create schema builder for Parent entity\n * - Includes timestamps\n * - Excludes 'createdAt' from update operations\n */\nconst schemaBuilder = createSchemaBuilder(baseMarketingFields);\n\n/**\n * Get all schemas for the Parent entity\n */\nconst {\n\tBaseSchema: MarketingValidationSchema,\n\tEntitySchema: MarketingSchema,\n\tIdSchema: MarketingIdSchema,\n\tUpdateSchema: UpdateMarketingSchema,\n} = schemaBuilder.getAllSchemas({ createdAt: true });\n\n/**\n * Export schemas\n */\nexport {\n\tMarketingValidationSchema,\n\tMarketingSchema,\n\tMarketingIdSchema as MarketingIdValidationSchema,\n\tUpdateMarketingSchema,\n};\n\nexport const ProductEntireMenuMarketingHandlerSchema = z.object({\n\tproduct: ZodValidation.objectId('Product'),\n\tshop: ZodValidation.objectId('Shop'),\n});\n\n/**\n * Export DTO types\n */\nexport type CreateMarketingDTO = DTO<typeof MarketingValidationSchema>;\nexport type MarketingDTO = DTO<typeof MarketingSchema>;\nexport type UpdateMarketingDTO = DTO<typeof UpdateMarketingSchema>;\nexport type ProductEntireMenuMarketingHandlerDTO = DTO<typeof ProductEntireMenuMarketingHandlerSchema>;\n"]}
@@ -1,7 +1,80 @@
1
1
  import { z } from 'zod';
2
2
  import { DTO } from '@lyxa.ai/core/dist/utilities/validation/global-validation';
3
3
  import { MarketingType, ValueType } from '@lyxa.ai/core/dist/utilities/enum';
4
- declare const PunchMarketingValidationSchema: z.ZodObject<{
4
+ declare const PunchMarketingSchema: z.ZodObject<{
5
+ marketingType: z.ZodOptional<z.ZodLiteral<MarketingType.PUNCH_MARKETING>>;
6
+ targetOrders: z.ZodOptional<z.ZodNumber>;
7
+ minimumOrderValue: z.ZodOptional<z.ZodNumber>;
8
+ dayLimit: z.ZodOptional<z.ZodNumber>;
9
+ couponValueType: z.ZodOptional<z.ZodNativeEnum<typeof ValueType>>;
10
+ couponValue: z.ZodOptional<z.ZodNumber>;
11
+ couponDurationInDays: z.ZodOptional<z.ZodNumber>;
12
+ shop: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
13
+ isAppliedByCompany: z.ZodOptional<z.ZodBoolean>;
14
+ duration: z.ZodOptional<z.ZodObject<{
15
+ start: z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>;
16
+ end: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ start: Date;
19
+ end?: Date | undefined;
20
+ }, {
21
+ start: string | Date;
22
+ end?: string | Date | undefined;
23
+ }>>;
24
+ status: z.ZodOptional<z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>>;
25
+ pausedAt: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>>;
26
+ admin: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>>>;
27
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
28
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
29
+ marketingType: z.ZodOptional<z.ZodLiteral<MarketingType.PUNCH_MARKETING>>;
30
+ targetOrders: z.ZodOptional<z.ZodNumber>;
31
+ minimumOrderValue: z.ZodOptional<z.ZodNumber>;
32
+ dayLimit: z.ZodOptional<z.ZodNumber>;
33
+ couponValueType: z.ZodOptional<z.ZodNativeEnum<typeof ValueType>>;
34
+ couponValue: z.ZodOptional<z.ZodNumber>;
35
+ couponDurationInDays: z.ZodOptional<z.ZodNumber>;
36
+ shop: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
37
+ isAppliedByCompany: z.ZodOptional<z.ZodBoolean>;
38
+ duration: z.ZodOptional<z.ZodObject<{
39
+ start: z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>;
40
+ end: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ start: Date;
43
+ end?: Date | undefined;
44
+ }, {
45
+ start: string | Date;
46
+ end?: string | Date | undefined;
47
+ }>>;
48
+ status: z.ZodOptional<z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>>;
49
+ pausedAt: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>>;
50
+ admin: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>>>;
51
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
52
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
53
+ marketingType: z.ZodOptional<z.ZodLiteral<MarketingType.PUNCH_MARKETING>>;
54
+ targetOrders: z.ZodOptional<z.ZodNumber>;
55
+ minimumOrderValue: z.ZodOptional<z.ZodNumber>;
56
+ dayLimit: z.ZodOptional<z.ZodNumber>;
57
+ couponValueType: z.ZodOptional<z.ZodNativeEnum<typeof ValueType>>;
58
+ couponValue: z.ZodOptional<z.ZodNumber>;
59
+ couponDurationInDays: z.ZodOptional<z.ZodNumber>;
60
+ shop: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
61
+ isAppliedByCompany: z.ZodOptional<z.ZodBoolean>;
62
+ duration: z.ZodOptional<z.ZodObject<{
63
+ start: z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>;
64
+ end: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>;
65
+ }, "strip", z.ZodTypeAny, {
66
+ start: Date;
67
+ end?: Date | undefined;
68
+ }, {
69
+ start: string | Date;
70
+ end?: string | Date | undefined;
71
+ }>>;
72
+ status: z.ZodOptional<z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>>;
73
+ pausedAt: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>>;
74
+ admin: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>>>;
75
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
76
+ }, z.ZodTypeAny, "passthrough">>, PunchMarketingIdSchema: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>;
77
+ declare const PunchMarketingValidationSchema: z.ZodEffects<z.ZodObject<{
5
78
  marketingType: z.ZodLiteral<MarketingType.PUNCH_MARKETING>;
6
79
  targetOrders: z.ZodNumber;
7
80
  minimumOrderValue: z.ZodNumber;
@@ -23,6 +96,7 @@ declare const PunchMarketingValidationSchema: z.ZodObject<{
23
96
  }>;
24
97
  status: z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>;
25
98
  pausedAt: z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>;
99
+ admin: z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>>;
26
100
  }, "strict", z.ZodTypeAny, {
27
101
  isAppliedByCompany: boolean;
28
102
  shop: import("mongoose").Types.ObjectId;
@@ -39,6 +113,7 @@ declare const PunchMarketingValidationSchema: z.ZodObject<{
39
113
  couponValueType: ValueType;
40
114
  couponValue: number;
41
115
  couponDurationInDays: number;
116
+ admin?: import("mongoose").Types.ObjectId | null | undefined;
42
117
  }, {
43
118
  isAppliedByCompany: boolean;
44
119
  shop: string | import("mongoose").Types.ObjectId;
@@ -55,30 +130,53 @@ declare const PunchMarketingValidationSchema: z.ZodObject<{
55
130
  couponDurationInDays: number;
56
131
  status?: import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus | undefined;
57
132
  pausedAt?: string | Date | null | undefined;
58
- }>, PunchMarketingSchema: z.ZodObject<{
59
- marketingType: z.ZodOptional<z.ZodLiteral<MarketingType.PUNCH_MARKETING>>;
60
- targetOrders: z.ZodOptional<z.ZodNumber>;
61
- minimumOrderValue: z.ZodOptional<z.ZodNumber>;
62
- dayLimit: z.ZodOptional<z.ZodNumber>;
63
- couponValueType: z.ZodOptional<z.ZodNativeEnum<typeof ValueType>>;
64
- couponValue: z.ZodOptional<z.ZodNumber>;
65
- couponDurationInDays: z.ZodOptional<z.ZodNumber>;
66
- shop: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
67
- isAppliedByCompany: z.ZodOptional<z.ZodBoolean>;
68
- duration: z.ZodOptional<z.ZodObject<{
69
- start: z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>;
70
- end: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>;
71
- }, "strip", z.ZodTypeAny, {
133
+ admin?: string | import("mongoose").Types.ObjectId | null | undefined;
134
+ }>, {
135
+ isAppliedByCompany: boolean;
136
+ shop: import("mongoose").Types.ObjectId;
137
+ status: import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus;
138
+ marketingType: MarketingType.PUNCH_MARKETING;
139
+ duration: {
72
140
  start: Date;
73
141
  end?: Date | undefined;
74
- }, {
142
+ };
143
+ pausedAt: Date | null;
144
+ targetOrders: number;
145
+ minimumOrderValue: number;
146
+ dayLimit: number;
147
+ couponValueType: ValueType;
148
+ couponValue: number;
149
+ couponDurationInDays: number;
150
+ admin?: import("mongoose").Types.ObjectId | null | undefined;
151
+ }, {
152
+ isAppliedByCompany: boolean;
153
+ shop: string | import("mongoose").Types.ObjectId;
154
+ marketingType: MarketingType.PUNCH_MARKETING;
155
+ duration: {
75
156
  start: string | Date;
76
157
  end?: string | Date | undefined;
77
- }>>;
78
- status: z.ZodOptional<z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>>;
79
- pausedAt: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>>;
80
- _id: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
81
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
158
+ };
159
+ targetOrders: number;
160
+ minimumOrderValue: number;
161
+ dayLimit: number;
162
+ couponValueType: ValueType;
163
+ couponValue: number;
164
+ couponDurationInDays: number;
165
+ status?: import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus | undefined;
166
+ pausedAt?: string | Date | null | undefined;
167
+ admin?: string | import("mongoose").Types.ObjectId | null | undefined;
168
+ }>;
169
+ declare const UpdatePunchMarketingSchema: z.ZodEffects<z.ZodObject<{
170
+ [x: string]: z.ZodOptional<z.ZodTypeAny>;
171
+ }, "strict", z.ZodTypeAny, {
172
+ [x: string]: any;
173
+ }, {
174
+ [x: string]: any;
175
+ }>, {
176
+ [x: string]: any;
177
+ }, {
178
+ [x: string]: any;
179
+ }> | z.ZodEffects<z.ZodObject<{
82
180
  marketingType: z.ZodOptional<z.ZodLiteral<MarketingType.PUNCH_MARKETING>>;
83
181
  targetOrders: z.ZodOptional<z.ZodNumber>;
84
182
  minimumOrderValue: z.ZodOptional<z.ZodNumber>;
@@ -100,8 +198,9 @@ declare const PunchMarketingValidationSchema: z.ZodObject<{
100
198
  }>>;
101
199
  status: z.ZodOptional<z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>>;
102
200
  pausedAt: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>>;
201
+ admin: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>>>;
103
202
  _id: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
104
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
203
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
105
204
  marketingType: z.ZodOptional<z.ZodLiteral<MarketingType.PUNCH_MARKETING>>;
106
205
  targetOrders: z.ZodOptional<z.ZodNumber>;
107
206
  minimumOrderValue: z.ZodOptional<z.ZodNumber>;
@@ -123,14 +222,9 @@ declare const PunchMarketingValidationSchema: z.ZodObject<{
123
222
  }>>;
124
223
  status: z.ZodOptional<z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>>;
125
224
  pausedAt: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>>;
225
+ admin: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>>>;
126
226
  _id: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
127
- }, z.ZodTypeAny, "passthrough">>, PunchMarketingIdSchema: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>, UpdatePunchMarketingSchema: z.ZodObject<{
128
- [x: string]: z.ZodOptional<z.ZodTypeAny>;
129
- }, "strict", z.ZodTypeAny, {
130
- [x: string]: any;
131
- }, {
132
- [x: string]: any;
133
- }> | z.ZodObject<{
227
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
134
228
  marketingType: z.ZodOptional<z.ZodLiteral<MarketingType.PUNCH_MARKETING>>;
135
229
  targetOrders: z.ZodOptional<z.ZodNumber>;
136
230
  minimumOrderValue: z.ZodOptional<z.ZodNumber>;
@@ -152,8 +246,9 @@ declare const PunchMarketingValidationSchema: z.ZodObject<{
152
246
  }>>;
153
247
  status: z.ZodOptional<z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>>;
154
248
  pausedAt: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>>;
249
+ admin: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>>>;
155
250
  _id: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
156
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
251
+ }, z.ZodTypeAny, "passthrough">>, z.objectOutputType<{
157
252
  marketingType: z.ZodOptional<z.ZodLiteral<MarketingType.PUNCH_MARKETING>>;
158
253
  targetOrders: z.ZodOptional<z.ZodNumber>;
159
254
  minimumOrderValue: z.ZodOptional<z.ZodNumber>;
@@ -175,6 +270,7 @@ declare const PunchMarketingValidationSchema: z.ZodObject<{
175
270
  }>>;
176
271
  status: z.ZodOptional<z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>>;
177
272
  pausedAt: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>>;
273
+ admin: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>>>;
178
274
  _id: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
179
275
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
180
276
  marketingType: z.ZodOptional<z.ZodLiteral<MarketingType.PUNCH_MARKETING>>;
@@ -198,6 +294,7 @@ declare const PunchMarketingValidationSchema: z.ZodObject<{
198
294
  }>>;
199
295
  status: z.ZodOptional<z.ZodDefault<z.ZodNativeEnum<typeof import("@lyxa.ai/core/dist/utilities/enum").MarketingStatus>>>;
200
296
  pausedAt: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Date, string>, z.ZodDate]>, Date, string | Date>, Date, string | Date>>>>>;
297
+ admin: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>>>;
201
298
  _id: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>>;
202
299
  }, z.ZodTypeAny, "passthrough">>;
203
300
  export { PunchMarketingValidationSchema, PunchMarketingSchema, PunchMarketingIdSchema as PunchMarketingIdValidationSchema, UpdatePunchMarketingSchema, };
@@ -1 +1 @@
1
- {"version":3,"file":"punch-marketing.validation.d.ts","sourceRoot":"/","sources":["modules/marketing/validations/punch-marketing.validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGN,GAAG,EACH,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AA2B7E,QAAA,MACa,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAC5B,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCACxB,sBAAsB,mNAClB,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCACW,CAAC;AAKrD,OAAO,EACN,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,IAAI,gCAAgC,EAC1D,0BAA0B,GAC1B,CAAC;AAKF,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC;AACjF,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
1
+ {"version":3,"file":"punch-marketing.validation.d.ts","sourceRoot":"/","sources":["modules/marketing/validations/punch-marketing.validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGN,GAAG,EACH,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AA4B7E,QAAA,MAEe,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCACxB,sBAAsB,iNAEmB,CAAC;AAErD,QAAA,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCnC,CAAC;AAEF,QAAA,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAoC9B,CAAC;AAKH,OAAO,EACN,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,IAAI,gCAAgC,EAC1D,0BAA0B,GAC1B,CAAC;AAKF,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC;AACjF,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -5,6 +5,7 @@ const zod_1 = require("zod");
5
5
  const global_validation_1 = require("@lyxa.ai/core/dist/utilities/validation/global-validation");
6
6
  const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
7
7
  const marketing_validation_1 = require("./marketing.validation");
8
+ const dayjs_1 = require("@lyxa.ai/core/dist/utilities/dayjs");
8
9
  const baseFields = {
9
10
  ...marketing_validation_1.baseMarketingFields,
10
11
  marketingType: zod_1.z.literal(enum_1.MarketingType.PUNCH_MARKETING),
@@ -16,9 +17,83 @@ const baseFields = {
16
17
  couponDurationInDays: global_validation_1.ZodValidation.number('Coupon duration in days').min(1),
17
18
  };
18
19
  const schemaBuilder = (0, global_validation_1.createSchemaBuilder)(baseFields);
19
- const { BaseSchema: PunchMarketingValidationSchema, EntitySchema: PunchMarketingSchema, IdSchema: PunchMarketingIdSchema, UpdateSchema: UpdatePunchMarketingSchema, } = schemaBuilder.getAllSchemas({ createdAt: true });
20
- exports.PunchMarketingValidationSchema = PunchMarketingValidationSchema;
20
+ const { BaseSchema: PunchMarketingValidationSchemaWithoutRefinement, EntitySchema: PunchMarketingSchema, IdSchema: PunchMarketingIdSchema, UpdateSchema: UpdatePunchMarketingSchemaWithoutRefinement, } = schemaBuilder.getAllSchemas({ createdAt: true });
21
21
  exports.PunchMarketingSchema = PunchMarketingSchema;
22
22
  exports.PunchMarketingIdValidationSchema = PunchMarketingIdSchema;
23
+ const PunchMarketingValidationSchema = PunchMarketingValidationSchemaWithoutRefinement.superRefine((data, ctx) => {
24
+ if (data.couponValueType === enum_1.ValueType.PERCENTAGE) {
25
+ if (data.couponValue <= 0 || data.couponValue > 100) {
26
+ ctx.addIssue({
27
+ code: zod_1.z.ZodIssueCode.custom,
28
+ message: 'Coupon value must be between 1 and 100 for percentage type',
29
+ path: ['couponValue', 'couponValueType'],
30
+ });
31
+ }
32
+ }
33
+ if (data.couponValueType === enum_1.ValueType.FIXED) {
34
+ if (data.couponValue <= 0) {
35
+ ctx.addIssue({
36
+ code: zod_1.z.ZodIssueCode.custom,
37
+ message: 'Coupon value must be greater than 0 for fixed type',
38
+ path: ['couponValue', 'couponValueType'],
39
+ });
40
+ }
41
+ }
42
+ if (data.minimumOrderValue <= 0) {
43
+ ctx.addIssue({
44
+ code: zod_1.z.ZodIssueCode.custom,
45
+ message: 'Minimum order value should be greater than 0',
46
+ path: ['minimumOrderValue'],
47
+ });
48
+ }
49
+ if (data.dayLimit) {
50
+ const durationInDays = (0, dayjs_1.dayjs)(data.duration.end).diff((0, dayjs_1.dayjs)(data.duration.start), 'day') + 1;
51
+ if (data.dayLimit > durationInDays) {
52
+ ctx.addIssue({
53
+ code: zod_1.z.ZodIssueCode.custom,
54
+ message: 'Punch day limit should be less than or equal to the marketing duration',
55
+ path: ['dayLimit', 'duration'],
56
+ });
57
+ }
58
+ }
59
+ });
60
+ exports.PunchMarketingValidationSchema = PunchMarketingValidationSchema;
61
+ const UpdatePunchMarketingSchema = UpdatePunchMarketingSchemaWithoutRefinement.superRefine((data, ctx) => {
62
+ if (data.couponValueType === enum_1.ValueType.PERCENTAGE) {
63
+ if (data.couponValue <= 0 || data.couponValue > 100) {
64
+ ctx.addIssue({
65
+ code: zod_1.z.ZodIssueCode.custom,
66
+ message: 'Coupon value must be between 1 and 100 for percentage type',
67
+ path: ['couponValue', 'couponValueType'],
68
+ });
69
+ }
70
+ }
71
+ if (data.couponValueType === enum_1.ValueType.FIXED) {
72
+ if (data.couponValue <= 0) {
73
+ ctx.addIssue({
74
+ code: zod_1.z.ZodIssueCode.custom,
75
+ message: 'Coupon value must be greater than 0 for fixed type',
76
+ path: ['couponValue', 'couponValueType'],
77
+ });
78
+ }
79
+ }
80
+ if (data.minimumOrderValue <= 0) {
81
+ ctx.addIssue({
82
+ code: zod_1.z.ZodIssueCode.custom,
83
+ message: 'Minimum order value should be greater than 0',
84
+ path: ['minimumOrderValue'],
85
+ });
86
+ }
87
+ if (data.dayLimit) {
88
+ const durationInDays = (0, dayjs_1.dayjs)(data.duration.end).diff((0, dayjs_1.dayjs)(data.duration.start), 'day') + 1;
89
+ if (data.dayLimit > durationInDays) {
90
+ ctx.addIssue({
91
+ code: zod_1.z.ZodIssueCode.custom,
92
+ message: 'Punch day limit should be less than or equal to the marketing duration',
93
+ path: ['dayLimit', 'duration'],
94
+ });
95
+ }
96
+ }
97
+ });
23
98
  exports.UpdatePunchMarketingSchema = UpdatePunchMarketingSchema;
24
99
  //# sourceMappingURL=punch-marketing.validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"punch-marketing.validation.js","sourceRoot":"/","sources":["modules/marketing/validations/punch-marketing.validation.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,iGAImE;AACnE,4DAA6E;AAC7E,iEAA6D;AAK7D,MAAM,UAAU,GAAG;IAClB,GAAG,0CAAmB;IACtB,aAAa,EAAE,OAAC,CAAC,OAAO,CAAC,oBAAa,CAAC,eAAe,CAAC;IACvD,YAAY,EAAE,iCAAa,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,iBAAiB,EAAE,iCAAa,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAC9D,QAAQ,EAAE,iCAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,eAAe,EAAE,iCAAa,CAAC,QAAQ,CAAC,gBAAS,EAAE,mBAAmB,CAAC;IACvE,WAAW,EAAE,iCAAa,CAAC,MAAM,CAAC,cAAc,CAAC;IACjD,oBAAoB,EAAE,iCAAa,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC5E,CAAC;AAOF,MAAM,aAAa,GAAG,IAAA,uCAAmB,EAAC,UAAU,CAAC,CAAC;AAKtD,MAAM,EACL,UAAU,EAAE,8BAA8B,EAC1C,YAAY,EAAE,oBAAoB,EAClC,QAAQ,EAAE,sBAAsB,EAChC,YAAY,EAAE,0BAA0B,GACxC,GAAG,aAAa,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAMpD,wEAA8B;AAC9B,oDAAoB;AACM,kEAAgC;AAC1D,gEAA0B","sourcesContent":["import { z } from 'zod';\nimport {\n\tZodValidation,\n\tcreateSchemaBuilder,\n\tDTO\n} from '@lyxa.ai/core/dist/utilities/validation/global-validation';\nimport { MarketingType, ValueType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { baseMarketingFields } from './marketing.validation';\n\n/**\n * Define the base parent schema fields\n */\nconst baseFields = {\n\t...baseMarketingFields,\n\tmarketingType: z.literal(MarketingType.PUNCH_MARKETING),\n\ttargetOrders: ZodValidation.number('Target orders').min(1).max(7),\n\tminimumOrderValue: ZodValidation.number('Minimum order value'),\n\tdayLimit: ZodValidation.number('Day limit').min(1),\n\tcouponValueType: ZodValidation.enumType(ValueType, 'Coupon value type'),\n\tcouponValue: ZodValidation.number('Coupon value'),\n\tcouponDurationInDays: ZodValidation.number('Coupon duration in days').min(1),\n};\n\n/**\n * Create schema builder for Parent entity\n * - Includes timestamps\n * - Excludes 'createdAt' from update operations\n */\nconst schemaBuilder = createSchemaBuilder(baseFields);\n\n/**\n * Get all schemas for the Parent entity\n */\nconst {\n\tBaseSchema: PunchMarketingValidationSchema,\n\tEntitySchema: PunchMarketingSchema,\n\tIdSchema: PunchMarketingIdSchema,\n\tUpdateSchema: UpdatePunchMarketingSchema,\n} = schemaBuilder.getAllSchemas({ createdAt: true });\n\n/**\n * Export schemas\n */\nexport {\n\tPunchMarketingValidationSchema,\n\tPunchMarketingSchema,\n\tPunchMarketingIdSchema as PunchMarketingIdValidationSchema,\n\tUpdatePunchMarketingSchema,\n};\n\n/**\n * Export DTO types\n */\nexport type CreatePunchMarketingDTO = DTO<typeof PunchMarketingValidationSchema>;\nexport type PunchMarketingDTO = DTO<typeof PunchMarketingSchema>;\nexport type UpdatePunchMarketingDTO = DTO<typeof UpdatePunchMarketingSchema>;\n"]}
1
+ {"version":3,"file":"punch-marketing.validation.js","sourceRoot":"/","sources":["modules/marketing/validations/punch-marketing.validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n\tZodValidation,\n\tcreateSchemaBuilder,\n\tDTO,\n} from '@lyxa.ai/core/dist/utilities/validation/global-validation';\nimport { MarketingType, ValueType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { baseMarketingFields } from './marketing.validation';\nimport { dayjs } from '@lyxa.ai/core/dist/utilities/dayjs';\n\n/**\n * Define the base parent schema fields\n */\nconst baseFields = {\n\t...baseMarketingFields,\n\tmarketingType: z.literal(MarketingType.PUNCH_MARKETING),\n\ttargetOrders: ZodValidation.number('Target orders').min(1).max(7),\n\tminimumOrderValue: ZodValidation.number('Minimum order value'),\n\tdayLimit: ZodValidation.number('Day limit').min(1),\n\tcouponValueType: ZodValidation.enumType(ValueType, 'Coupon value type'),\n\tcouponValue: ZodValidation.number('Coupon value'),\n\tcouponDurationInDays: ZodValidation.number('Coupon duration in days').min(1),\n};\n\n/**\n * Create schema builder for Parent entity\n * - Includes timestamps\n * - Excludes 'createdAt' from update operations\n */\nconst schemaBuilder = createSchemaBuilder(baseFields);\n\n/**\n * Get all schemas for the Parent entity\n */\nconst {\n\tBaseSchema: PunchMarketingValidationSchemaWithoutRefinement,\n\tEntitySchema: PunchMarketingSchema,\n\tIdSchema: PunchMarketingIdSchema,\n\tUpdateSchema: UpdatePunchMarketingSchemaWithoutRefinement,\n} = schemaBuilder.getAllSchemas({ createdAt: true });\n\nconst PunchMarketingValidationSchema = PunchMarketingValidationSchemaWithoutRefinement.superRefine(\n\t(data, ctx) => {\n\t\tif (data.couponValueType === ValueType.PERCENTAGE) {\n\t\t\tif (data.couponValue <= 0 || data.couponValue > 100) {\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: 'Coupon value must be between 1 and 100 for percentage type',\n\t\t\t\t\tpath: ['couponValue', 'couponValueType'],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (data.couponValueType === ValueType.FIXED) {\n\t\t\tif (data.couponValue <= 0) {\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: 'Coupon value must be greater than 0 for fixed type',\n\t\t\t\t\tpath: ['couponValue', 'couponValueType'],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (data.minimumOrderValue <= 0) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Minimum order value should be greater than 0',\n\t\t\t\tpath: ['minimumOrderValue'],\n\t\t\t});\n\t\t}\n\t\tif (data.dayLimit) {\n\t\t\tconst durationInDays = dayjs(data.duration.end).diff(dayjs(data.duration.start), 'day') + 1;\n\t\t\tif (data.dayLimit > durationInDays) {\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: 'Punch day limit should be less than or equal to the marketing duration',\n\t\t\t\t\tpath: ['dayLimit', 'duration'],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n);\n\nconst UpdatePunchMarketingSchema = UpdatePunchMarketingSchemaWithoutRefinement.superRefine((data, ctx) => {\n\tif (data.couponValueType === ValueType.PERCENTAGE) {\n\t\tif (data.couponValue <= 0 || data.couponValue > 100) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Coupon value must be between 1 and 100 for percentage type',\n\t\t\t\tpath: ['couponValue', 'couponValueType'],\n\t\t\t});\n\t\t}\n\t}\n\tif (data.couponValueType === ValueType.FIXED) {\n\t\tif (data.couponValue <= 0) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Coupon value must be greater than 0 for fixed type',\n\t\t\t\tpath: ['couponValue', 'couponValueType'],\n\t\t\t});\n\t\t}\n\t}\n\tif (data.minimumOrderValue <= 0) {\n\t\tctx.addIssue({\n\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\tmessage: 'Minimum order value should be greater than 0',\n\t\t\tpath: ['minimumOrderValue'],\n\t\t});\n\t}\n\tif (data.dayLimit) {\n\t\tconst durationInDays = dayjs(data.duration.end).diff(dayjs(data.duration.start), 'day') + 1;\n\t\tif (data.dayLimit > durationInDays) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Punch day limit should be less than or equal to the marketing duration',\n\t\t\t\tpath: ['dayLimit', 'duration'],\n\t\t\t});\n\t\t}\n\t}\n});\n\n/**\n * Export schemas\n */\nexport {\n\tPunchMarketingValidationSchema,\n\tPunchMarketingSchema,\n\tPunchMarketingIdSchema as PunchMarketingIdValidationSchema,\n\tUpdatePunchMarketingSchema,\n};\n\n/**\n * Export DTO types\n */\nexport type CreatePunchMarketingDTO = DTO<typeof PunchMarketingValidationSchema>;\nexport type PunchMarketingDTO = DTO<typeof PunchMarketingSchema>;\nexport type UpdatePunchMarketingDTO = DTO<typeof UpdatePunchMarketingSchema>;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"punch-marketing-history.router.d.ts","sourceRoot":"/","sources":["modules/punch-marketing-history/routers/punch-marketing-history.router.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAef,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqExB,CAAC"}
1
+ {"version":3,"file":"punch-marketing-history.router.d.ts","sourceRoot":"/","sources":["modules/punch-marketing-history/routers/punch-marketing-history.router.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAgBnB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"punch-marketing-history.service.d.ts","sourceRoot":"/","sources":["modules/punch-marketing-history/services/punch-marketing-history.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAElG,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAEN,qBAAqB,IAAI,KAAK,EAK9B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACN,8BAA8B,IAAI,SAAS,EAC3C,mBAAmB,EACnB,8BAA8B,IAAI,SAAS,EAC3C,MAAM,8CAA8C,CAAC;AAWtD,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAK3F,qBACa,4BAA4B;IACxC,OAAO,CAAC,KAAK,CAA6D;IAC1E,OAAO,CAAC,cAAc,CAA+D;IACrF,OAAO,CAAC,UAAU,CAA2D;;IAYhE,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAQrD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAkB5E,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAyB3F,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAuCzD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IA2BjE,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB5C,oBAAoB,CAChC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAC9B,OAAO,CAAC,MAAM,CAAC;YAqDJ,gBAAgB;IA+CjB,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;IA8B3F,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IA0C7E,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;CA4CvG;AAED,eAAO,MAAM,4BAA4B,8BAA8C,CAAC"}
1
+ {"version":3,"file":"punch-marketing-history.service.d.ts","sourceRoot":"/","sources":["modules/punch-marketing-history/services/punch-marketing-history.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAElG,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAEN,qBAAqB,IAAI,KAAK,EAK9B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACN,8BAA8B,IAAI,SAAS,EAC3C,mBAAmB,EACnB,8BAA8B,IAAI,SAAS,EAC3C,MAAM,8CAA8C,CAAC;AAWtD,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAK3F,qBACa,4BAA4B;IACxC,OAAO,CAAC,KAAK,CAA6D;IAC1E,OAAO,CAAC,cAAc,CAA+D;IACrF,OAAO,CAAC,UAAU,CAA2D;;IAYhE,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAQrD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAkB5E,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAyB3F,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAuCzD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IA2BjE,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB5C,oBAAoB,CAChC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAC9B,OAAO,CAAC,MAAM,CAAC;YAqDJ,gBAAgB;IA+CjB,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;IA8B3F,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAiD7E,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;CA4CvG;AAED,eAAO,MAAM,4BAA4B,8BAA8C,CAAC"}
@@ -41,9 +41,6 @@ var __importStar = (this && this.__importStar) || (function () {
41
41
  var __metadata = (this && this.__metadata) || function (k, v) {
42
42
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
43
  };
44
- var __importDefault = (this && this.__importDefault) || function (mod) {
45
- return (mod && mod.__esModule) ? mod : { "default": mod };
46
- };
47
44
  Object.defineProperty(exports, "__esModule", { value: true });
48
45
  exports.punchMarketingHistoryService = exports.PunchMarketingHistoryService = void 0;
49
46
  const error_common_1 = require("@lyxa.ai/core/dist/utilities/error-common");
@@ -52,7 +49,7 @@ const server_1 = require("@trpc/server");
52
49
  const pagination_1 = require("@lyxa.ai/core/dist/utilities/pagination");
53
50
  const models_1 = require("@lyxa.ai/core/dist/libraries/mongo/models");
54
51
  const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
55
- const dayjs_1 = __importDefault(require("dayjs"));
52
+ const dayjs_1 = require("@lyxa.ai/core/dist/utilities/dayjs");
56
53
  const currency_1 = require("@lyxa.ai/core/dist/utilities/currency");
57
54
  const shared_1 = require("@lyxa.ai/core/dist/utilities/shared");
58
55
  const core_1 = require("@lyxa.ai/core");
@@ -177,7 +174,7 @@ let PunchMarketingHistoryService = class PunchMarketingHistoryService {
177
174
  if (order.finance.pricing.subtotal >= existingHistory.minimumOrderValue) {
178
175
  const completedAt = existingHistory.targetOrder == existingHistory.completedOrder + 1 ? new Date() : null;
179
176
  const couponExpiryDate = completedAt
180
- ? (0, dayjs_1.default)(completedAt).add(existingHistory.couponDurationInDays, 'day').toDate()
177
+ ? (0, dayjs_1.dayjs)(completedAt).add(existingHistory.couponDurationInDays, 'day').toDate()
181
178
  : null;
182
179
  const status = completedAt ? enum_1.PunchMarketingStatus.COMPLETED : enum_1.PunchMarketingStatus.ACTIVE;
183
180
  await this.model.findByIdAndUpdate(existingHistory._id, {
@@ -208,7 +205,7 @@ let PunchMarketingHistoryService = class PunchMarketingHistoryService {
208
205
  });
209
206
  if (!marketing)
210
207
  (0, error_common_1.notFoundError)('Marketing Not Found');
211
- const expiryDate = (0, dayjs_1.default)().add(marketing.dayLimit, 'day').toDate();
208
+ const expiryDate = (0, dayjs_1.dayjs)().add(marketing.dayLimit, 'day').toDate();
212
209
  const couponDurationInDays = marketing.couponDurationInDays;
213
210
  const couponValue = marketing.couponValue;
214
211
  const couponValueType = marketing.couponValueType;
@@ -220,7 +217,7 @@ let PunchMarketingHistoryService = class PunchMarketingHistoryService {
220
217
  : enum_1.PunchMarketingStatus.ACTIVE;
221
218
  const completedAt = marketing.targetOrders == completedOrder ? new Date() : null;
222
219
  const couponExpiryDate = completedAt
223
- ? (0, dayjs_1.default)(completedAt).add(marketing.couponDurationInDays, 'day').toDate()
220
+ ? (0, dayjs_1.dayjs)(completedAt).add(marketing.couponDurationInDays, 'day').toDate()
224
221
  : null;
225
222
  if (order.finance.pricing.subtotal >= marketing.minimumOrderValue) {
226
223
  const data = {
@@ -274,12 +271,18 @@ let PunchMarketingHistoryService = class PunchMarketingHistoryService {
274
271
  isValid: false,
275
272
  };
276
273
  }
277
- const discountAmount = punchHistory.couponValueType == enum_1.ValueType.FIXED
274
+ let discountAmount = punchHistory.couponValueType == enum_1.ValueType.FIXED
278
275
  ? punchHistory.couponValue
279
276
  : (0, shared_1.roundBaseCurrency)((punchHistory.couponValue / 100) * data.amountBeforeCoupon);
280
- const secondaryDiscountAmount = punchHistory.couponValueType == enum_1.ValueType.FIXED
277
+ let secondaryDiscountAmount = punchHistory.couponValueType == enum_1.ValueType.FIXED
281
278
  ? await (0, currency_1.convertToSecondary)(punchHistory.couponValue)
282
279
  : (0, shared_1.roundSecondaryCurrency)((punchHistory.couponValue / 100) * data.secondaryAmountBeforeCoupon);
280
+ if (discountAmount > data.amountBeforeCoupon) {
281
+ discountAmount = data.amountBeforeCoupon;
282
+ }
283
+ if (secondaryDiscountAmount > data.secondaryAmountBeforeCoupon) {
284
+ secondaryDiscountAmount = data.secondaryAmountBeforeCoupon;
285
+ }
283
286
  return {
284
287
  isValid: true,
285
288
  discountAmount,
@@ -1 +1 @@
1
- {"version":3,"file":"punch-marketing-history.service.js","sourceRoot":"/","sources":["modules/punch-marketing-history/services/punch-marketing-history.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { notFoundError } from '@lyxa.ai/core/dist/utilities/error-common';\nimport Container, { Service } from 'typedi';\nimport { TRPCError } from '@trpc/server';\nimport { DocumentType, mongoose, ReturnModelType } from '@typegoose/typegoose';\nimport { FilterDTO, PaginatedResponse, DeleteDTO } from '@lyxa.ai/core/dist/utilities/validation';\nimport { createRawDocumentPaginatorObject, PaginatorOptions } from '@lyxa.ai/core/dist/utilities/pagination';\nimport { ModelType } from '@typegoose/typegoose/lib/types';\nimport {\n\tPunchMarketingHistoryModel,\n\tPunchMarketingHistory as Model,\n\tPunchMarketingModel,\n\tPunchMarketing,\n\tRegularOrder,\n\tRegularOrderModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {\n\tCreatePunchMarketingHistoryDTO as CreateDTO,\n\tGetByUserAndShopDTO,\n\tUpdatePunchMarketingHistoryDTO as UpdateDTO,\n} from '@modules/punch-marketing-history/validations';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {\n\tCouponType,\n\tMarketingType,\n\tPunchMarketingStatus,\n\tStatus,\n\tValueType,\n} from '@lyxa.ai/core/dist/utilities/enum';\nimport dayjs from 'dayjs';\nimport { PunchMarketingSchema, PunchMarketingValidationSchema } from '@modules/marketing/validations';\nimport { CouponValidationOutputDTO, ValidateCouponDTO } from '@modules/coupon/validations';\nimport { convertToSecondary } from '@lyxa.ai/core/dist/utilities/currency';\nimport { roundBaseCurrency, roundSecondaryCurrency } from '@lyxa.ai/core/dist/utilities/shared';\nimport { getLibraries } from '@lyxa.ai/core';\n\n@Service()\nexport class PunchMarketingHistoryService {\n\tprivate model: typeof PunchMarketingHistoryModel & SoftDeleteModel<Model>;\n\tprivate marketingModel: typeof PunchMarketingModel & SoftDeleteModel<PunchMarketing>;\n\tprivate orderModel: typeof RegularOrderModel & SoftDeleteModel<RegularOrder>;\n\n\tconstructor() {\n\t\tthis.model = PunchMarketingHistoryModel as typeof PunchMarketingHistoryModel & SoftDeleteModel<Model>;\n\t\tthis.marketingModel = PunchMarketingModel as typeof PunchMarketingModel & SoftDeleteModel<PunchMarketing>;\n\t\tthis.orderModel = RegularOrderModel as typeof RegularOrderModel & SoftDeleteModel<RegularOrder>;\n\t}\n\n\t/**\n\t * Create a new record\n\t * @param data Data for the new record\n\t */\n\tpublic async create(data: CreateDTO): Promise<DocumentType<Model>> {\n\t\treturn await this.model.create(data);\n\t}\n\n\t/**\n\t * Get record by ID\n\t * @param id ID of the record\n\t */\n\tpublic async findById(id: string | mongoose.Types.ObjectId): Promise<DocumentType<Model>> {\n\t\tconst result = await this.model.findOne({\n\t\t\t_id: id,\n\t\t\tdeletedAt: null,\n\t\t});\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Record not found',\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get records\n\t * @param query Query to find records\n\t */\n\tpublic async find(data?: Partial<FilterDTO>): Promise<PaginatedResponse<DocumentType<ModelType<Model>>>> {\n\t\ttry {\n\t\t\tconst paginate = createRawDocumentPaginatorObject(this.model as ReturnModelType<typeof this.model>);\n\t\t\tconst options: PaginatorOptions<typeof Model> = {\n\t\t\t\tpage: data?.page,\n\t\t\t\tsize: data?.size,\n\t\t\t\tsort: data?.sort,\n\t\t\t\tquery: data?.query,\n\t\t\t\tselect: data?.select,\n\t\t\t\tpopulate: data?.populate,\n\t\t\t};\n\t\t\tconst paginatedResult = await paginate(options);\n\t\t\treturn paginatedResult;\n\t\t} catch (err) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: `err: ${err}`,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get Record\n\t * @param UserId ShopId to find records\n\t */\n\tpublic async getByUserAndShop(data: GetByUserAndShopDTO): Promise<any> {\n\t\tlet result = await this.model.findOne({\n\t\t\tuser: data.userId,\n\t\t\tshop: data.shopId,\n\t\t\texpiryDate: { $gt: new Date() },\n\t\t\tcompletedAt: null,\n\t\t\tstatus: PunchMarketingStatus.ACTIVE,\n\t\t});\n\n\t\tif (result) return result;\n\n\t\tconst marketing = await this.marketingModel.findOne({\n\t\t\tmarketingType: MarketingType.PUNCH_MARKETING,\n\t\t\tshop: data.shopId,\n\t\t\tstatus: Status.ACTIVE,\n\t\t\t'duration.start': { $lt: new Date() },\n\t\t\t'duration.end': { $gt: new Date() },\n\t\t});\n\n\t\tif (!marketing) notFoundError('No Punch Marketing is Active For This Shop...');\n\n\t\treturn {\n\t\t\tuser: data.userId,\n\t\t\tshop: data.shopId,\n\t\t\tmarketing: marketing!._id,\n\t\t\ttargetOrder: marketing.targetOrders,\n\t\t\tminimumOrderValue: marketing.minimumOrderValue,\n\t\t\tcompletedOrder: 0,\n\t\t\tcouponValueType: marketing.couponValueType,\n\t\t\tcouponValue: marketing.couponValue,\n\t\t\tcouponDurationInDays: marketing.couponDurationInDays,\n\t\t};\n\t}\n\n\t/**\n\t * Update record\n\t * @param id ID of the record\n\t * @param data Data to update\n\t */\n\tpublic async update(id: string, data: UpdateDTO): Promise<DocumentType<Model>> {\n\t\tconst record = await this.model.findOneAndUpdate(\n\t\t\t{\n\t\t\t\t_id: id,\n\t\t\t\tdeletedAt: null,\n\t\t\t},\n\t\t\tdata,\n\t\t\t{\n\t\t\t\tnew: true,\n\t\t\t\trunValidators: true,\n\t\t\t}\n\t\t);\n\n\t\tif (!record) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: `Record not found`,\n\t\t\t});\n\t\t}\n\n\t\treturn record;\n\t}\n\n\t/**\n\t * Delete record\n\t * @param data Data for delete\n\t */\n\tpublic async deleteById(data: DeleteDTO): Promise<string> {\n\t\tconst { _id, softDelete } = data;\n\n\t\tconst result = await this.model.deleteRecord({ _id, deletedAt: null }, softDelete);\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Record not found',\n\t\t\t});\n\t\t}\n\n\t\treturn 'Record deleted successfully';\n\t}\n\n\t/**\n\t * Increment punch history for user\n\t * @param userId User ID\n\t * @param orderId Order ID\n\t */\n\tpublic async incrementUserHistory(\n\t\tuserId: mongoose.Types.ObjectId,\n\t\torderId: mongoose.Types.ObjectId\n\t): Promise<string> {\n\t\tconsole.log('here we go');\n\t\tconst order = await this.orderModel.findById(orderId);\n\n\t\tif (!order || order.user.toString != userId.toString) {\n\t\t\tnotFoundError('Order not found');\n\t\t}\n\n\t\tconst existingHistory = await this.model.findOne({\n\t\t\tuser: userId,\n\t\t\tshop: order.shop,\n\t\t\texpiryDate: { $gt: new Date() },\n\t\t\tcompletedAt: null,\n\t\t\tstatus: PunchMarketingStatus.ACTIVE,\n\t\t});\n\n\t\tif (existingHistory) {\n\t\t\tif (order.finance.pricing.subtotal >= existingHistory.minimumOrderValue) {\n\t\t\t\tconst completedAt =\n\t\t\t\t\texistingHistory.targetOrder == existingHistory.completedOrder + 1 ? new Date() : null;\n\t\t\t\tconst couponExpiryDate = completedAt\n\t\t\t\t\t? dayjs(completedAt).add(existingHistory.couponDurationInDays, 'day').toDate()\n\t\t\t\t\t: null;\n\t\t\t\tconst status = completedAt ? PunchMarketingStatus.COMPLETED : PunchMarketingStatus.ACTIVE;\n\n\t\t\t\tawait this.model.findByIdAndUpdate(\n\t\t\t\t\texistingHistory._id,\n\t\t\t\t\t{\n\t\t\t\t\t\t$inc: {\n\t\t\t\t\t\t\tcompletedOrder: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcompletedAt,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tcouponExpiryDate,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tnew: true,\n\t\t\t\t\t\trunValidators: true,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tawait this.createNewHistory(userId, order);\n\t\t}\n\n\t\treturn 'Record updated successfully';\n\t}\n\n\t/**\n\t * Create new history with current punch marketing of the shop\n\t * @param userId User ID\n\t * @param order Order document\n\t */\n\tprivate async createNewHistory(userId: mongoose.Types.ObjectId, order: DocumentType<RegularOrder>) {\n\t\tconst marketing = await this.marketingModel.findOne({\n\t\t\tmarketingType: MarketingType.PUNCH_MARKETING,\n\t\t\tshop: order.shop,\n\t\t\tstatus: Status.ACTIVE,\n\t\t\t'duration.start': { $lt: new Date() },\n\t\t\t'duration.end': { $gt: new Date() },\n\t\t});\n\n\t\tif (!marketing) notFoundError('Marketing Not Found');\n\n\t\tconst expiryDate = dayjs().add(marketing.dayLimit, 'day').toDate();\n\t\tconst couponDurationInDays = marketing!.couponDurationInDays;\n\t\tconst couponValue = marketing!.couponValue;\n\t\tconst couponValueType = marketing!.couponValueType;\n\t\tconst targetOrder = marketing!.targetOrders;\n\t\tconst minimumOrderValue = marketing!.minimumOrderValue;\n\t\tconst completedOrder = 1;\n\t\tconst status =\n\t\t\tmarketing!.targetOrders == completedOrder\n\t\t\t\t? PunchMarketingStatus.COMPLETED\n\t\t\t\t: PunchMarketingStatus.ACTIVE;\n\t\tconst completedAt = marketing!.targetOrders == completedOrder ? new Date() : null;\n\t\tconst couponExpiryDate = completedAt\n\t\t\t? dayjs(completedAt).add(marketing!.couponDurationInDays, 'day').toDate()\n\t\t\t: null;\n\n\t\tif (order.finance.pricing.subtotal >= marketing.minimumOrderValue) {\n\t\t\tconst data: CreateDTO = {\n\t\t\t\tuser: userId as mongoose.Types.ObjectId,\n\t\t\t\tshop: order!.shop as mongoose.Types.ObjectId,\n\t\t\t\tmarketing: marketing!._id as mongoose.Types.ObjectId,\n\t\t\t\ttargetOrder,\n\t\t\t\tminimumOrderValue,\n\t\t\t\tcompletedOrder,\n\t\t\t\tstatus,\n\t\t\t\tcouponValueType,\n\t\t\t\tcouponValue,\n\t\t\t\tcouponDurationInDays,\n\t\t\t\texpiryDate,\n\t\t\t\t...(completedAt && { completedAt }),\n\t\t\t\t...(couponExpiryDate && { couponExpiryDate }),\n\t\t\t};\n\t\t\tawait this.create(data);\n\t\t}\n\t}\n\n\tpublic async applyPunchDiscountToOrder(userId: mongoose.Types.ObjectId, orderId: mongoose.Types.ObjectId) {\n\t\tconst order = await this.orderModel.findById(orderId);\n\t\tif (!order) notFoundError('Order not found');\n\n\t\tconst punchHistory = await this.model.findOneAndUpdate(\n\t\t\t{\n\t\t\t\tuser: userId,\n\t\t\t\tshop: order.shop,\n\t\t\t\tcouponExpiryDate: { $gte: new Date() },\n\t\t\t\tstatus: PunchMarketingStatus.COMPLETED,\n\t\t\t},\n\t\t\t{\n\t\t\t\t$set: {\n\t\t\t\t\torder: orderId,\n\t\t\t\t\tstatus: PunchMarketingStatus.COUPON_USED,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tnew: true,\n\t\t\t\trunValidators: true,\n\t\t\t}\n\t\t);\n\n\t\tif (!punchHistory) notFoundError('No valid punch coupon available');\n\t}\n\n\t/**\n\t * Get punch discount\n\t * @param data Data to use for validating discount\n\t */\n\tpublic async getPunchDiscount(data: ValidateCouponDTO): Promise<CouponValidationOutputDTO> {\n\t\tconst punchHistory = await this.model.findOne({\n\t\t\tuser: data.user,\n\t\t\tshop: data.shop,\n\t\t\tcouponExpiryDate: { $gte: new Date() },\n\t\t\tstatus: PunchMarketingStatus.COMPLETED,\n\t\t});\n\n\t\tif (!punchHistory) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t};\n\t\t}\n\n\t\tconst discountAmount =\n\t\t\tpunchHistory.couponValueType == ValueType.FIXED\n\t\t\t\t? punchHistory.couponValue\n\t\t\t\t: roundBaseCurrency((punchHistory.couponValue / 100) * data.amountBeforeCoupon);\n\n\t\tconst secondaryDiscountAmount =\n\t\t\tpunchHistory.couponValueType == ValueType.FIXED\n\t\t\t\t? await convertToSecondary(punchHistory.couponValue)\n\t\t\t\t: roundSecondaryCurrency((punchHistory.couponValue / 100) * data.secondaryAmountBeforeCoupon);\n\n\t\treturn {\n\t\t\tisValid: true,\n\t\t\tdiscountAmount,\n\t\t\tsecondaryDiscountAmount,\n\t\t\tamountAfterCoupon: Math.max(0, roundBaseCurrency(data.amountBeforeCoupon - discountAmount)),\n\t\t\tsecondaryAmountAfterCoupon: Math.max(\n\t\t\t\t0,\n\t\t\t\troundSecondaryCurrency(data.secondaryAmountBeforeCoupon - secondaryDiscountAmount)\n\t\t\t),\n\t\t\tdiscountCut: {\n\t\t\t\tcompanyCut: 0,\n\t\t\t\tsecondaryCompanyCut: 0,\n\t\t\t\tshopCut: discountAmount,\n\t\t\t\tsecondaryShopCut: secondaryDiscountAmount,\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic async getPunchCoupon(user: mongoose.Types.ObjectId, shop: mongoose.Types.ObjectId): Promise<any> {\n\t\tconst punchHistory = await this.model.findOne({\n\t\t\tuser: user,\n\t\t\tshop: shop,\n\t\t\tcouponExpiryDate: { $gte: new Date() },\n\t\t\tstatus: PunchMarketingStatus.COMPLETED,\n\t\t});\n\t\tif (!punchHistory) return null;\n\n\t\tconst settings = await getLibraries().getCachedSettingsService().getSettings();\n\t\tconst exchangeRate = settings?.currencySetting?.exchangeRate ?? 0;\n\n\t\tconst punchCoupon = {\n\t\t\t_id: null,\n\t\t\tcode: 'punch',\n\t\t\tcouponType: CouponType.INDIVIDUAL_USER,\n\t\t\torderLimitPerUser: 1,\n\t\t\tcreatedBy: null,\n\t\t\tdeletedAt: null,\n\t\t\tvalueType: punchHistory.couponValueType,\n\t\t\tvalue: punchHistory.couponValue,\n\t\t\tmaxDiscountLimit: null,\n\t\t\tduration: {\n\t\t\t\tstart: punchHistory.completedAt,\n\t\t\t\tend: punchHistory.couponExpiryDate,\n\t\t\t},\n\t\t\tshops: [shop],\n\t\t\tspendLimit: null,\n\t\t\ttotalOrderLimit: 1,\n\t\t\tminOrderValue: null,\n\t\t\tforNewUserOnly: false,\n\t\t\tstatus: Status.ACTIVE,\n\t\t\texpirationReason: null,\n\t\t\tcreatedAt: punchHistory.completedAt,\n\t\t\tupdatedAt: punchHistory.completedAt,\n\t\t\tsecondaryCurrencyValue:\n\t\t\t\tpunchHistory.couponValueType === ValueType.FIXED\n\t\t\t\t\t? roundSecondaryCurrency(punchHistory.couponValue * exchangeRate)\n\t\t\t\t\t: null,\n\t\t\tsecondaryCurrencyMaxDiscountLimit: null,\n\t\t\tsecondaryCurrencyMinOrderValue: null,\n\t\t};\n\t\treturn punchCoupon;\n\t}\n}\n\nexport const punchMarketingHistoryService = Container.get(PunchMarketingHistoryService);\n"]}
1
+ {"version":3,"file":"punch-marketing-history.service.js","sourceRoot":"/","sources":["modules/punch-marketing-history/services/punch-marketing-history.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { notFoundError } from '@lyxa.ai/core/dist/utilities/error-common';\nimport Container, { Service } from 'typedi';\nimport { TRPCError } from '@trpc/server';\nimport { DocumentType, mongoose, ReturnModelType } from '@typegoose/typegoose';\nimport { FilterDTO, PaginatedResponse, DeleteDTO } from '@lyxa.ai/core/dist/utilities/validation';\nimport { createRawDocumentPaginatorObject, PaginatorOptions } from '@lyxa.ai/core/dist/utilities/pagination';\nimport { ModelType } from '@typegoose/typegoose/lib/types';\nimport {\n\tPunchMarketingHistoryModel,\n\tPunchMarketingHistory as Model,\n\tPunchMarketingModel,\n\tPunchMarketing,\n\tRegularOrder,\n\tRegularOrderModel,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {\n\tCreatePunchMarketingHistoryDTO as CreateDTO,\n\tGetByUserAndShopDTO,\n\tUpdatePunchMarketingHistoryDTO as UpdateDTO,\n} from '@modules/punch-marketing-history/validations';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport {\n\tCouponType,\n\tMarketingType,\n\tPunchMarketingStatus,\n\tStatus,\n\tValueType,\n} from '@lyxa.ai/core/dist/utilities/enum';\nimport { dayjs } from '@lyxa.ai/core/dist/utilities/dayjs';\nimport { PunchMarketingSchema, PunchMarketingValidationSchema } from '@modules/marketing/validations';\nimport { CouponValidationOutputDTO, ValidateCouponDTO } from '@modules/coupon/validations';\nimport { convertToSecondary } from '@lyxa.ai/core/dist/utilities/currency';\nimport { roundBaseCurrency, roundSecondaryCurrency } from '@lyxa.ai/core/dist/utilities/shared';\nimport { getLibraries } from '@lyxa.ai/core';\n\n@Service()\nexport class PunchMarketingHistoryService {\n\tprivate model: typeof PunchMarketingHistoryModel & SoftDeleteModel<Model>;\n\tprivate marketingModel: typeof PunchMarketingModel & SoftDeleteModel<PunchMarketing>;\n\tprivate orderModel: typeof RegularOrderModel & SoftDeleteModel<RegularOrder>;\n\n\tconstructor() {\n\t\tthis.model = PunchMarketingHistoryModel as typeof PunchMarketingHistoryModel & SoftDeleteModel<Model>;\n\t\tthis.marketingModel = PunchMarketingModel as typeof PunchMarketingModel & SoftDeleteModel<PunchMarketing>;\n\t\tthis.orderModel = RegularOrderModel as typeof RegularOrderModel & SoftDeleteModel<RegularOrder>;\n\t}\n\n\t/**\n\t * Create a new record\n\t * @param data Data for the new record\n\t */\n\tpublic async create(data: CreateDTO): Promise<DocumentType<Model>> {\n\t\treturn await this.model.create(data);\n\t}\n\n\t/**\n\t * Get record by ID\n\t * @param id ID of the record\n\t */\n\tpublic async findById(id: string | mongoose.Types.ObjectId): Promise<DocumentType<Model>> {\n\t\tconst result = await this.model.findOne({\n\t\t\t_id: id,\n\t\t\tdeletedAt: null,\n\t\t});\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Record not found',\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get records\n\t * @param query Query to find records\n\t */\n\tpublic async find(data?: Partial<FilterDTO>): Promise<PaginatedResponse<DocumentType<ModelType<Model>>>> {\n\t\ttry {\n\t\t\tconst paginate = createRawDocumentPaginatorObject(this.model as ReturnModelType<typeof this.model>);\n\t\t\tconst options: PaginatorOptions<typeof Model> = {\n\t\t\t\tpage: data?.page,\n\t\t\t\tsize: data?.size,\n\t\t\t\tsort: data?.sort,\n\t\t\t\tquery: data?.query,\n\t\t\t\tselect: data?.select,\n\t\t\t\tpopulate: data?.populate,\n\t\t\t};\n\t\t\tconst paginatedResult = await paginate(options);\n\t\t\treturn paginatedResult;\n\t\t} catch (err) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'INTERNAL_SERVER_ERROR',\n\t\t\t\tmessage: `err: ${err}`,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get Record\n\t * @param UserId ShopId to find records\n\t */\n\tpublic async getByUserAndShop(data: GetByUserAndShopDTO): Promise<any> {\n\t\tlet result = await this.model.findOne({\n\t\t\tuser: data.userId,\n\t\t\tshop: data.shopId,\n\t\t\texpiryDate: { $gt: new Date() },\n\t\t\tcompletedAt: null,\n\t\t\tstatus: PunchMarketingStatus.ACTIVE,\n\t\t});\n\n\t\tif (result) return result;\n\n\t\tconst marketing = await this.marketingModel.findOne({\n\t\t\tmarketingType: MarketingType.PUNCH_MARKETING,\n\t\t\tshop: data.shopId,\n\t\t\tstatus: Status.ACTIVE,\n\t\t\t'duration.start': { $lt: new Date() },\n\t\t\t'duration.end': { $gt: new Date() },\n\t\t});\n\n\t\tif (!marketing) notFoundError('No Punch Marketing is Active For This Shop...');\n\n\t\treturn {\n\t\t\tuser: data.userId,\n\t\t\tshop: data.shopId,\n\t\t\tmarketing: marketing!._id,\n\t\t\ttargetOrder: marketing.targetOrders,\n\t\t\tminimumOrderValue: marketing.minimumOrderValue,\n\t\t\tcompletedOrder: 0,\n\t\t\tcouponValueType: marketing.couponValueType,\n\t\t\tcouponValue: marketing.couponValue,\n\t\t\tcouponDurationInDays: marketing.couponDurationInDays,\n\t\t};\n\t}\n\n\t/**\n\t * Update record\n\t * @param id ID of the record\n\t * @param data Data to update\n\t */\n\tpublic async update(id: string, data: UpdateDTO): Promise<DocumentType<Model>> {\n\t\tconst record = await this.model.findOneAndUpdate(\n\t\t\t{\n\t\t\t\t_id: id,\n\t\t\t\tdeletedAt: null,\n\t\t\t},\n\t\t\tdata,\n\t\t\t{\n\t\t\t\tnew: true,\n\t\t\t\trunValidators: true,\n\t\t\t}\n\t\t);\n\n\t\tif (!record) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: `Record not found`,\n\t\t\t});\n\t\t}\n\n\t\treturn record;\n\t}\n\n\t/**\n\t * Delete record\n\t * @param data Data for delete\n\t */\n\tpublic async deleteById(data: DeleteDTO): Promise<string> {\n\t\tconst { _id, softDelete } = data;\n\n\t\tconst result = await this.model.deleteRecord({ _id, deletedAt: null }, softDelete);\n\t\tif (!result) {\n\t\t\tthrow new TRPCError({\n\t\t\t\tcode: 'NOT_FOUND',\n\t\t\t\tmessage: 'Record not found',\n\t\t\t});\n\t\t}\n\n\t\treturn 'Record deleted successfully';\n\t}\n\n\t/**\n\t * Increment punch history for user\n\t * @param userId User ID\n\t * @param orderId Order ID\n\t */\n\tpublic async incrementUserHistory(\n\t\tuserId: mongoose.Types.ObjectId,\n\t\torderId: mongoose.Types.ObjectId\n\t): Promise<string> {\n\t\tconsole.log('here we go');\n\t\tconst order = await this.orderModel.findById(orderId);\n\n\t\tif (!order || order.user.toString != userId.toString) {\n\t\t\tnotFoundError('Order not found');\n\t\t}\n\n\t\tconst existingHistory = await this.model.findOne({\n\t\t\tuser: userId,\n\t\t\tshop: order.shop,\n\t\t\texpiryDate: { $gt: new Date() },\n\t\t\tcompletedAt: null,\n\t\t\tstatus: PunchMarketingStatus.ACTIVE,\n\t\t});\n\n\t\tif (existingHistory) {\n\t\t\tif (order.finance.pricing.subtotal >= existingHistory.minimumOrderValue) {\n\t\t\t\tconst completedAt =\n\t\t\t\t\texistingHistory.targetOrder == existingHistory.completedOrder + 1 ? new Date() : null;\n\t\t\t\tconst couponExpiryDate = completedAt\n\t\t\t\t\t? dayjs(completedAt).add(existingHistory.couponDurationInDays, 'day').toDate()\n\t\t\t\t\t: null;\n\t\t\t\tconst status = completedAt ? PunchMarketingStatus.COMPLETED : PunchMarketingStatus.ACTIVE;\n\n\t\t\t\tawait this.model.findByIdAndUpdate(\n\t\t\t\t\texistingHistory._id,\n\t\t\t\t\t{\n\t\t\t\t\t\t$inc: {\n\t\t\t\t\t\t\tcompletedOrder: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcompletedAt,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tcouponExpiryDate,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tnew: true,\n\t\t\t\t\t\trunValidators: true,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tawait this.createNewHistory(userId, order);\n\t\t}\n\n\t\treturn 'Record updated successfully';\n\t}\n\n\t/**\n\t * Create new history with current punch marketing of the shop\n\t * @param userId User ID\n\t * @param order Order document\n\t */\n\tprivate async createNewHistory(userId: mongoose.Types.ObjectId, order: DocumentType<RegularOrder>) {\n\t\tconst marketing = await this.marketingModel.findOne({\n\t\t\tmarketingType: MarketingType.PUNCH_MARKETING,\n\t\t\tshop: order.shop,\n\t\t\tstatus: Status.ACTIVE,\n\t\t\t'duration.start': { $lt: new Date() },\n\t\t\t'duration.end': { $gt: new Date() },\n\t\t});\n\n\t\tif (!marketing) notFoundError('Marketing Not Found');\n\n\t\tconst expiryDate = dayjs().add(marketing.dayLimit, 'day').toDate();\n\t\tconst couponDurationInDays = marketing!.couponDurationInDays;\n\t\tconst couponValue = marketing!.couponValue;\n\t\tconst couponValueType = marketing!.couponValueType;\n\t\tconst targetOrder = marketing!.targetOrders;\n\t\tconst minimumOrderValue = marketing!.minimumOrderValue;\n\t\tconst completedOrder = 1;\n\t\tconst status =\n\t\t\tmarketing!.targetOrders == completedOrder\n\t\t\t\t? PunchMarketingStatus.COMPLETED\n\t\t\t\t: PunchMarketingStatus.ACTIVE;\n\t\tconst completedAt = marketing!.targetOrders == completedOrder ? new Date() : null;\n\t\tconst couponExpiryDate = completedAt\n\t\t\t? dayjs(completedAt).add(marketing!.couponDurationInDays, 'day').toDate()\n\t\t\t: null;\n\n\t\tif (order.finance.pricing.subtotal >= marketing.minimumOrderValue) {\n\t\t\tconst data: CreateDTO = {\n\t\t\t\tuser: userId as mongoose.Types.ObjectId,\n\t\t\t\tshop: order!.shop as mongoose.Types.ObjectId,\n\t\t\t\tmarketing: marketing!._id as mongoose.Types.ObjectId,\n\t\t\t\ttargetOrder,\n\t\t\t\tminimumOrderValue,\n\t\t\t\tcompletedOrder,\n\t\t\t\tstatus,\n\t\t\t\tcouponValueType,\n\t\t\t\tcouponValue,\n\t\t\t\tcouponDurationInDays,\n\t\t\t\texpiryDate,\n\t\t\t\t...(completedAt && { completedAt }),\n\t\t\t\t...(couponExpiryDate && { couponExpiryDate }),\n\t\t\t};\n\t\t\tawait this.create(data);\n\t\t}\n\t}\n\n\tpublic async applyPunchDiscountToOrder(userId: mongoose.Types.ObjectId, orderId: mongoose.Types.ObjectId) {\n\t\tconst order = await this.orderModel.findById(orderId);\n\t\tif (!order) notFoundError('Order not found');\n\n\t\tconst punchHistory = await this.model.findOneAndUpdate(\n\t\t\t{\n\t\t\t\tuser: userId,\n\t\t\t\tshop: order.shop,\n\t\t\t\tcouponExpiryDate: { $gte: new Date() },\n\t\t\t\tstatus: PunchMarketingStatus.COMPLETED,\n\t\t\t},\n\t\t\t{\n\t\t\t\t$set: {\n\t\t\t\t\torder: orderId,\n\t\t\t\t\tstatus: PunchMarketingStatus.COUPON_USED,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tnew: true,\n\t\t\t\trunValidators: true,\n\t\t\t}\n\t\t);\n\n\t\tif (!punchHistory) notFoundError('No valid punch coupon available');\n\t}\n\n\t/**\n\t * Get punch discount\n\t * @param data Data to use for validating discount\n\t */\n\tpublic async getPunchDiscount(data: ValidateCouponDTO): Promise<CouponValidationOutputDTO> {\n\t\tconst punchHistory = await this.model.findOne({\n\t\t\tuser: data.user,\n\t\t\tshop: data.shop,\n\t\t\tcouponExpiryDate: { $gte: new Date() },\n\t\t\tstatus: PunchMarketingStatus.COMPLETED,\n\t\t});\n\n\t\tif (!punchHistory) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t};\n\t\t}\n\n\t\tlet discountAmount =\n\t\t\tpunchHistory.couponValueType == ValueType.FIXED\n\t\t\t\t? punchHistory.couponValue\n\t\t\t\t: roundBaseCurrency((punchHistory.couponValue / 100) * data.amountBeforeCoupon);\n\n\t\tlet secondaryDiscountAmount =\n\t\t\tpunchHistory.couponValueType == ValueType.FIXED\n\t\t\t\t? await convertToSecondary(punchHistory.couponValue)\n\t\t\t\t: roundSecondaryCurrency((punchHistory.couponValue / 100) * data.secondaryAmountBeforeCoupon);\n\n\t\tif (discountAmount > data.amountBeforeCoupon) {\n\t\t\tdiscountAmount = data.amountBeforeCoupon;\n\t\t}\n\t\tif (secondaryDiscountAmount > data.secondaryAmountBeforeCoupon) {\n\t\t\tsecondaryDiscountAmount = data.secondaryAmountBeforeCoupon;\n\t\t}\n\n\t\treturn {\n\t\t\tisValid: true,\n\t\t\tdiscountAmount,\n\t\t\tsecondaryDiscountAmount,\n\t\t\tamountAfterCoupon: Math.max(0, roundBaseCurrency(data.amountBeforeCoupon - discountAmount)),\n\t\t\tsecondaryAmountAfterCoupon: Math.max(\n\t\t\t\t0,\n\t\t\t\troundSecondaryCurrency(data.secondaryAmountBeforeCoupon - secondaryDiscountAmount)\n\t\t\t),\n\t\t\tdiscountCut: {\n\t\t\t\tcompanyCut: 0,\n\t\t\t\tsecondaryCompanyCut: 0,\n\t\t\t\tshopCut: discountAmount,\n\t\t\t\tsecondaryShopCut: secondaryDiscountAmount,\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic async getPunchCoupon(user: mongoose.Types.ObjectId, shop: mongoose.Types.ObjectId): Promise<any> {\n\t\tconst punchHistory = await this.model.findOne({\n\t\t\tuser: user,\n\t\t\tshop: shop,\n\t\t\tcouponExpiryDate: { $gte: new Date() },\n\t\t\tstatus: PunchMarketingStatus.COMPLETED,\n\t\t});\n\t\tif (!punchHistory) return null;\n\n\t\tconst settings = await getLibraries().getCachedSettingsService().getSettings();\n\t\tconst exchangeRate = settings?.currencySetting?.exchangeRate ?? 0;\n\n\t\tconst punchCoupon = {\n\t\t\t_id: null,\n\t\t\tcode: 'punch',\n\t\t\tcouponType: CouponType.INDIVIDUAL_USER,\n\t\t\torderLimitPerUser: 1,\n\t\t\tcreatedBy: null,\n\t\t\tdeletedAt: null,\n\t\t\tvalueType: punchHistory.couponValueType,\n\t\t\tvalue: punchHistory.couponValue,\n\t\t\tmaxDiscountLimit: null,\n\t\t\tduration: {\n\t\t\t\tstart: punchHistory.completedAt,\n\t\t\t\tend: punchHistory.couponExpiryDate,\n\t\t\t},\n\t\t\tshops: [shop],\n\t\t\tspendLimit: null,\n\t\t\ttotalOrderLimit: 1,\n\t\t\tminOrderValue: null,\n\t\t\tforNewUserOnly: false,\n\t\t\tstatus: Status.ACTIVE,\n\t\t\texpirationReason: null,\n\t\t\tcreatedAt: punchHistory.completedAt,\n\t\t\tupdatedAt: punchHistory.completedAt,\n\t\t\tsecondaryCurrencyValue:\n\t\t\t\tpunchHistory.couponValueType === ValueType.FIXED\n\t\t\t\t\t? roundSecondaryCurrency(punchHistory.couponValue * exchangeRate)\n\t\t\t\t\t: null,\n\t\t\tsecondaryCurrencyMaxDiscountLimit: null,\n\t\t\tsecondaryCurrencyMinOrderValue: null,\n\t\t};\n\t\treturn punchCoupon;\n\t}\n}\n\nexport const punchMarketingHistoryService = Container.get(PunchMarketingHistoryService);\n"]}