@lyxa.ai/marketing 1.0.65 → 1.0.68

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 (91) hide show
  1. package/dist/lib/modules/coupon/routers/coupon.router.d.ts +159 -10
  2. package/dist/lib/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  3. package/dist/lib/modules/coupon/routers/coupon.router.js +28 -0
  4. package/dist/lib/modules/coupon/routers/coupon.router.js.map +1 -1
  5. package/dist/lib/modules/coupon/services/coupon.service.d.ts +28 -3
  6. package/dist/lib/modules/coupon/services/coupon.service.d.ts.map +1 -1
  7. package/dist/lib/modules/coupon/services/coupon.service.js +18 -2
  8. package/dist/lib/modules/coupon/services/coupon.service.js.map +1 -1
  9. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.d.ts.map +1 -1
  10. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js +11 -14
  11. package/dist/lib/modules/coupon/services/patterns/repository/CouponMetricsRepository.js.map +1 -1
  12. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.d.ts +30 -2
  13. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.d.ts.map +1 -1
  14. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js +412 -2
  15. package/dist/lib/modules/coupon/services/patterns/repository/CouponRepository.js.map +1 -1
  16. package/dist/lib/modules/coupon/validations/coupon.validation.d.ts +580 -1
  17. package/dist/lib/modules/coupon/validations/coupon.validation.d.ts.map +1 -1
  18. package/dist/lib/modules/coupon/validations/coupon.validation.js +48 -1
  19. package/dist/lib/modules/coupon/validations/coupon.validation.js.map +1 -1
  20. package/dist/lib/modules/deal-setting/routers/deal-setting.router.d.ts +4 -4
  21. package/dist/lib/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  22. package/dist/lib/modules/featured-setting/routers/featured-setting.router.d.ts +4 -4
  23. package/dist/lib/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  24. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
  25. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js +1 -0
  26. package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js.map +1 -1
  27. package/dist/lib/modules/marketing/routers/marketing.router.d.ts +4 -4
  28. package/dist/lib/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  29. package/dist/lib/modules/marketing/services/index.d.ts +1 -0
  30. package/dist/lib/modules/marketing/services/index.d.ts.map +1 -1
  31. package/dist/lib/modules/marketing/services/index.js +1 -0
  32. package/dist/lib/modules/marketing/services/index.js.map +1 -1
  33. package/dist/lib/modules/marketing/services/marketing.service.d.ts.map +1 -1
  34. package/dist/lib/modules/marketing/services/marketing.service.js +34 -27
  35. package/dist/lib/modules/marketing/services/marketing.service.js.map +1 -1
  36. package/dist/lib/modules/marketing/services/new-user-discount-marketing.service.d.ts +11 -0
  37. package/dist/lib/modules/marketing/services/new-user-discount-marketing.service.d.ts.map +1 -0
  38. package/dist/lib/modules/marketing/services/new-user-discount-marketing.service.js +116 -0
  39. package/dist/lib/modules/marketing/services/new-user-discount-marketing.service.js.map +1 -0
  40. package/dist/lib/modules/marketing/validations/all-marketings.validation.d.ts.map +1 -1
  41. package/dist/lib/modules/marketing/validations/all-marketings.validation.js +3 -0
  42. package/dist/lib/modules/marketing/validations/all-marketings.validation.js.map +1 -1
  43. package/dist/lib/modules/marketing/validations/discount-marketing.validation.d.ts +6 -6
  44. package/dist/lib/modules/marketing/validations/index.d.ts +1 -0
  45. package/dist/lib/modules/marketing/validations/index.d.ts.map +1 -1
  46. package/dist/lib/modules/marketing/validations/index.js +1 -0
  47. package/dist/lib/modules/marketing/validations/index.js.map +1 -1
  48. package/dist/lib/modules/marketing/validations/new-user-discount-marketing.validation.d.ts +677 -0
  49. package/dist/lib/modules/marketing/validations/new-user-discount-marketing.validation.d.ts.map +1 -0
  50. package/dist/lib/modules/marketing/validations/new-user-discount-marketing.validation.js +83 -0
  51. package/dist/lib/modules/marketing/validations/new-user-discount-marketing.validation.js.map +1 -0
  52. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.d.ts.map +1 -1
  53. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.js +30 -0
  54. package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.js.map +1 -1
  55. package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +4 -4
  56. package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  57. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts +4 -4
  58. package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -1
  59. package/dist/types/modules/coupon/routers/coupon.router.d.ts +159 -10
  60. package/dist/types/modules/coupon/routers/coupon.router.d.ts.map +1 -1
  61. package/dist/types/modules/coupon/services/coupon.service.d.ts +28 -3
  62. package/dist/types/modules/coupon/services/coupon.service.d.ts.map +1 -1
  63. package/dist/types/modules/coupon/services/patterns/repository/CouponMetricsRepository.d.ts.map +1 -1
  64. package/dist/types/modules/coupon/services/patterns/repository/CouponRepository.d.ts +30 -2
  65. package/dist/types/modules/coupon/services/patterns/repository/CouponRepository.d.ts.map +1 -1
  66. package/dist/types/modules/coupon/validations/coupon.validation.d.ts +580 -1
  67. package/dist/types/modules/coupon/validations/coupon.validation.d.ts.map +1 -1
  68. package/dist/types/modules/deal-setting/routers/deal-setting.router.d.ts +4 -4
  69. package/dist/types/modules/deal-setting/routers/deal-setting.router.d.ts.map +1 -1
  70. package/dist/types/modules/featured-setting/routers/featured-setting.router.d.ts +4 -4
  71. package/dist/types/modules/featured-setting/routers/featured-setting.router.d.ts.map +1 -1
  72. package/dist/types/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
  73. package/dist/types/modules/marketing/routers/marketing.router.d.ts +4 -4
  74. package/dist/types/modules/marketing/routers/marketing.router.d.ts.map +1 -1
  75. package/dist/types/modules/marketing/services/index.d.ts +1 -0
  76. package/dist/types/modules/marketing/services/index.d.ts.map +1 -1
  77. package/dist/types/modules/marketing/services/marketing.service.d.ts.map +1 -1
  78. package/dist/types/modules/marketing/services/new-user-discount-marketing.service.d.ts +20 -0
  79. package/dist/types/modules/marketing/services/new-user-discount-marketing.service.d.ts.map +1 -0
  80. package/dist/types/modules/marketing/validations/all-marketings.validation.d.ts.map +1 -1
  81. package/dist/types/modules/marketing/validations/discount-marketing.validation.d.ts +6 -6
  82. package/dist/types/modules/marketing/validations/index.d.ts +1 -0
  83. package/dist/types/modules/marketing/validations/index.d.ts.map +1 -1
  84. package/dist/types/modules/marketing/validations/new-user-discount-marketing.validation.d.ts +686 -0
  85. package/dist/types/modules/marketing/validations/new-user-discount-marketing.validation.d.ts.map +1 -0
  86. package/dist/types/modules/marketing/validations/spend-to-get-marketing.validation.d.ts.map +1 -1
  87. package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +4 -4
  88. package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts.map +1 -1
  89. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts +4 -4
  90. package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -1
  91. package/package.json +2 -7
@@ -1 +1 @@
1
- {"version":3,"file":"coupon.validation.js","sourceRoot":"/","sources":["modules/coupon/validations/coupon.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 {\n\tCouponExpirationReason,\n\tCouponType,\n\tGraphType,\n\tItemType,\n\tStatus,\n\tValueType,\n} from '@lyxa.ai/core/dist/utilities/enum';\nimport {\n\tcreateResponseSchema,\n\tDurationSchema,\n} from '@lyxa.ai/core/dist/utilities/validation/common-validation';\nimport { dayjs } from '@lyxa.ai/core/dist/utilities/dayjs';\n\n/**\n * Define the base parent schema fields\n */\nexport const couponFields = {\n\tcode: ZodValidation.string('Code', {\n\t\tregex: { pattern: new RegExp('^[A-Z0-9]+$'), message: 'Coupon name must be uppercase' },\n\t\tmaxLength: 10,\n\t\tminLength: 4,\n\t\tminMessage: 'Coupon must be 4 characters',\n\t\tmaxMessage: 'Coupon must be 10 characters',\n\t}),\n\torderLimitPerUser: ZodValidation.number('OrderLimitPerUser')\n\t\t.nonnegative()\n\t\t.optional()\n\t\t.nullable()\n\t\t.default(null),\n\tisOrderLimitPerUserEnabled: ZodValidation.boolean('Is order limit per user enabled')\n\t\t.optional()\n\t\t.default(false),\n\tcreatedBy: ZodValidation.objectId('Created by').optional(),\n\tisExpired: ZodValidation.boolean('Is expired').optional(),\n};\n\nexport const baseFields = {\n\t...couponFields,\n\tvalueType: ZodValidation.enumType(ValueType, 'Value type'),\n\tvalue: ZodValidation.number('Value'),\n\tsecondaryCurrencyValue: ZodValidation.number('Secondary currency value').optional(),\n\tmaxDiscountLimit: ZodValidation.number('Max discount limit').optional().nullable().default(null),\n\tsecondaryCurrencyMaxDiscountLimit: ZodValidation.number('Secondary currency max discount limit').optional(),\n\tisMaxDiscountLimitEnabled: ZodValidation.boolean('Is max discount limit enabled').optional().default(false),\n\tduration: DurationSchema\n\t\t// .refine((d: any) => d.start >= new Date() && d.end >= new Date(), {\n\t\t// \tmessage: 'Start and end dates must not be in the past',\n\t\t// })\n\t\t.transform(duration => {\n\t\t\tduration.start = dayjs(duration.start).toDate();\n\t\t\tduration.end = dayjs(duration.end).toDate();\n\t\t\treturn duration;\n\t\t}),\n\tspendLimit: ZodValidation.number('Spend limit').optional().nullable().default(null),\n\tisSpendLimitEnabled: ZodValidation.boolean('Is spend limit enabled').optional().default(false),\n\ttotalOrderLimit: ZodValidation.number('Total order limit').optional().nullable().default(null),\n\tisTotalOrderLimitEnabled: ZodValidation.boolean('Is total order limit enabled').optional().default(false),\n\tminOrderValue: ZodValidation.number('Min order value').nullable().default(null),\n\tsecondaryCurrencyMinOrderValue: ZodValidation.number('Secondary currency min order value').optional(),\n\tisMinOrderValueEnabled: ZodValidation.boolean('Is min order value enabled').optional().default(false),\n\tforNewUserOnly: ZodValidation.boolean('ForNewUserOnly').optional().default(false),\n\tstatus: ZodValidation.enumType(Status, 'Status').optional().default(Status.ACTIVE),\n\texpirationReason: ZodValidation.enumType(CouponExpirationReason, 'Expiration reason')\n\t\t.optional()\n\t\t.nullable()\n\t\t.default(null),\n\treferringUser: z\n\t\t.object({\n\t\t\tname: ZodValidation.string('Referring user name').optional(),\n\t\t})\n\t\t.optional(),\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: CouponValidationSchema,\n\tEntitySchema: CouponSchema,\n\tIdSchema: CouponIdSchema,\n\tUpdateSchema: UpdateCouponSchema,\n} = schemaBuilder.getAllSchemas({ createdAt: true });\n\n/**\n * Export schemas\n */\nexport const GetUserCouponsResponseSchema = z.object({\n\tavailable: z.array(CouponSchema),\n\tused: z.array(CouponSchema),\n\texpired: z.array(CouponSchema),\n});\n\nexport {\n\tCouponValidationSchema,\n\tCouponSchema,\n\tCouponIdSchema as CouponIdValidationSchema,\n\tUpdateCouponSchema,\n};\n\n/**\n * Schema for getting user coupons\n */\nexport const GetUserCouponSchema = z.object({\n\tuser: ZodValidation.objectId('User').optional(),\n\tshop: ZodValidation.objectId('Shop').optional(),\n\tvendor: ZodValidation.objectId('Vendor').optional(),\n\tpage: ZodValidation.number('Page').optional().default(0),\n\tsize: ZodValidation.number('Page size').optional().default(100),\n});\n\n/**\n * Schema for validating coupons\n */\nexport const ValidateCouponSchema = z\n\t.object({\n\t\tuser: ZodValidation.objectIdOrStringSchema,\n\t\tshop: ZodValidation.objectIdOrStringSchema.optional(),\n\t\tvendor: ZodValidation.objectIdOrStringSchema.optional(),\n\t\tcoupon: ZodValidation.string('Coupon').optional(),\n\t\tamountBeforeCoupon: ZodValidation.number('Amount before coupon'),\n\t\tsecondaryAmountBeforeCoupon: ZodValidation.number('Secondary amount before coupon'),\n\t\tscheduledAt: ZodValidation.date('Scheduled at').optional(),\n\t})\n\t.superRefine((data, ctx) => {\n\t\tif (!data.shop && !data.vendor) {\n\t\t\tctx.addIssue({\n\t\t\t\tpath: ['shop', 'vendor'],\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Shop or vendor is required.',\n\t\t\t});\n\t\t}\n\t\tif (data.shop && data.vendor) {\n\t\t\tctx.addIssue({\n\t\t\t\tpath: ['shop', 'vendor'],\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Only one of Shop or vendor should be provided.',\n\t\t\t});\n\t\t}\n\t});\n\nconst discountCutSchema = z.object({\n\tcompanyCut: ZodValidation.number('companyCut').optional(),\n\tsecondaryCompanyCut: ZodValidation.number('secondaryCompanyCut').optional(),\n\tshopCut: ZodValidation.number('shopCut').optional(),\n\tsecondaryShopCut: ZodValidation.number('secondaryShopCut').optional(),\n\tvendorCut: ZodValidation.number('vendorCut').optional(),\n\tsecondaryVendorCut: ZodValidation.number('secondaryVendorCut').optional(),\n});\n\n/**\n * Schema for coupon validation output\n */\nexport const CouponValidationOutputSchema = z.object({\n\tisValid: ZodValidation.boolean('IsValid').default(false),\n\tmessage: ZodValidation.string('Message').optional(),\n\tamountAfterCoupon: ZodValidation.number('Amount after coupon').optional(),\n\tsecondaryAmountAfterCoupon: ZodValidation.number('Secondary amount after coupon').optional(),\n\tdiscountAmount: ZodValidation.number('Coupon Discount').optional(),\n\tsecondaryDiscountAmount: ZodValidation.number('Secondary coupon discount').optional(),\n\tdiscountCut: discountCutSchema.optional(),\n\tcouponDetails: z.record(z.unknown()).optional(), // Flexible field for any additional coupon details\n\tcouponInfo: z.record(z.unknown()).optional(),\n});\n\nexport const CouponCodeSchema = z.object({\n\tcouponCode: ZodValidation.string('Coupon code'),\n});\n\nexport const UpdateCouponStatusSchema = z.object({\n\t_id: ZodValidation.objectIdOrStringSchema,\n\tstatus: ZodValidation.enumType(Status, 'Status').optional().default(Status.ACTIVE),\n});\n\nexport const CheckExistingNewUserCouponOutputSchema = z.object({\n\texists: ZodValidation.boolean('Exists').default(false),\n});\n\nexport const CouponValidationResponseSchema = createResponseSchema(CouponValidationOutputSchema);\n\nexport const DeviceIdSchema = z.object({ deviceId: z.string() });\nexport const IsNewUserGiftBoxShownSchema = z.object({ isNewUserGiftBoxShown: z.boolean() });\n\nexport const BaseDateInputSchema = z\n\t.object({\n\t\tstartDate: ZodValidation.date('Start Date').transform(val => dayjs(val).startOf('day').toDate()),\n\t\tendDate: ZodValidation.date('End Date').transform(val => dayjs(val).endOf('day').toDate()),\n\t})\n\t.strict();\n\nexport const DateInputSchema = BaseDateInputSchema.refine(\n\tdata => !dayjs(data.startDate).isAfter(dayjs(data.endDate)),\n\t{\n\t\tmessage: 'Start date cannot be after end date',\n\t\tpath: ['startDate'],\n\t}\n);\n\nexport const GraphInputSchema = BaseDateInputSchema.extend({\n\tgraphType: ZodValidation.enumType(GraphType, 'Type').optional(),\n\titemType: ZodValidation.enumType(ItemType, 'Item Type').optional(),\n}).refine(data => !dayjs(data.startDate).isAfter(dayjs(data.endDate)), {\n\tmessage: 'Start date cannot be after end date',\n\tpath: ['startDate'],\n});\n\nexport const CouponMetricsOutputSchema = z.object({\n\tactiveCoupons: ZodValidation.number('Active coupons').default(0),\n\ttotalCreated: ZodValidation.number('Total created coupons').default(0),\n\ttotalRedeemedCoupons: ZodValidation.number('Total redeemed coupons').default(0),\n\tredemptionRate: ZodValidation.number('Redemption rate').default(0),\n\ttotalCouponOrders: ZodValidation.number('Total coupon orders').default(0),\n\ttotalRevenue: ZodValidation.number('Total revenue from coupons').default(0),\n\ttotalProfit: ZodValidation.number('Total profit from coupons').default(0),\n});\n\nexport const CouponMetricsByTypeSchema = z.object({\n\tcouponType: ZodValidation.enumType(CouponType, 'Coupon Type'),\n\tcouponTypeTitle: ZodValidation.string('Coupon Type Title'),\n\ttotalCouponOrders: ZodValidation.number('Total coupon orders').default(0),\n\ttotalRevenue: ZodValidation.number('Total revenue from coupons').default(0),\n\taverageOrderValue: ZodValidation.number('Average order value for coupons of this type').default(0),\n\tusage: ZodValidation.number('Usage').default(0),\n\tongoing: ZodValidation.number('Ongoing').default(0),\n\tamountSpent: ZodValidation.number('Amount spent on coupons of this type').default(0),\n\tredemptionRate: ZodValidation.number('Redemption rate for this coupon type').default(0),\n});\n\nexport const GraphSchema = z.object({\n\tcategories: ZodValidation.array(ZodValidation.string('Category labels')),\n\tseries: ZodValidation.array(\n\t\tz.object({\n\t\t\tname: ZodValidation.string('Name of the series'),\n\t\t\tdata: ZodValidation.array(ZodValidation.number('Series data')),\n\t\t})\n\t),\n});\n\nexport const TotalProfitGraphSchema = GraphSchema.extend({\n\ttotalProfit: ZodValidation.number('Total profit').default(0),\n});\n\nexport const CouponListRequestSchema = z.object({\n\tpage: ZodValidation.number('Page', { isInt: true, isPositive: true, min: 1 }),\n\tsize: ZodValidation.number('Page', { isInt: true, isPositive: true, min: 1, max: 100 }),\n\tcouponTypes: ZodValidation.array(ZodValidation.enumType(CouponType, 'Coupon type'), 'Coupon types'),\n\tfromDate: ZodValidation.date('From date'),\n\ttoDate: ZodValidation.date('To date'),\n\tstatus: ZodValidation.enumType(Status, 'Status').optional(),\n\tsearchKey: ZodValidation.string('Search key').optional(),\n\tpopulate: ZodValidation.array(\n\t\tz.object({\n\t\t\tpath: ZodValidation.string(),\n\t\t\tselect: z\n\t\t\t\t.union([ZodValidation.string(), z.record(z.string(), z.union([z.literal(0), z.literal(1)]))])\n\t\t\t\t.optional(),\n\t\t}),\n\t\t'Populate'\n\t).optional(),\n});\n\nexport const CouponUsersRequestSchema = z.object({\n\tstartDate: z.date().optional(),\n\tendDate: z.date().optional(),\n\tcouponId: z.string(),\n\tpage: z.number().int().positive().default(1),\n\tsize: z.number().int().positive().default(10),\n\tsearch: z.string().trim().optional(),\n\tzone: z.string().optional(),\n\tsort: z.record(z.union([z.literal(1), z.literal(-1)])).optional(),\n});\n\nexport const singleCouponOrdersRequestSchema = z.object({\n\tcouponId: z.string(),\n\tuserId: z.string().optional(),\n\tpage: z.number().int().positive().default(1),\n\tsize: z.number().int().positive().default(10),\n\tstartDate: z.string().optional(),\n\tendDate: z.string().optional(),\n\tsearch: z.string().trim().optional(),\n\tzone: z.string().optional(),\n\tsort: z.record(z.union([z.literal(1), z.literal(-1)])).optional(),\n});\n\nexport const CouponUserItemSchema = z.object({\n\tid: z.string(),\n\tname: z.string(),\n\tavatar: z.string().nullable().optional(),\n\tzone: z.string().nullable(),\n\tzoneId: z.string().nullable(),\n\temail: z.string().nullable(),\n\tmobile: z.string().nullable(),\n\torders: z.number(),\n\tcreationDate: z.coerce.date(),\n\tstatus: z.nativeEnum(Status),\n});\n\nexport const CouponSingleUserOrderItemSchema = z.object({\n\torder: z.object({\n\t\t_id: z.string(),\n\t\torderId: z.string().optional(),\n\t\torderAmount: z.number().optional(),\n\t}),\n\tuser: z.object({\n\t\t_id: z.string(),\n\t\tname: z.string().optional(),\n\t\tphoto: z.string().nullable().optional(),\n\t}),\n\tshop: z.object({\n\t\t_id: z.string(),\n\t\tname: z.string().optional(),\n\t\tlogo: z.string().nullable().optional(),\n\t}),\n\tzone: z.string().nullable().optional(),\n\tcreationDate: z.coerce.date().optional(),\n});\n\nexport const CouponMetricsResponseSchema = createResponseSchema(CouponMetricsOutputSchema);\nexport const CouponMetricsByTypeResponseSchema = createResponseSchema(CouponMetricsByTypeSchema.array());\nexport const GraphResponseSchema = createResponseSchema(GraphSchema);\nexport const TotalProfitGraphResponseSchema = createResponseSchema(TotalProfitGraphSchema);\n\n/**\n * Export DTO types\n */\nexport type CreateCouponDTO = DTO<typeof CouponValidationSchema>;\nexport type CouponDTO = DTO<typeof CouponSchema>;\nexport type UpdateCouponDTO = DTO<typeof UpdateCouponSchema>;\nexport type GetUserCouponDTO = DTO<typeof GetUserCouponSchema>;\nexport type ValidateCouponDTO = DTO<typeof ValidateCouponSchema>;\nexport type CouponValidationOutputDTO = DTO<typeof CouponValidationOutputSchema>;\nexport type GetUserCouponsResponseDTO = DTO<typeof GetUserCouponsResponseSchema>;\nexport type UpdateCouponStatusDTO = DTO<typeof UpdateCouponStatusSchema>;\nexport type CheckExistingNewUserCouponOutputDTO = DTO<typeof CheckExistingNewUserCouponOutputSchema>;\nexport type DeviceIdDTO = DTO<typeof DeviceIdSchema>;\nexport type IsNewUserGiftBoxShownDTO = DTO<typeof IsNewUserGiftBoxShownSchema>;\nexport type DateInputDTO = DTO<typeof DateInputSchema>;\nexport type GraphInputDTO = DTO<typeof GraphInputSchema>;\nexport type CouponMetricsOutputDTO = DTO<typeof CouponMetricsOutputSchema>;\nexport type CouponMetricsByTypeDTO = DTO<typeof CouponMetricsByTypeSchema>;\nexport type GraphDTO = DTO<typeof GraphSchema>;\nexport type TotalProfitGraphDTO = DTO<typeof TotalProfitGraphSchema>;\nexport type CouponListRequestDTO = DTO<typeof CouponListRequestSchema>;\nexport type CouponUsersRequestDTO = DTO<typeof CouponUsersRequestSchema>;\nexport type SingleCouppnOrdersRequestDTO = DTO<typeof singleCouponOrdersRequestSchema>;\n\nexport type CouponUserItemDTO = DTO<typeof CouponUserItemSchema>;\n"]}
1
+ {"version":3,"file":"coupon.validation.js","sourceRoot":"/","sources":["modules/coupon/validations/coupon.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 {\n\tCouponExpirationReason,\n\tCouponType,\n\tGraphType,\n\tItemType,\n\tStatus,\n\tValueType,\n} from '@lyxa.ai/core/dist/utilities/enum';\nimport {\n\tcreateResponseSchema,\n\tDurationSchema,\n} from '@lyxa.ai/core/dist/utilities/validation/common-validation';\nimport { dayjs } from '@lyxa.ai/core/dist/utilities/dayjs';\n\n/**\n * Define the base parent schema fields\n */\nexport const couponFields = {\n\tcode: ZodValidation.string('Code', {\n\t\tregex: { pattern: new RegExp('^[A-Z0-9]+$'), message: 'Coupon name must be uppercase' },\n\t\tmaxLength: 10,\n\t\tminLength: 4,\n\t\tminMessage: 'Coupon must be 4 characters',\n\t\tmaxMessage: 'Coupon must be 10 characters',\n\t}),\n\torderLimitPerUser: ZodValidation.number('OrderLimitPerUser')\n\t\t.nonnegative()\n\t\t.optional()\n\t\t.nullable()\n\t\t.default(null),\n\tisOrderLimitPerUserEnabled: ZodValidation.boolean('Is order limit per user enabled')\n\t\t.optional()\n\t\t.default(false),\n\tcreatedBy: ZodValidation.objectId('Created by').optional(),\n\tisExpired: ZodValidation.boolean('Is expired').optional(),\n};\n\nexport const baseFields = {\n\t...couponFields,\n\tvalueType: ZodValidation.enumType(ValueType, 'Value type'),\n\tvalue: ZodValidation.number('Value'),\n\tsecondaryCurrencyValue: ZodValidation.number('Secondary currency value').optional(),\n\tmaxDiscountLimit: ZodValidation.number('Max discount limit').optional().nullable().default(null),\n\tsecondaryCurrencyMaxDiscountLimit: ZodValidation.number('Secondary currency max discount limit').optional(),\n\tisMaxDiscountLimitEnabled: ZodValidation.boolean('Is max discount limit enabled').optional().default(false),\n\tduration: DurationSchema\n\t\t// .refine((d: any) => d.start >= new Date() && d.end >= new Date(), {\n\t\t// \tmessage: 'Start and end dates must not be in the past',\n\t\t// })\n\t\t.transform(duration => {\n\t\t\tduration.start = dayjs(duration.start).toDate();\n\t\t\tduration.end = dayjs(duration.end).toDate();\n\t\t\treturn duration;\n\t\t}),\n\tspendLimit: ZodValidation.number('Spend limit').optional().nullable().default(null),\n\tisSpendLimitEnabled: ZodValidation.boolean('Is spend limit enabled').optional().default(false),\n\ttotalOrderLimit: ZodValidation.number('Total order limit').optional().nullable().default(null),\n\tisTotalOrderLimitEnabled: ZodValidation.boolean('Is total order limit enabled').optional().default(false),\n\tminOrderValue: ZodValidation.number('Min order value').nullable().default(null),\n\tsecondaryCurrencyMinOrderValue: ZodValidation.number('Secondary currency min order value').optional(),\n\tisMinOrderValueEnabled: ZodValidation.boolean('Is min order value enabled').optional().default(false),\n\tforNewUserOnly: ZodValidation.boolean('ForNewUserOnly').optional().default(false),\n\tstatus: ZodValidation.enumType(Status, 'Status').optional().default(Status.ACTIVE),\n\texpirationReason: ZodValidation.enumType(CouponExpirationReason, 'Expiration reason')\n\t\t.optional()\n\t\t.nullable()\n\t\t.default(null),\n\treferringUser: z\n\t\t.object({\n\t\t\tname: ZodValidation.string('Referring user name').optional(),\n\t\t})\n\t\t.optional(),\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: CouponValidationSchema,\n\tEntitySchema: CouponSchema,\n\tIdSchema: CouponIdSchema,\n\tUpdateSchema: UpdateCouponSchema,\n} = schemaBuilder.getAllSchemas({ createdAt: true });\n\n/**\n * Export schemas\n */\nexport const GetUserCouponsResponseSchema = z.object({\n\tavailable: z.array(CouponSchema),\n\tused: z.array(CouponSchema),\n\texpired: z.array(CouponSchema),\n});\n\nexport {\n\tCouponValidationSchema,\n\tCouponSchema,\n\tCouponIdSchema as CouponIdValidationSchema,\n\tUpdateCouponSchema,\n};\n\n/**\n * Schema for getting user coupons\n */\nexport const GetUserCouponSchema = z.object({\n\tuser: ZodValidation.objectId('User').optional(),\n\tshop: ZodValidation.objectId('Shop').optional(),\n\tvendor: ZodValidation.objectId('Vendor').optional(),\n\tpage: ZodValidation.number('Page').optional().default(0),\n\tsize: ZodValidation.number('Page size').optional().default(100),\n});\n\n/**\n * Schema for validating coupons\n */\nexport const ValidateCouponSchema = z\n\t.object({\n\t\tuser: ZodValidation.objectIdOrStringSchema,\n\t\tshop: ZodValidation.objectIdOrStringSchema.optional(),\n\t\tvendor: ZodValidation.objectIdOrStringSchema.optional(),\n\t\tcoupon: ZodValidation.string('Coupon').optional(),\n\t\tamountBeforeCoupon: ZodValidation.number('Amount before coupon'),\n\t\tsecondaryAmountBeforeCoupon: ZodValidation.number('Secondary amount before coupon'),\n\t\tscheduledAt: ZodValidation.date('Scheduled at').optional(),\n\t})\n\t.superRefine((data, ctx) => {\n\t\tif (!data.shop && !data.vendor) {\n\t\t\tctx.addIssue({\n\t\t\t\tpath: ['shop', 'vendor'],\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Shop or vendor is required.',\n\t\t\t});\n\t\t}\n\t\tif (data.shop && data.vendor) {\n\t\t\tctx.addIssue({\n\t\t\t\tpath: ['shop', 'vendor'],\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Only one of Shop or vendor should be provided.',\n\t\t\t});\n\t\t}\n\t});\n\nconst discountCutSchema = z.object({\n\tcompanyCut: ZodValidation.number('companyCut').optional(),\n\tsecondaryCompanyCut: ZodValidation.number('secondaryCompanyCut').optional(),\n\tshopCut: ZodValidation.number('shopCut').optional(),\n\tsecondaryShopCut: ZodValidation.number('secondaryShopCut').optional(),\n\tvendorCut: ZodValidation.number('vendorCut').optional(),\n\tsecondaryVendorCut: ZodValidation.number('secondaryVendorCut').optional(),\n});\n\n/**\n * Schema for coupon validation output\n */\nexport const CouponValidationOutputSchema = z.object({\n\tisValid: ZodValidation.boolean('IsValid').default(false),\n\tmessage: ZodValidation.string('Message').optional(),\n\tamountAfterCoupon: ZodValidation.number('Amount after coupon').optional(),\n\tsecondaryAmountAfterCoupon: ZodValidation.number('Secondary amount after coupon').optional(),\n\tdiscountAmount: ZodValidation.number('Coupon Discount').optional(),\n\tsecondaryDiscountAmount: ZodValidation.number('Secondary coupon discount').optional(),\n\tdiscountCut: discountCutSchema.optional(),\n\tcouponDetails: z.record(z.unknown()).optional(), // Flexible field for any additional coupon details\n\tcouponInfo: z.record(z.unknown()).optional(),\n});\n\nexport const CouponCodeSchema = z.object({\n\tcouponCode: ZodValidation.string('Coupon code'),\n});\n\nexport const UpdateCouponStatusSchema = z.object({\n\t_id: ZodValidation.objectIdOrStringSchema,\n\tstatus: ZodValidation.enumType(Status, 'Status').optional().default(Status.ACTIVE),\n});\n\nexport const CheckExistingNewUserCouponOutputSchema = z.object({\n\texists: ZodValidation.boolean('Exists').default(false),\n});\n\nexport const CouponValidationResponseSchema = createResponseSchema(CouponValidationOutputSchema);\n\nexport const DeviceIdSchema = z.object({ deviceId: z.string() });\nexport const IsNewUserGiftBoxShownSchema = z.object({ isNewUserGiftBoxShown: z.boolean() });\n\nexport const BaseDateInputSchema = z\n\t.object({\n\t\tstartDate: ZodValidation.date('Start Date').transform(val => dayjs(val).startOf('day').toDate()),\n\t\tendDate: ZodValidation.date('End Date').transform(val => dayjs(val).endOf('day').toDate()),\n\t})\n\t.strict();\n\nexport const DateInputSchema = BaseDateInputSchema.refine(\n\tdata => !dayjs(data.startDate).isAfter(dayjs(data.endDate)),\n\t{\n\t\tmessage: 'Start date cannot be after end date',\n\t\tpath: ['startDate'],\n\t}\n);\n\nexport const GraphInputSchema = BaseDateInputSchema.extend({\n\tgraphType: ZodValidation.enumType(GraphType, 'Type').optional(),\n\titemType: ZodValidation.enumType(ItemType, 'Item Type').optional(),\n}).refine(data => !dayjs(data.startDate).isAfter(dayjs(data.endDate)), {\n\tmessage: 'Start date cannot be after end date',\n\tpath: ['startDate'],\n});\n\nexport const CouponMetricsOutputSchema = z.object({\n\tactiveCoupons: ZodValidation.number('Active coupons').default(0),\n\ttotalCreated: ZodValidation.number('Total created coupons').default(0),\n\ttotalRedeemedCoupons: ZodValidation.number('Total redeemed coupons').default(0),\n\tredemptionRate: ZodValidation.number('Redemption rate').default(0),\n\ttotalCouponOrders: ZodValidation.number('Total coupon orders').default(0),\n\ttotalRevenue: ZodValidation.number('Total revenue from coupons').default(0),\n\ttotalProfit: ZodValidation.number('Total profit from coupons').default(0),\n});\n\nexport const CouponMetricsByTypeSchema = z.object({\n\tcouponType: ZodValidation.enumType(CouponType, 'Coupon Type'),\n\tcouponTypeTitle: ZodValidation.string('Coupon Type Title'),\n\ttotalCouponOrders: ZodValidation.number('Total coupon orders').default(0),\n\ttotalRevenue: ZodValidation.number('Total revenue from coupons').default(0),\n\taverageOrderValue: ZodValidation.number('Average order value for coupons of this type').default(0),\n\tusage: ZodValidation.number('Usage').default(0),\n\tongoing: ZodValidation.number('Ongoing').default(0),\n\tamountSpent: ZodValidation.number('Amount spent on coupons of this type').default(0),\n\tredemptionRate: ZodValidation.number('Redemption rate for this coupon type').default(0),\n});\n\nexport const ReferralGraphResponseSchema = createResponseSchema(\n\tz.array(\n\t\tz.object({\n\t\t\tdate: z.string(),\n\t\t\ttotalReferrals: z.number(),\n\t\t\ttotalConversions: z.number(),\n\t\t})\n\t)\n);\nexport const ReferFriendTotalProfitGraphResponseSchema = createResponseSchema(\n\tz.array(\n\t\tz.object({\n\t\t\tdate: z.string(),\n\t\t\ttotalProfit: z.number(),\n\t\t})\n\t)\n);\n\nexport const GraphSchema = z.object({\n\tcategories: ZodValidation.array(ZodValidation.string('Category labels')),\n\tseries: ZodValidation.array(\n\t\tz.object({\n\t\t\tname: ZodValidation.string('Name of the series'),\n\t\t\tdata: ZodValidation.array(ZodValidation.number('Series data')),\n\t\t})\n\t),\n});\n\nexport const TotalProfitGraphSchema = GraphSchema.extend({\n\ttotalProfit: ZodValidation.number('Total profit').default(0),\n});\n\nexport const CouponListRequestSchema = z.object({\n\tpage: ZodValidation.number('Page', { isInt: true, isPositive: true, min: 1 }),\n\tsize: ZodValidation.number('Page', { isInt: true, isPositive: true, min: 1, max: 100 }),\n\tcouponTypes: ZodValidation.array(ZodValidation.enumType(CouponType, 'Coupon type'), 'Coupon types'),\n\tfromDate: ZodValidation.date('From date'),\n\ttoDate: ZodValidation.date('To date'),\n\tstatus: ZodValidation.enumType(Status, 'Status').optional(),\n\tsearchKey: ZodValidation.string('Search key').optional(),\n\tpopulate: ZodValidation.array(\n\t\tz.object({\n\t\t\tpath: ZodValidation.string(),\n\t\t\tselect: z\n\t\t\t\t.union([ZodValidation.string(), z.record(z.string(), z.union([z.literal(0), z.literal(1)]))])\n\t\t\t\t.optional(),\n\t\t}),\n\t\t'Populate'\n\t).optional(),\n});\n\nexport const CouponUsersRequestSchema = z.object({\n\tstartDate: z.date().optional(),\n\tendDate: z.date().optional(),\n\tcouponId: z.string(),\n\tpage: z.number().int().positive().default(1),\n\tsize: z.number().int().positive().default(10),\n\tsearch: z.string().trim().optional(),\n\tzone: z.string().optional(),\n\tsort: z.record(z.union([z.literal(1), z.literal(-1)])).optional(),\n});\n\nexport const singleCouponOrdersRequestSchema = z.object({\n\tcouponId: z.string(),\n\tuserId: z.string().optional(),\n\tpage: z.number().int().positive().default(1),\n\tsize: z.number().int().positive().default(10),\n\tstartDate: z.string().optional(),\n\tendDate: z.string().optional(),\n\tsearch: z.string().trim().optional(),\n\tzone: z.string().optional(),\n\tsort: z.record(z.union([z.literal(1), z.literal(-1)])).optional(),\n});\n\nexport const referFriendCouponOrdersRequestSchema = z.object({\n\tuserId: z.string().optional(),\n\tpage: z.number().int().positive().default(1),\n\tsize: z.number().int().positive().default(10),\n\tstatus: z.nativeEnum(Status).optional().default(Status.ACTIVE),\n\tstartDate: z.string().optional(),\n\tendDate: z.string().optional(),\n\tsearch: z.string().trim().optional(),\n\tzone: z.string().optional(),\n\tsort: z.record(z.union([z.literal(1), z.literal(-1)])).optional(),\n});\nexport const referFriendCouponOrdersResponseSchema = createResponseSchema(\n\tz.object({\n\t\tsenderGets: z.string(),\n\t\treceiverGets: z.string(),\n\t\tstatus: z.nativeEnum(Status),\n\t\treferralDate: z.date(),\n\t\tsender: z.object({\n\t\t\t_id: z.string(),\n\t\t\tname: z.string().optional(),\n\t\t\tphoto: z.string().nullable().optional(),\n\t\t}),\n\t\treceiver: z.object({\n\t\t\t_id: z.string(),\n\t\t\tname: z.string().optional(),\n\t\t\tphoto: z.string().nullable().optional(),\n\t\t}),\n\t})\n);\nexport const DateInputRequestSchema = z.object({\n\tstartDate: z.string().optional(),\n\tendDate: z.string().optional(),\n});\nexport const ReferFriendMetricsResponseSchema = createResponseSchema(\n\tz.object({\n\t\ttotalReferralsSent: z.number(),\n\t\ttotalReferralsConverted: z.number(),\n\t\ttotalProfitFromReferrals: z.number(),\n\t\tconversionRate: z.number(),\n\t\tcustomerReferralRate: z.number(),\n\t})\n);\n\nexport const CouponUserItemSchema = z.object({\n\tid: z.string(),\n\tname: z.string(),\n\tavatar: z.string().nullable().optional(),\n\tzone: z.string().nullable(),\n\tzoneId: z.string().nullable(),\n\temail: z.string().nullable(),\n\tmobile: z.string().nullable(),\n\torders: z.number(),\n\tcreationDate: z.coerce.date(),\n\tstatus: z.nativeEnum(Status),\n});\n\nexport const CouponSingleUserOrderItemSchema = z.object({\n\torder: z.object({\n\t\t_id: z.string(),\n\t\torderId: z.string().optional(),\n\t\torderAmount: z.number().optional(),\n\t}),\n\tuser: z.object({\n\t\t_id: z.string(),\n\t\tname: z.string().optional(),\n\t\tphoto: z.string().nullable().optional(),\n\t}),\n\tshop: z.object({\n\t\t_id: z.string(),\n\t\tname: z.string().optional(),\n\t\tlogo: z.string().nullable().optional(),\n\t}),\n\tzone: z.string().nullable().optional(),\n\tcreationDate: z.coerce.date().optional(),\n});\n\nexport const CouponMetricsResponseSchema = createResponseSchema(CouponMetricsOutputSchema);\nexport const CouponMetricsByTypeResponseSchema = createResponseSchema(CouponMetricsByTypeSchema.array());\nexport const GraphResponseSchema = createResponseSchema(GraphSchema);\nexport const TotalProfitGraphResponseSchema = createResponseSchema(TotalProfitGraphSchema);\n\n/**\n * Export DTO types\n */\nexport type CreateCouponDTO = DTO<typeof CouponValidationSchema>;\nexport type CouponDTO = DTO<typeof CouponSchema>;\nexport type UpdateCouponDTO = DTO<typeof UpdateCouponSchema>;\nexport type GetUserCouponDTO = DTO<typeof GetUserCouponSchema>;\nexport type ValidateCouponDTO = DTO<typeof ValidateCouponSchema>;\nexport type CouponValidationOutputDTO = DTO<typeof CouponValidationOutputSchema>;\nexport type GetUserCouponsResponseDTO = DTO<typeof GetUserCouponsResponseSchema>;\nexport type UpdateCouponStatusDTO = DTO<typeof UpdateCouponStatusSchema>;\nexport type CheckExistingNewUserCouponOutputDTO = DTO<typeof CheckExistingNewUserCouponOutputSchema>;\nexport type DeviceIdDTO = DTO<typeof DeviceIdSchema>;\nexport type IsNewUserGiftBoxShownDTO = DTO<typeof IsNewUserGiftBoxShownSchema>;\nexport type DateInputDTO = DTO<typeof DateInputSchema>;\nexport type GraphInputDTO = DTO<typeof GraphInputSchema>;\nexport type CouponMetricsOutputDTO = DTO<typeof CouponMetricsOutputSchema>;\nexport type CouponMetricsByTypeDTO = DTO<typeof CouponMetricsByTypeSchema>;\nexport type GraphDTO = DTO<typeof GraphSchema>;\nexport type TotalProfitGraphDTO = DTO<typeof TotalProfitGraphSchema>;\nexport type CouponListRequestDTO = DTO<typeof CouponListRequestSchema>;\nexport type CouponUsersRequestDTO = DTO<typeof CouponUsersRequestSchema>;\nexport type ReferralGraphResponseDTO = DTO<typeof ReferralGraphResponseSchema>;\nexport type SingleCouponOrdersRequestDTO = DTO<typeof singleCouponOrdersRequestSchema>;\nexport type ReferFriendCouponOrdersRequestDTO = DTO<typeof referFriendCouponOrdersRequestSchema>;\nexport type ReferFriendCouponOrdersResponseDTO = DTO<typeof referFriendCouponOrdersResponseSchema>;\nexport type DateInputRequestSchemaDTO = DTO<typeof DateInputRequestSchema>;\nexport type ReferFriendMetricsResponseDTO = DTO<typeof ReferFriendMetricsResponseSchema>;\nexport type ReferFriendTotalProfitGraphResponseDTO = DTO<typeof ReferFriendTotalProfitGraphResponseSchema>;\n\nexport type CouponUserItemDTO = DTO<typeof CouponUserItemSchema>;\n"]}
@@ -89,16 +89,16 @@ export declare const dealSettingRouter: import("@trpc/server").TRPCBuiltRouter<{
89
89
  }>;
90
90
  get: import("@trpc/server").TRPCQueryProcedure<{
91
91
  input: {
92
- sort?: Record<string, 1 | -1> | undefined;
92
+ query?: Record<string, any> | undefined;
93
93
  search?: {
94
94
  searchKey: string;
95
95
  searchFields?: string[] | undefined;
96
96
  } | undefined;
97
- select?: Record<string, 0 | 1> | undefined;
98
- populate?: any;
97
+ sort?: Record<string, 1 | -1> | undefined;
99
98
  size?: number | undefined;
100
99
  page?: number | undefined;
101
- query?: Record<string, any> | undefined;
100
+ select?: Record<string, 0 | 1> | undefined;
101
+ populate?: any;
102
102
  } | undefined;
103
103
  output: {
104
104
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"deal-setting.router.d.ts","sourceRoot":"/","sources":["modules/deal-setting/routers/deal-setting.router.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAsBtB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCP,CAAC"}
1
+ {"version":3,"file":"deal-setting.router.d.ts","sourceRoot":"/","sources":["modules/deal-setting/routers/deal-setting.router.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAsBxB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCL,CAAC"}
@@ -121,16 +121,16 @@ export declare const featuredSettingRouter: import("@trpc/server").TRPCBuiltRout
121
121
  }>;
122
122
  get: import("@trpc/server").TRPCQueryProcedure<{
123
123
  input: {
124
- sort?: Record<string, 1 | -1> | undefined;
124
+ query?: Record<string, any> | undefined;
125
125
  search?: {
126
126
  searchKey: string;
127
127
  searchFields?: string[] | undefined;
128
128
  } | undefined;
129
- select?: Record<string, 0 | 1> | undefined;
130
- populate?: any;
129
+ sort?: Record<string, 1 | -1> | undefined;
131
130
  size?: number | undefined;
132
131
  page?: number | undefined;
133
- query?: Record<string, any> | undefined;
132
+ select?: Record<string, 0 | 1> | undefined;
133
+ populate?: any;
134
134
  } | undefined;
135
135
  output: {
136
136
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"featured-setting.router.d.ts","sourceRoot":"/","sources":["modules/featured-setting/routers/featured-setting.router.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAmB/B,CAAD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCA,CAAC"}
1
+ {"version":3,"file":"featured-setting.router.d.ts","sourceRoot":"/","sources":["modules/featured-setting/routers/featured-setting.router.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAmB/B,CAAH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarketingMetricsRepository.d.ts","sourceRoot":"/","sources":["modules/marketing/patterns/repository/MarketingMetricsRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAEN,QAAQ,EACR,SAAS,EAGT,YAAY,EAGZ,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEN,sBAAsB,EACtB,mBAAmB,EACnB,6BAA6B,EAC7B,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAI3F,qBACa,0BAA0B;IACtC,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,UAAU,CAA2D;;IAOtE,+BAA+B,CACrC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG;QACnC,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,UAAU,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;KACtC,GACC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IAwF1B,uBAAuB,CACnC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EACpC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,aAAa,CAAA;KAAE,CAAC;YA+B9C,uBAAuB;YA2CvB,0BAA0B;YAyB1B,wBAAwB;YAyBxB,4BAA4B;IAsB1C,OAAO,CAAC,cAAc;YAkBR,uBAAuB;IAKxB,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgD3F,OAAO,CAAC,0BAA0B;YAYpB,qBAAqB;YAKrB,kCAAkC;YA2BlC,qCAAqC;IAcnD,OAAO,CAAC,iBAAiB;YAWX,sBAAsB;IA8BvB,cAAc,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAwDpF,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAsF3F,mBAAmB,CAC/B,IAAI,EAAE,sBAAsB,GAC1B,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAoL9C;AAED,eAAO,MAAM,0BAA0B,4BAA4C,CAAC"}
1
+ {"version":3,"file":"MarketingMetricsRepository.d.ts","sourceRoot":"/","sources":["modules/marketing/patterns/repository/MarketingMetricsRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAEN,QAAQ,EACR,SAAS,EAGT,YAAY,EAGZ,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEN,sBAAsB,EACtB,mBAAmB,EACnB,6BAA6B,EAC7B,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAI3F,qBACa,0BAA0B;IACtC,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,UAAU,CAA2D;;IAOtE,+BAA+B,CACrC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG;QACnC,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,UAAU,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;KACtC,GACC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IAwF1B,uBAAuB,CACnC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EACpC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,aAAa,CAAA;KAAE,CAAC;YAmC9C,uBAAuB;YA2CvB,0BAA0B;YAyB1B,wBAAwB;YAyBxB,4BAA4B;IAsB1C,OAAO,CAAC,cAAc;YAkBR,uBAAuB;IAKxB,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgD3F,OAAO,CAAC,0BAA0B;YAYpB,qBAAqB;YAKrB,kCAAkC;YA2BlC,qCAAqC;IAcnD,OAAO,CAAC,iBAAiB;YAWX,sBAAsB;IA8BvB,cAAc,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAwDpF,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAsF3F,mBAAmB,CAC/B,IAAI,EAAE,sBAAsB,GAC1B,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAoL9C;AAED,eAAO,MAAM,0BAA0B,4BAA4C,CAAC"}
@@ -109,6 +109,7 @@ let MarketingMetricsRepository = class MarketingMetricsRepository {
109
109
  [enum_2.MarketingType.FREE_DELIVERY]: () => this.calculateFreeDeliverySpent(marketingId, duration),
110
110
  [enum_2.MarketingType.DISCOUNT]: () => this.calculateItemBasedSpent(marketingId, marketing.isAppliedByCompany, duration),
111
111
  [enum_2.MarketingType.BUY1GET1]: () => this.calculateItemBasedSpent(marketingId, marketing.isAppliedByCompany, duration),
112
+ [enum_2.MarketingType.NEW_USER_DISCOUNT]: () => Promise.resolve(0),
112
113
  [enum_2.MarketingType.PUNCH_MARKETING]: () => this.calculatePunchMarketingSpent(marketingId, duration),
113
114
  [enum_2.MarketingType.SPEND_TO_GET]: () => this.calculateSpendToGetSpent(marketingId, duration),
114
115
  [enum_2.MarketingType.FEATURED]: function () {
@@ -1 +1 @@
1
- {"version":3,"file":"MarketingMetricsRepository.js","sourceRoot":"/","sources":["modules/marketing/patterns/repository/MarketingMetricsRepository.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { dayjs } from '@lyxa.ai/core/dist/utilities/dayjs';\nimport { DocumentType, mongoose, ReturnModelType } from '@typegoose/typegoose';\nimport {\n\tFeaturedMarketing,\n\tLineItem,\n\tMarketing,\n\tMarketingModel,\n\tMarketing as Model,\n\tRegularOrder,\n\tRegularOrderModel,\n\tSpendToGetMarketing,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {\n\tIncreaseDuringDiscountDTO,\n\tMarketingGraphInputDTO,\n\tMarketingMetricsDTO,\n\tMarketingOrdersGraphOutputDTO,\n} from '@modules/marketing/validations';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport { GraphType, OrderType, RegularOrderStatus, SpendToGetRewardType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { productMarketingService } from '@modules/marketing/services/product-marketing.service';\nimport { MarketingType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { notFoundError } from '@lyxa.ai/core/dist/utilities/error-common';\nimport { Duration } from '@lyxa.ai/core/dist/libraries/mongo/models/shared/duration.model';\nimport { LyxaTimezone } from '@lyxa.ai/core/dist/utilities/time';\nimport { fillMissingPeriods } from '@utility/utils';\n\n@Service()\nexport class MarketingMetricsRepository {\n\tprivate model: typeof MarketingModel & SoftDeleteModel<Model>;\n\tprivate orderModel: typeof RegularOrderModel & SoftDeleteModel<RegularOrder>;\n\n\tconstructor() {\n\t\tthis.model = MarketingModel as typeof MarketingModel & SoftDeleteModel<Model>;\n\t\tthis.orderModel = RegularOrderModel as typeof RegularOrderModel & SoftDeleteModel<RegularOrder>;\n\t}\n\n\tpublic calculateMarketingSpendPerOrder(\n\t\torder: DocumentType<RegularOrder> & {\n\t\t\tlineItems: DocumentType<LineItem>[];\n\t\t\tmarketings: DocumentType<Marketing>[];\n\t\t}\n\t): Map<mongoose.Types.ObjectId, number> {\n\t\tconst spendMap = new Map<mongoose.Types.ObjectId, number>();\n\n\t\tconst marketingOwnerMap = new Map<string, 'COMPANY' | 'SHOP'>();\n\n\t\t// Build owner map\n\t\tfor (const marketing of order.marketings ?? []) {\n\t\t\tmarketingOwnerMap.set(marketing._id.toString(), marketing.isAppliedByCompany ? 'COMPANY' : 'SHOP');\n\t\t}\n\n\t\tconst addSpend = (marketingId: mongoose.Types.ObjectId, amount: number) => {\n\t\t\tif (!amount || amount <= 0) return;\n\t\t\tspendMap.set(marketingId, (spendMap.get(marketingId) ?? 0) + amount);\n\t\t};\n\n\t\tconst getRelevantAmount = (\n\t\t\tmarketingId: mongoose.Types.ObjectId,\n\t\t\tcompanyAmount: number,\n\t\t\tshopAmount: number\n\t\t) => {\n\t\t\tconst owner = marketingOwnerMap.get(marketingId.toString());\n\t\t\treturn owner === 'COMPANY' ? companyAmount : shopAmount;\n\t\t};\n\n\t\t/**\n\t\t * ITEM-BASED\n\t\t */\n\t\tfor (const lineItem of order.lineItems ?? []) {\n\t\t\tfor (const marketingId of lineItem.marketings ?? []) {\n\t\t\t\tconst snap = lineItem.calculationSnap ?? {};\n\n\t\t\t\taddSpend(\n\t\t\t\t\tmarketingId._id,\n\t\t\t\t\tgetRelevantAmount(\n\t\t\t\t\t\tmarketingId._id,\n\t\t\t\t\t\t(Number(snap.itemDiscountByCompany) || 0) + (Number(snap.b1g1DiscountByCompany) || 0),\n\t\t\t\t\t\t(Number(snap.itemDiscountByShop) || 0) + (Number(snap.b1g1DiscountByShop) || 0)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * FREE DELIVERY\n\t\t */\n\t\tif (order.adjustedFinance?.freeDelivery) {\n\t\t\tfor (const marketingId of order.marketings ?? []) {\n\t\t\t\taddSpend(\n\t\t\t\t\tmarketingId._id,\n\t\t\t\t\tgetRelevantAmount(\n\t\t\t\t\t\tmarketingId._id,\n\t\t\t\t\t\torder.adjustedFinance.freeDelivery.companyCut ?? 0,\n\t\t\t\t\t\torder.adjustedFinance.freeDelivery.shopCut ?? 0\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * PUNCH MARKETING\n\t\t */\n\t\tif (order.adjustedFinance?.pricing?.punchMarketingDiscount) {\n\t\t\tfor (const marketingId of order.marketings ?? []) {\n\t\t\t\taddSpend(marketingId._id, order.adjustedFinance.pricing.punchMarketingDiscount);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * SPEND TO GET (discount tiers)\n\t\t * A free-delivery tier mirrors its cut into adjustedFinance.freeDelivery and is counted by the\n\t\t * FREE DELIVERY block above, so it is skipped here to avoid double-debiting the budget. Discount\n\t\t * tiers are attributed to the single STG marketing that granted them — never spread across other\n\t\t * marketings on the order.\n\t\t */\n\t\tconst spendToGet = order.adjustedFinance?.spendToGet;\n\t\tif (spendToGet && spendToGet.rewardType !== SpendToGetRewardType.FREE_DELIVERY) {\n\t\t\tconst spendToGetMarketingId = (spendToGet.marketing as any)?._id ?? spendToGet.marketing;\n\t\t\tif (spendToGetMarketingId) {\n\t\t\t\taddSpend(\n\t\t\t\t\tspendToGetMarketingId,\n\t\t\t\t\tgetRelevantAmount(spendToGetMarketingId, spendToGet.companyCut ?? 0, spendToGet.shopCut ?? 0)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn spendMap;\n\t}\n\n\tpublic async calculateMarketingSpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): Promise<{ amount: number; marketingType: MarketingType }> {\n\t\tconst marketing = await this.model.findById(marketingId).lean();\n\n\t\tif (!marketing) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\n\t\tconst calculators: Record<MarketingType, () => Promise<number>> = {\n\t\t\t[MarketingType.FREE_DELIVERY]: () => this.calculateFreeDeliverySpent(marketingId, duration),\n\n\t\t\t[MarketingType.DISCOUNT]: () =>\n\t\t\t\tthis.calculateItemBasedSpent(marketingId, marketing.isAppliedByCompany, duration),\n\n\t\t\t[MarketingType.BUY1GET1]: () =>\n\t\t\t\tthis.calculateItemBasedSpent(marketingId, marketing.isAppliedByCompany, duration),\n\n\t\t\t[MarketingType.PUNCH_MARKETING]: () => this.calculatePunchMarketingSpent(marketingId, duration),\n\t\t\t[MarketingType.SPEND_TO_GET]: () => this.calculateSpendToGetSpent(marketingId, duration),\n\t\t\t[MarketingType.FEATURED]: function (): Promise<number> {\n\t\t\t\treturn Promise.resolve((marketing as DocumentType<FeaturedMarketing>).amount || 0);\n\t\t\t},\n\t\t};\n\n\t\tconst amount = calculators[marketing.marketingType] ? await calculators[marketing.marketingType]() : 0;\n\n\t\treturn {\n\t\t\tamount,\n\t\t\tmarketingType: marketing.marketingType,\n\t\t};\n\t}\n\n\tprivate async calculateItemBasedSpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tisAppliedByAdmin: boolean,\n\t\tduration?: Duration\n\t): Promise<number> {\n\t\tconst addBlock = isAppliedByAdmin\n\t\t\t? [\n\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.itemDiscountByCompany', 0] },\n\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.b1g1DiscountByCompany', 0] },\n\t\t\t\t]\n\t\t\t: [\n\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.itemDiscountByShop', 0] },\n\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.b1g1DiscountByShop', 0] },\n\t\t\t\t];\n\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\tthis.buildBaseMatch(marketingId, duration),\n\n\t\t\t{\n\t\t\t\t$lookup: {\n\t\t\t\t\tfrom: 'lineItems',\n\t\t\t\t\tlocalField: 'cart',\n\t\t\t\t\tforeignField: 'cart',\n\t\t\t\t\tas: 'lineItems',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{ $unwind: '$lineItems' },\n\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: null,\n\t\t\t\t\ttotalSpent: {\n\t\t\t\t\t\t$sum: {\n\t\t\t\t\t\t\t$add: addBlock,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\treturn this.runAggregateAndGetTotal(pipeline, 'totalSpent');\n\t}\n\n\tprivate async calculateFreeDeliverySpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): Promise<number> {\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\tthis.buildBaseMatch(marketingId, duration),\n\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: null,\n\t\t\t\t\ttotalSpent: {\n\t\t\t\t\t\t$sum: {\n\t\t\t\t\t\t\t$add: [\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.freeDelivery.companyCut', 0] },\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.freeDelivery.shopCut', 0] },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\treturn this.runAggregateAndGetTotal(pipeline, 'totalSpent');\n\t}\n\n\tprivate async calculateSpendToGetSpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): Promise<number> {\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\tthis.buildBaseMatch(marketingId, duration),\n\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: null,\n\t\t\t\t\ttotalSpent: {\n\t\t\t\t\t\t$sum: {\n\t\t\t\t\t\t\t$add: [\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.spendToGet.companyCut', 0] },\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.spendToGet.shopCut', 0] },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\treturn this.runAggregateAndGetTotal(pipeline, 'totalSpent');\n\t}\n\n\tprivate async calculatePunchMarketingSpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): Promise<number> {\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\tthis.buildBaseMatch(marketingId, duration),\n\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: null,\n\t\t\t\t\ttotalSpent: {\n\t\t\t\t\t\t$sum: {\n\t\t\t\t\t\t\t$ifNull: ['$adjustedFinance.pricing.punchMarketingDiscount', 0],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\treturn this.runAggregateAndGetTotal(pipeline, 'totalSpent');\n\t}\n\n\tprivate buildBaseMatch(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): mongoose.PipelineStage.Match {\n\t\treturn {\n\t\t\t$match: {\n\t\t\t\tmarketings: marketingId,\n\t\t\t\tstatus: { $ne: RegularOrderStatus.CANCELLED },\n\t\t\t\t...(duration && {\n\t\t\t\t\tprocessedAt: {\n\t\t\t\t\t\t$gte: duration.start,\n\t\t\t\t\t\t$lte: duration.end,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async runAggregateAndGetTotal(pipeline: mongoose.PipelineStage[], field: string): Promise<number> {\n\t\tconst [result] = await this.orderModel.aggregate(pipeline);\n\t\treturn result?.[field] ?? 0;\n\t}\n\n\tpublic async getMetrics(marketingId: mongoose.Types.ObjectId): Promise<MarketingMetricsDTO> {\n\t\tconst marketing = await this.model.findById(marketingId).lean();\n\n\t\tif (!marketing) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\n\t\t//TODO: fix current end and previous start\n\n\t\tconst currentDuration = { start: marketing.duration.start, end: dayjs().toDate() };\n\t\tconst previousDuration = {\n\t\t\tstart: dayjs(marketing.duration.start).subtract(dayjs().diff(marketing.duration.start)).toDate(),\n\t\t\tend: marketing.duration.start,\n\t\t};\n\n\t\tlet metrics: MarketingMetricsDTO = {};\n\n\t\tif ([MarketingType.DISCOUNT, MarketingType.BUY1GET1].includes(marketing.marketingType)) {\n\t\t\tmetrics.numberOfItems = await this.getMarketingItemCount(marketingId);\n\t\t}\n\n\t\tmetrics.orderIncreaseWithDiscount = await this.calculateOrderIncreaseWithDiscount(\n\t\t\tmarketingId,\n\t\t\tmarketing.shop._id,\n\t\t\tcurrentDuration,\n\t\t\tpreviousDuration\n\t\t);\n\t\tmetrics.customerIncreaseWithDiscount = await this.calculateCustomerIncreaseWithDiscount(\n\t\t\tmarketingId,\n\t\t\tmarketing.shop._id,\n\t\t\tcurrentDuration,\n\t\t\tpreviousDuration\n\t\t);\n\t\tmetrics.totalRedemptions = await this.orderModel.countDocuments({\n\t\t\tmarketings: marketingId,\n\t\t\tstatus: { $ne: RegularOrderStatus.CANCELLED },\n\t\t});\n\n\t\tif (marketing.marketingType === MarketingType.SPEND_TO_GET) {\n\t\t\tObject.assign(metrics, this.getSpendToGetBudgetMetrics(marketing));\n\t\t}\n\n\t\treturn metrics;\n\t}\n\n\t// amountSpent is the running total of value given (discount + free-delivery cut), maintained on\n\t// order placement and restored on cancel — reuse it so totalValueGiven and remainingBudget stay\n\t// internally consistent (remainingBudget = spendLimit - totalValueGiven).\n\tprivate getSpendToGetBudgetMetrics(\n\t\tmarketing: Pick<SpendToGetMarketing, 'amountSpent' | 'isSpendLimitEnabled' | 'spendLimit'>\n\t): Pick<MarketingMetricsDTO, 'totalValueGiven' | 'remainingBudget'> {\n\t\tconst totalValueGiven = marketing.amountSpent ?? 0;\n\t\tconst remainingBudget =\n\t\t\tmarketing.isSpendLimitEnabled && marketing.spendLimit\n\t\t\t\t? Math.max(marketing.spendLimit - totalValueGiven, 0)\n\t\t\t\t: undefined;\n\n\t\treturn { totalValueGiven, remainingBudget };\n\t}\n\n\tprivate async getMarketingItemCount(marketingId: mongoose.Types.ObjectId): Promise<number> {\n\t\tconst result = await productMarketingService.countDocuments({ marketing: marketingId });\n\t\treturn result ?? 0;\n\t}\n\n\tprivate async calculateOrderIncreaseWithDiscount(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tshopId: mongoose.Types.ObjectId,\n\t\tcurrentDuration: Duration,\n\t\tpreviousDuration: Duration\n\t): Promise<IncreaseDuringDiscountDTO> {\n\t\tconst [currentOrders, previousOrders] = await Promise.all([\n\t\t\tthis.orderModel.countDocuments({\n\t\t\t\tcreatedAt: {\n\t\t\t\t\t$gte: currentDuration.start,\n\t\t\t\t\t$lte: currentDuration.end,\n\t\t\t\t},\n\t\t\t\tmarketings: marketingId, // marketing must be applied\n\t\t\t\tshop: shopId,\n\t\t\t}),\n\t\t\tthis.orderModel.countDocuments({\n\t\t\t\tcreatedAt: {\n\t\t\t\t\t$gte: previousDuration.start,\n\t\t\t\t\t$lte: previousDuration.end,\n\t\t\t\t},\n\t\t\t\tshop: shopId,\n\t\t\t}),\n\t\t]);\n\n\t\treturn this.calculateIncrease(currentOrders, previousOrders);\n\t}\n\n\tprivate async calculateCustomerIncreaseWithDiscount(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tshopId: mongoose.Types.ObjectId,\n\t\tcurrentDuration: Duration,\n\t\tpreviousDuration: Duration\n\t): Promise<IncreaseDuringDiscountDTO> {\n\t\tconst [currentNewCustomers, previousNewCustomers] = await Promise.all([\n\t\t\tthis.getNewCustomersForShop(shopId, currentDuration, { marketings: marketingId }),\n\t\t\tthis.getNewCustomersForShop(shopId, previousDuration),\n\t\t]);\n\n\t\treturn this.calculateIncrease(currentNewCustomers, previousNewCustomers);\n\t}\n\n\tprivate calculateIncrease(current: number, previous: number): IncreaseDuringDiscountDTO {\n\t\tconst count = current - previous;\n\n\t\tconst percentageIncrease = previous === 0 ? (current > 0 ? 100 : 0) : (count / previous) * 100;\n\n\t\treturn {\n\t\t\tcount,\n\t\t\tpercentageIncrease,\n\t\t};\n\t}\n\n\tprivate async getNewCustomersForShop(\n\t\tshopId: mongoose.Types.ObjectId,\n\t\tduration: Duration,\n\t\textraMatch: Record<string, any> = {}\n\t): Promise<number> {\n\t\t// Customers who ordered during the period\n\t\tconst customersInPeriod = await this.orderModel.distinct('user', {\n\t\t\tcreatedAt: {\n\t\t\t\t$gte: duration.start,\n\t\t\t\t$lte: duration.end,\n\t\t\t},\n\t\t\tshop: shopId,\n\t\t\t...extraMatch,\n\t\t});\n\n\t\tif (customersInPeriod.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Customers who had ordered from this shop BEFORE the period\n\t\tconst existingCustomers = await this.orderModel.distinct('user', {\n\t\t\tshop: shopId,\n\t\t\tcreatedAt: { $lt: duration.start },\n\t\t\tuser: { $in: customersInPeriod },\n\t\t});\n\n\t\t// New customers = in period − existing\n\t\treturn customersInPeriod.length - existingCustomers.length;\n\t}\n\n\tpublic async getOrdersGraph(data: MarketingGraphInputDTO): Promise<MarketingOrdersGraphOutputDTO> {\n\t\tconst dateFormat = data.type === GraphType.MONTHLY ? '%Y-%m' : '%Y-%m-%d';\n\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\t// Filter only delivered orders within the given date range\n\t\t\tthis.buildBaseMatch(new mongoose.Types.ObjectId(data.marketingId), {\n\t\t\t\tstart: data.startDate,\n\t\t\t\tend: data.endDate,\n\t\t\t}),\n\n\t\t\t// Extract formatted date from 'processedAt' for grouping\n\t\t\t{\n\t\t\t\t$project: {\n\t\t\t\t\tdate: {\n\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\tdate: '$processedAt',\n\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Group by formatted date and count orders\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$date',\n\t\t\t\t\torders: { $sum: 1 },\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Sort results chronologically\n\t\t\t{\n\t\t\t\t$sort: { _id: 1 },\n\t\t\t},\n\n\t\t\t// Format the response to match output DTO structure\n\t\t\t{\n\t\t\t\t$project: {\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tdate: '$_id',\n\t\t\t\t\torders: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\t// Execute aggregation pipeline\n\t\tconst results = await this.orderModel.aggregate(pipeline).allowDiskUse(true).exec();\n\n\t\tconst graphData = fillMissingPeriods(results, data.startDate, data.endDate, data.type, {\n\t\t\torders: 0,\n\t\t});\n\n\t\treturn graphData;\n\t}\n\n\tpublic async getCustomersGraph(data: MarketingGraphInputDTO): Promise<{ date: string; users: number }[]> {\n\t\t// 1️⃣ Get shopId from marketing\n\t\tconst marketing = await this.model.findById(data.marketingId).select('shop').lean();\n\n\t\tif (!marketing) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\n\t\tconst shopId = marketing.shop._id;\n\n\t\t// 2️⃣ Fetch users who ordered from this shop BEFORE the start date\n\t\tconst oldUsers = await this.orderModel.distinct('user', {\n\t\t\tshop: shopId,\n\t\t\tstatus: RegularOrderStatus.DELIVERED,\n\t\t\tprocessedAt: { $lt: data.startDate },\n\t\t});\n\n\t\tconst dateFormat = data.type === GraphType.MONTHLY ? '%Y-%m' : '%Y-%m-%d';\n\n\t\t// 3️⃣ Aggregation pipeline\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\t// Orders during the period with this marketing\n\t\t\t{\n\t\t\t\t$match: {\n\t\t\t\t\torderType: OrderType.REGULAR,\n\t\t\t\t\tstatus: RegularOrderStatus.DELIVERED,\n\t\t\t\t\tshop: shopId,\n\t\t\t\t\tmarketings: new mongoose.Types.ObjectId(data.marketingId),\n\t\t\t\t\tprocessedAt: { $gte: data.startDate, $lte: data.endDate },\n\t\t\t\t\tuser: { $nin: oldUsers }, // 🚫 exclude old users\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Sort so earliest order per user comes first\n\t\t\t{ $sort: { processedAt: 1 } },\n\n\t\t\t// First order per user (new users only)\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$user',\n\t\t\t\t\tfirstOrderDate: { $first: '$processedAt' },\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Format date\n\t\t\t{\n\t\t\t\t$project: {\n\t\t\t\t\tdate: {\n\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\tdate: '$firstOrderDate',\n\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Group by date\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$date',\n\t\t\t\t\tusers: { $sum: 1 },\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Sort chronologically\n\t\t\t{ $sort: { _id: 1 } },\n\n\t\t\t// Shape response\n\t\t\t{\n\t\t\t\t$project: {\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tdate: '$_id',\n\t\t\t\t\tusers: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\tconst results = await this.orderModel.aggregate(pipeline).allowDiskUse(true).exec();\n\n\t\t// 4️⃣ Fill missing periods\n\t\treturn fillMissingPeriods(results, data.startDate, data.endDate, data.type, {\n\t\t\tusers: 0,\n\t\t});\n\t}\n\n\tpublic async getAmountSpentGraph(\n\t\tdata: MarketingGraphInputDTO\n\t): Promise<{ date: string; amount: number }[]> {\n\t\tconst marketing = await this.model.findById(data.marketingId).lean();\n\n\t\tif (!marketing) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\n\t\tconst marketingId = new mongoose.Types.ObjectId(data.marketingId);\n\t\tconst dateFormat = data.type === GraphType.MONTHLY ? '%Y-%m' : '%Y-%m-%d';\n\n\t\tlet pipeline: mongoose.PipelineStage[] | null = null;\n\n\t\t/**\n\t\t * ITEM-BASED (DISCOUNT / BUY1GET1)\n\t\t */\n\t\tif ([MarketingType.DISCOUNT, MarketingType.BUY1GET1].includes(marketing.marketingType)) {\n\t\t\tpipeline = [\n\t\t\t\tthis.buildBaseMatch(marketingId, {\n\t\t\t\t\tstart: data.startDate,\n\t\t\t\t\tend: data.endDate,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\t$lookup: {\n\t\t\t\t\t\tfrom: 'lineItems',\n\t\t\t\t\t\tlocalField: 'cart',\n\t\t\t\t\t\tforeignField: 'cart',\n\t\t\t\t\t\tas: 'lineItems',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $unwind: '$lineItems' },\n\t\t\t\t{\n\t\t\t\t\t$match: {\n\t\t\t\t\t\t'lineItems.marketings': marketingId,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\t\tdate: '$processedAt',\n\t\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tamount: {\n\t\t\t\t\t\t\t$add: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\tmarketing.isAppliedByCompany,\n\t\t\t\t\t\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.itemDiscountByCompany', 0] },\n\t\t\t\t\t\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.itemDiscountByShop', 0] },\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\tmarketing.isAppliedByCompany,\n\t\t\t\t\t\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.b1g1DiscountByCompany', 0] },\n\t\t\t\t\t\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.b1g1DiscountByShop', 0] },\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: '$date',\n\t\t\t\t\t\tamount: { $sum: '$amount' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $sort: { _id: 1 } },\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\tdate: '$_id',\n\t\t\t\t\t\tamount: 1,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t} else if (marketing.marketingType === MarketingType.FREE_DELIVERY) {\n\t\t\t/**\n\t\t\t * FREE DELIVERY\n\t\t\t */\n\t\t\tpipeline = [\n\t\t\t\tthis.buildBaseMatch(marketingId, {\n\t\t\t\t\tstart: data.startDate,\n\t\t\t\t\tend: data.endDate,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\t\tdate: '$processedAt',\n\t\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tamount: {\n\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\tmarketing.isAppliedByCompany,\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.freeDelivery.companyCut', 0] },\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.freeDelivery.shopCut', 0] },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: '$date',\n\t\t\t\t\t\tamount: { $sum: '$amount' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $sort: { _id: 1 } },\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\tdate: '$_id',\n\t\t\t\t\t\tamount: 1,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t} else if (marketing.marketingType === MarketingType.PUNCH_MARKETING) {\n\t\t\t/**\n\t\t\t * PUNCH MARKETING\n\t\t\t */\n\t\t\tpipeline = [\n\t\t\t\tthis.buildBaseMatch(marketingId, {\n\t\t\t\t\tstart: data.startDate,\n\t\t\t\t\tend: data.endDate,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\t\tdate: '$processedAt',\n\t\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tamount: {\n\t\t\t\t\t\t\t$ifNull: ['$adjustedFinance.pricing.punchMarketingDiscount', 0],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: '$date',\n\t\t\t\t\t\tamount: { $sum: '$amount' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $sort: { _id: 1 } },\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\tdate: '$_id',\n\t\t\t\t\t\tamount: 1,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\t// If marketing type doesn't produce spend graph → return empty graph\n\t\tif (!pipeline) {\n\t\t\treturn fillMissingPeriods(\n\t\t\t\t[] as { date: string; amount: number }[],\n\t\t\t\tdata.startDate,\n\t\t\t\tdata.endDate,\n\t\t\t\tdata.type,\n\t\t\t\t{\n\t\t\t\t\tamount: 0,\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst results = await this.orderModel.aggregate(pipeline).allowDiskUse(true).exec();\n\n\t\treturn fillMissingPeriods(results, data.startDate, data.endDate, data.type, {\n\t\t\tamount: 0,\n\t\t});\n\t}\n}\n\nexport const marketingMetricsRepository = Container.get(MarketingMetricsRepository);\n"]}
1
+ {"version":3,"file":"MarketingMetricsRepository.js","sourceRoot":"/","sources":["modules/marketing/patterns/repository/MarketingMetricsRepository.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { dayjs } from '@lyxa.ai/core/dist/utilities/dayjs';\nimport { DocumentType, mongoose, ReturnModelType } from '@typegoose/typegoose';\nimport {\n\tFeaturedMarketing,\n\tLineItem,\n\tMarketing,\n\tMarketingModel,\n\tMarketing as Model,\n\tRegularOrder,\n\tRegularOrderModel,\n\tSpendToGetMarketing,\n} from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport {\n\tIncreaseDuringDiscountDTO,\n\tMarketingGraphInputDTO,\n\tMarketingMetricsDTO,\n\tMarketingOrdersGraphOutputDTO,\n} from '@modules/marketing/validations';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\nimport { GraphType, OrderType, RegularOrderStatus, SpendToGetRewardType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { productMarketingService } from '@modules/marketing/services/product-marketing.service';\nimport { MarketingType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { notFoundError } from '@lyxa.ai/core/dist/utilities/error-common';\nimport { Duration } from '@lyxa.ai/core/dist/libraries/mongo/models/shared/duration.model';\nimport { LyxaTimezone } from '@lyxa.ai/core/dist/utilities/time';\nimport { fillMissingPeriods } from '@utility/utils';\n\n@Service()\nexport class MarketingMetricsRepository {\n\tprivate model: typeof MarketingModel & SoftDeleteModel<Model>;\n\tprivate orderModel: typeof RegularOrderModel & SoftDeleteModel<RegularOrder>;\n\n\tconstructor() {\n\t\tthis.model = MarketingModel as typeof MarketingModel & SoftDeleteModel<Model>;\n\t\tthis.orderModel = RegularOrderModel as typeof RegularOrderModel & SoftDeleteModel<RegularOrder>;\n\t}\n\n\tpublic calculateMarketingSpendPerOrder(\n\t\torder: DocumentType<RegularOrder> & {\n\t\t\tlineItems: DocumentType<LineItem>[];\n\t\t\tmarketings: DocumentType<Marketing>[];\n\t\t}\n\t): Map<mongoose.Types.ObjectId, number> {\n\t\tconst spendMap = new Map<mongoose.Types.ObjectId, number>();\n\n\t\tconst marketingOwnerMap = new Map<string, 'COMPANY' | 'SHOP'>();\n\n\t\t// Build owner map\n\t\tfor (const marketing of order.marketings ?? []) {\n\t\t\tmarketingOwnerMap.set(marketing._id.toString(), marketing.isAppliedByCompany ? 'COMPANY' : 'SHOP');\n\t\t}\n\n\t\tconst addSpend = (marketingId: mongoose.Types.ObjectId, amount: number) => {\n\t\t\tif (!amount || amount <= 0) return;\n\t\t\tspendMap.set(marketingId, (spendMap.get(marketingId) ?? 0) + amount);\n\t\t};\n\n\t\tconst getRelevantAmount = (\n\t\t\tmarketingId: mongoose.Types.ObjectId,\n\t\t\tcompanyAmount: number,\n\t\t\tshopAmount: number\n\t\t) => {\n\t\t\tconst owner = marketingOwnerMap.get(marketingId.toString());\n\t\t\treturn owner === 'COMPANY' ? companyAmount : shopAmount;\n\t\t};\n\n\t\t/**\n\t\t * ITEM-BASED\n\t\t */\n\t\tfor (const lineItem of order.lineItems ?? []) {\n\t\t\tfor (const marketingId of lineItem.marketings ?? []) {\n\t\t\t\tconst snap = lineItem.calculationSnap ?? {};\n\n\t\t\t\taddSpend(\n\t\t\t\t\tmarketingId._id,\n\t\t\t\t\tgetRelevantAmount(\n\t\t\t\t\t\tmarketingId._id,\n\t\t\t\t\t\t(Number(snap.itemDiscountByCompany) || 0) + (Number(snap.b1g1DiscountByCompany) || 0),\n\t\t\t\t\t\t(Number(snap.itemDiscountByShop) || 0) + (Number(snap.b1g1DiscountByShop) || 0)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * FREE DELIVERY\n\t\t */\n\t\tif (order.adjustedFinance?.freeDelivery) {\n\t\t\tfor (const marketingId of order.marketings ?? []) {\n\t\t\t\taddSpend(\n\t\t\t\t\tmarketingId._id,\n\t\t\t\t\tgetRelevantAmount(\n\t\t\t\t\t\tmarketingId._id,\n\t\t\t\t\t\torder.adjustedFinance.freeDelivery.companyCut ?? 0,\n\t\t\t\t\t\torder.adjustedFinance.freeDelivery.shopCut ?? 0\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * PUNCH MARKETING\n\t\t */\n\t\tif (order.adjustedFinance?.pricing?.punchMarketingDiscount) {\n\t\t\tfor (const marketingId of order.marketings ?? []) {\n\t\t\t\taddSpend(marketingId._id, order.adjustedFinance.pricing.punchMarketingDiscount);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * SPEND TO GET (discount tiers)\n\t\t * A free-delivery tier mirrors its cut into adjustedFinance.freeDelivery and is counted by the\n\t\t * FREE DELIVERY block above, so it is skipped here to avoid double-debiting the budget. Discount\n\t\t * tiers are attributed to the single STG marketing that granted them — never spread across other\n\t\t * marketings on the order.\n\t\t */\n\t\tconst spendToGet = order.adjustedFinance?.spendToGet;\n\t\tif (spendToGet && spendToGet.rewardType !== SpendToGetRewardType.FREE_DELIVERY) {\n\t\t\tconst spendToGetMarketingId = (spendToGet.marketing as any)?._id ?? spendToGet.marketing;\n\t\t\tif (spendToGetMarketingId) {\n\t\t\t\taddSpend(\n\t\t\t\t\tspendToGetMarketingId,\n\t\t\t\t\tgetRelevantAmount(spendToGetMarketingId, spendToGet.companyCut ?? 0, spendToGet.shopCut ?? 0)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn spendMap;\n\t}\n\n\tpublic async calculateMarketingSpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): Promise<{ amount: number; marketingType: MarketingType }> {\n\t\tconst marketing = await this.model.findById(marketingId).lean();\n\n\t\tif (!marketing) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\n\t\tconst calculators: Record<MarketingType, () => Promise<number>> = {\n\t\t\t[MarketingType.FREE_DELIVERY]: () => this.calculateFreeDeliverySpent(marketingId, duration),\n\n\t\t\t[MarketingType.DISCOUNT]: () =>\n\t\t\t\tthis.calculateItemBasedSpent(marketingId, marketing.isAppliedByCompany, duration),\n\n\t\t\t[MarketingType.BUY1GET1]: () =>\n\t\t\t\tthis.calculateItemBasedSpent(marketingId, marketing.isAppliedByCompany, duration),\n\n\t\t\t// New User Discount is inert until the checkout-integration phase wires its spend attribution;\n\t\t\t// it applies nothing at checkout yet, so it reports 0 spent until then.\n\t\t\t[MarketingType.NEW_USER_DISCOUNT]: () => Promise.resolve(0),\n\n\t\t\t[MarketingType.PUNCH_MARKETING]: () => this.calculatePunchMarketingSpent(marketingId, duration),\n\t\t\t[MarketingType.SPEND_TO_GET]: () => this.calculateSpendToGetSpent(marketingId, duration),\n\t\t\t[MarketingType.FEATURED]: function (): Promise<number> {\n\t\t\t\treturn Promise.resolve((marketing as DocumentType<FeaturedMarketing>).amount || 0);\n\t\t\t},\n\t\t};\n\n\t\tconst amount = calculators[marketing.marketingType] ? await calculators[marketing.marketingType]() : 0;\n\n\t\treturn {\n\t\t\tamount,\n\t\t\tmarketingType: marketing.marketingType,\n\t\t};\n\t}\n\n\tprivate async calculateItemBasedSpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tisAppliedByAdmin: boolean,\n\t\tduration?: Duration\n\t): Promise<number> {\n\t\tconst addBlock = isAppliedByAdmin\n\t\t\t? [\n\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.itemDiscountByCompany', 0] },\n\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.b1g1DiscountByCompany', 0] },\n\t\t\t\t]\n\t\t\t: [\n\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.itemDiscountByShop', 0] },\n\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.b1g1DiscountByShop', 0] },\n\t\t\t\t];\n\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\tthis.buildBaseMatch(marketingId, duration),\n\n\t\t\t{\n\t\t\t\t$lookup: {\n\t\t\t\t\tfrom: 'lineItems',\n\t\t\t\t\tlocalField: 'cart',\n\t\t\t\t\tforeignField: 'cart',\n\t\t\t\t\tas: 'lineItems',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{ $unwind: '$lineItems' },\n\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: null,\n\t\t\t\t\ttotalSpent: {\n\t\t\t\t\t\t$sum: {\n\t\t\t\t\t\t\t$add: addBlock,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\treturn this.runAggregateAndGetTotal(pipeline, 'totalSpent');\n\t}\n\n\tprivate async calculateFreeDeliverySpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): Promise<number> {\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\tthis.buildBaseMatch(marketingId, duration),\n\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: null,\n\t\t\t\t\ttotalSpent: {\n\t\t\t\t\t\t$sum: {\n\t\t\t\t\t\t\t$add: [\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.freeDelivery.companyCut', 0] },\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.freeDelivery.shopCut', 0] },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\treturn this.runAggregateAndGetTotal(pipeline, 'totalSpent');\n\t}\n\n\tprivate async calculateSpendToGetSpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): Promise<number> {\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\tthis.buildBaseMatch(marketingId, duration),\n\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: null,\n\t\t\t\t\ttotalSpent: {\n\t\t\t\t\t\t$sum: {\n\t\t\t\t\t\t\t$add: [\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.spendToGet.companyCut', 0] },\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.spendToGet.shopCut', 0] },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\treturn this.runAggregateAndGetTotal(pipeline, 'totalSpent');\n\t}\n\n\tprivate async calculatePunchMarketingSpent(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): Promise<number> {\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\tthis.buildBaseMatch(marketingId, duration),\n\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: null,\n\t\t\t\t\ttotalSpent: {\n\t\t\t\t\t\t$sum: {\n\t\t\t\t\t\t\t$ifNull: ['$adjustedFinance.pricing.punchMarketingDiscount', 0],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\treturn this.runAggregateAndGetTotal(pipeline, 'totalSpent');\n\t}\n\n\tprivate buildBaseMatch(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tduration?: Duration\n\t): mongoose.PipelineStage.Match {\n\t\treturn {\n\t\t\t$match: {\n\t\t\t\tmarketings: marketingId,\n\t\t\t\tstatus: { $ne: RegularOrderStatus.CANCELLED },\n\t\t\t\t...(duration && {\n\t\t\t\t\tprocessedAt: {\n\t\t\t\t\t\t$gte: duration.start,\n\t\t\t\t\t\t$lte: duration.end,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async runAggregateAndGetTotal(pipeline: mongoose.PipelineStage[], field: string): Promise<number> {\n\t\tconst [result] = await this.orderModel.aggregate(pipeline);\n\t\treturn result?.[field] ?? 0;\n\t}\n\n\tpublic async getMetrics(marketingId: mongoose.Types.ObjectId): Promise<MarketingMetricsDTO> {\n\t\tconst marketing = await this.model.findById(marketingId).lean();\n\n\t\tif (!marketing) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\n\t\t//TODO: fix current end and previous start\n\n\t\tconst currentDuration = { start: marketing.duration.start, end: dayjs().toDate() };\n\t\tconst previousDuration = {\n\t\t\tstart: dayjs(marketing.duration.start).subtract(dayjs().diff(marketing.duration.start)).toDate(),\n\t\t\tend: marketing.duration.start,\n\t\t};\n\n\t\tlet metrics: MarketingMetricsDTO = {};\n\n\t\tif ([MarketingType.DISCOUNT, MarketingType.BUY1GET1].includes(marketing.marketingType)) {\n\t\t\tmetrics.numberOfItems = await this.getMarketingItemCount(marketingId);\n\t\t}\n\n\t\tmetrics.orderIncreaseWithDiscount = await this.calculateOrderIncreaseWithDiscount(\n\t\t\tmarketingId,\n\t\t\tmarketing.shop._id,\n\t\t\tcurrentDuration,\n\t\t\tpreviousDuration\n\t\t);\n\t\tmetrics.customerIncreaseWithDiscount = await this.calculateCustomerIncreaseWithDiscount(\n\t\t\tmarketingId,\n\t\t\tmarketing.shop._id,\n\t\t\tcurrentDuration,\n\t\t\tpreviousDuration\n\t\t);\n\t\tmetrics.totalRedemptions = await this.orderModel.countDocuments({\n\t\t\tmarketings: marketingId,\n\t\t\tstatus: { $ne: RegularOrderStatus.CANCELLED },\n\t\t});\n\n\t\tif (marketing.marketingType === MarketingType.SPEND_TO_GET) {\n\t\t\tObject.assign(metrics, this.getSpendToGetBudgetMetrics(marketing));\n\t\t}\n\n\t\treturn metrics;\n\t}\n\n\t// amountSpent is the running total of value given (discount + free-delivery cut), maintained on\n\t// order placement and restored on cancel — reuse it so totalValueGiven and remainingBudget stay\n\t// internally consistent (remainingBudget = spendLimit - totalValueGiven).\n\tprivate getSpendToGetBudgetMetrics(\n\t\tmarketing: Pick<SpendToGetMarketing, 'amountSpent' | 'isSpendLimitEnabled' | 'spendLimit'>\n\t): Pick<MarketingMetricsDTO, 'totalValueGiven' | 'remainingBudget'> {\n\t\tconst totalValueGiven = marketing.amountSpent ?? 0;\n\t\tconst remainingBudget =\n\t\t\tmarketing.isSpendLimitEnabled && marketing.spendLimit\n\t\t\t\t? Math.max(marketing.spendLimit - totalValueGiven, 0)\n\t\t\t\t: undefined;\n\n\t\treturn { totalValueGiven, remainingBudget };\n\t}\n\n\tprivate async getMarketingItemCount(marketingId: mongoose.Types.ObjectId): Promise<number> {\n\t\tconst result = await productMarketingService.countDocuments({ marketing: marketingId });\n\t\treturn result ?? 0;\n\t}\n\n\tprivate async calculateOrderIncreaseWithDiscount(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tshopId: mongoose.Types.ObjectId,\n\t\tcurrentDuration: Duration,\n\t\tpreviousDuration: Duration\n\t): Promise<IncreaseDuringDiscountDTO> {\n\t\tconst [currentOrders, previousOrders] = await Promise.all([\n\t\t\tthis.orderModel.countDocuments({\n\t\t\t\tcreatedAt: {\n\t\t\t\t\t$gte: currentDuration.start,\n\t\t\t\t\t$lte: currentDuration.end,\n\t\t\t\t},\n\t\t\t\tmarketings: marketingId, // marketing must be applied\n\t\t\t\tshop: shopId,\n\t\t\t}),\n\t\t\tthis.orderModel.countDocuments({\n\t\t\t\tcreatedAt: {\n\t\t\t\t\t$gte: previousDuration.start,\n\t\t\t\t\t$lte: previousDuration.end,\n\t\t\t\t},\n\t\t\t\tshop: shopId,\n\t\t\t}),\n\t\t]);\n\n\t\treturn this.calculateIncrease(currentOrders, previousOrders);\n\t}\n\n\tprivate async calculateCustomerIncreaseWithDiscount(\n\t\tmarketingId: mongoose.Types.ObjectId,\n\t\tshopId: mongoose.Types.ObjectId,\n\t\tcurrentDuration: Duration,\n\t\tpreviousDuration: Duration\n\t): Promise<IncreaseDuringDiscountDTO> {\n\t\tconst [currentNewCustomers, previousNewCustomers] = await Promise.all([\n\t\t\tthis.getNewCustomersForShop(shopId, currentDuration, { marketings: marketingId }),\n\t\t\tthis.getNewCustomersForShop(shopId, previousDuration),\n\t\t]);\n\n\t\treturn this.calculateIncrease(currentNewCustomers, previousNewCustomers);\n\t}\n\n\tprivate calculateIncrease(current: number, previous: number): IncreaseDuringDiscountDTO {\n\t\tconst count = current - previous;\n\n\t\tconst percentageIncrease = previous === 0 ? (current > 0 ? 100 : 0) : (count / previous) * 100;\n\n\t\treturn {\n\t\t\tcount,\n\t\t\tpercentageIncrease,\n\t\t};\n\t}\n\n\tprivate async getNewCustomersForShop(\n\t\tshopId: mongoose.Types.ObjectId,\n\t\tduration: Duration,\n\t\textraMatch: Record<string, any> = {}\n\t): Promise<number> {\n\t\t// Customers who ordered during the period\n\t\tconst customersInPeriod = await this.orderModel.distinct('user', {\n\t\t\tcreatedAt: {\n\t\t\t\t$gte: duration.start,\n\t\t\t\t$lte: duration.end,\n\t\t\t},\n\t\t\tshop: shopId,\n\t\t\t...extraMatch,\n\t\t});\n\n\t\tif (customersInPeriod.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Customers who had ordered from this shop BEFORE the period\n\t\tconst existingCustomers = await this.orderModel.distinct('user', {\n\t\t\tshop: shopId,\n\t\t\tcreatedAt: { $lt: duration.start },\n\t\t\tuser: { $in: customersInPeriod },\n\t\t});\n\n\t\t// New customers = in period − existing\n\t\treturn customersInPeriod.length - existingCustomers.length;\n\t}\n\n\tpublic async getOrdersGraph(data: MarketingGraphInputDTO): Promise<MarketingOrdersGraphOutputDTO> {\n\t\tconst dateFormat = data.type === GraphType.MONTHLY ? '%Y-%m' : '%Y-%m-%d';\n\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\t// Filter only delivered orders within the given date range\n\t\t\tthis.buildBaseMatch(new mongoose.Types.ObjectId(data.marketingId), {\n\t\t\t\tstart: data.startDate,\n\t\t\t\tend: data.endDate,\n\t\t\t}),\n\n\t\t\t// Extract formatted date from 'processedAt' for grouping\n\t\t\t{\n\t\t\t\t$project: {\n\t\t\t\t\tdate: {\n\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\tdate: '$processedAt',\n\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Group by formatted date and count orders\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$date',\n\t\t\t\t\torders: { $sum: 1 },\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Sort results chronologically\n\t\t\t{\n\t\t\t\t$sort: { _id: 1 },\n\t\t\t},\n\n\t\t\t// Format the response to match output DTO structure\n\t\t\t{\n\t\t\t\t$project: {\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tdate: '$_id',\n\t\t\t\t\torders: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\t// Execute aggregation pipeline\n\t\tconst results = await this.orderModel.aggregate(pipeline).allowDiskUse(true).exec();\n\n\t\tconst graphData = fillMissingPeriods(results, data.startDate, data.endDate, data.type, {\n\t\t\torders: 0,\n\t\t});\n\n\t\treturn graphData;\n\t}\n\n\tpublic async getCustomersGraph(data: MarketingGraphInputDTO): Promise<{ date: string; users: number }[]> {\n\t\t// 1️⃣ Get shopId from marketing\n\t\tconst marketing = await this.model.findById(data.marketingId).select('shop').lean();\n\n\t\tif (!marketing) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\n\t\tconst shopId = marketing.shop._id;\n\n\t\t// 2️⃣ Fetch users who ordered from this shop BEFORE the start date\n\t\tconst oldUsers = await this.orderModel.distinct('user', {\n\t\t\tshop: shopId,\n\t\t\tstatus: RegularOrderStatus.DELIVERED,\n\t\t\tprocessedAt: { $lt: data.startDate },\n\t\t});\n\n\t\tconst dateFormat = data.type === GraphType.MONTHLY ? '%Y-%m' : '%Y-%m-%d';\n\n\t\t// 3️⃣ Aggregation pipeline\n\t\tconst pipeline: mongoose.PipelineStage[] = [\n\t\t\t// Orders during the period with this marketing\n\t\t\t{\n\t\t\t\t$match: {\n\t\t\t\t\torderType: OrderType.REGULAR,\n\t\t\t\t\tstatus: RegularOrderStatus.DELIVERED,\n\t\t\t\t\tshop: shopId,\n\t\t\t\t\tmarketings: new mongoose.Types.ObjectId(data.marketingId),\n\t\t\t\t\tprocessedAt: { $gte: data.startDate, $lte: data.endDate },\n\t\t\t\t\tuser: { $nin: oldUsers }, // 🚫 exclude old users\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Sort so earliest order per user comes first\n\t\t\t{ $sort: { processedAt: 1 } },\n\n\t\t\t// First order per user (new users only)\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$user',\n\t\t\t\t\tfirstOrderDate: { $first: '$processedAt' },\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Format date\n\t\t\t{\n\t\t\t\t$project: {\n\t\t\t\t\tdate: {\n\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\tdate: '$firstOrderDate',\n\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Group by date\n\t\t\t{\n\t\t\t\t$group: {\n\t\t\t\t\t_id: '$date',\n\t\t\t\t\tusers: { $sum: 1 },\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Sort chronologically\n\t\t\t{ $sort: { _id: 1 } },\n\n\t\t\t// Shape response\n\t\t\t{\n\t\t\t\t$project: {\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tdate: '$_id',\n\t\t\t\t\tusers: 1,\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\tconst results = await this.orderModel.aggregate(pipeline).allowDiskUse(true).exec();\n\n\t\t// 4️⃣ Fill missing periods\n\t\treturn fillMissingPeriods(results, data.startDate, data.endDate, data.type, {\n\t\t\tusers: 0,\n\t\t});\n\t}\n\n\tpublic async getAmountSpentGraph(\n\t\tdata: MarketingGraphInputDTO\n\t): Promise<{ date: string; amount: number }[]> {\n\t\tconst marketing = await this.model.findById(data.marketingId).lean();\n\n\t\tif (!marketing) {\n\t\t\tnotFoundError('Marketing not found');\n\t\t}\n\n\t\tconst marketingId = new mongoose.Types.ObjectId(data.marketingId);\n\t\tconst dateFormat = data.type === GraphType.MONTHLY ? '%Y-%m' : '%Y-%m-%d';\n\n\t\tlet pipeline: mongoose.PipelineStage[] | null = null;\n\n\t\t/**\n\t\t * ITEM-BASED (DISCOUNT / BUY1GET1)\n\t\t */\n\t\tif ([MarketingType.DISCOUNT, MarketingType.BUY1GET1].includes(marketing.marketingType)) {\n\t\t\tpipeline = [\n\t\t\t\tthis.buildBaseMatch(marketingId, {\n\t\t\t\t\tstart: data.startDate,\n\t\t\t\t\tend: data.endDate,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\t$lookup: {\n\t\t\t\t\t\tfrom: 'lineItems',\n\t\t\t\t\t\tlocalField: 'cart',\n\t\t\t\t\t\tforeignField: 'cart',\n\t\t\t\t\t\tas: 'lineItems',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $unwind: '$lineItems' },\n\t\t\t\t{\n\t\t\t\t\t$match: {\n\t\t\t\t\t\t'lineItems.marketings': marketingId,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\t\tdate: '$processedAt',\n\t\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tamount: {\n\t\t\t\t\t\t\t$add: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\tmarketing.isAppliedByCompany,\n\t\t\t\t\t\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.itemDiscountByCompany', 0] },\n\t\t\t\t\t\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.itemDiscountByShop', 0] },\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\tmarketing.isAppliedByCompany,\n\t\t\t\t\t\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.b1g1DiscountByCompany', 0] },\n\t\t\t\t\t\t\t\t\t\t{ $ifNull: ['$lineItems.calculationSnap.b1g1DiscountByShop', 0] },\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: '$date',\n\t\t\t\t\t\tamount: { $sum: '$amount' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $sort: { _id: 1 } },\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\tdate: '$_id',\n\t\t\t\t\t\tamount: 1,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t} else if (marketing.marketingType === MarketingType.FREE_DELIVERY) {\n\t\t\t/**\n\t\t\t * FREE DELIVERY\n\t\t\t */\n\t\t\tpipeline = [\n\t\t\t\tthis.buildBaseMatch(marketingId, {\n\t\t\t\t\tstart: data.startDate,\n\t\t\t\t\tend: data.endDate,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\t\tdate: '$processedAt',\n\t\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tamount: {\n\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\tmarketing.isAppliedByCompany,\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.freeDelivery.companyCut', 0] },\n\t\t\t\t\t\t\t\t{ $ifNull: ['$adjustedFinance.freeDelivery.shopCut', 0] },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: '$date',\n\t\t\t\t\t\tamount: { $sum: '$amount' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $sort: { _id: 1 } },\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\tdate: '$_id',\n\t\t\t\t\t\tamount: 1,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t} else if (marketing.marketingType === MarketingType.PUNCH_MARKETING) {\n\t\t\t/**\n\t\t\t * PUNCH MARKETING\n\t\t\t */\n\t\t\tpipeline = [\n\t\t\t\tthis.buildBaseMatch(marketingId, {\n\t\t\t\t\tstart: data.startDate,\n\t\t\t\t\tend: data.endDate,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\t$dateToString: {\n\t\t\t\t\t\t\t\tformat: dateFormat,\n\t\t\t\t\t\t\t\tdate: '$processedAt',\n\t\t\t\t\t\t\t\ttimezone: LyxaTimezone,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tamount: {\n\t\t\t\t\t\t\t$ifNull: ['$adjustedFinance.pricing.punchMarketingDiscount', 0],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: '$date',\n\t\t\t\t\t\tamount: { $sum: '$amount' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $sort: { _id: 1 } },\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\tdate: '$_id',\n\t\t\t\t\t\tamount: 1,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\t// If marketing type doesn't produce spend graph → return empty graph\n\t\tif (!pipeline) {\n\t\t\treturn fillMissingPeriods(\n\t\t\t\t[] as { date: string; amount: number }[],\n\t\t\t\tdata.startDate,\n\t\t\t\tdata.endDate,\n\t\t\t\tdata.type,\n\t\t\t\t{\n\t\t\t\t\tamount: 0,\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst results = await this.orderModel.aggregate(pipeline).allowDiskUse(true).exec();\n\n\t\treturn fillMissingPeriods(results, data.startDate, data.endDate, data.type, {\n\t\t\tamount: 0,\n\t\t});\n\t}\n}\n\nexport const marketingMetricsRepository = Container.get(MarketingMetricsRepository);\n"]}
@@ -39,16 +39,16 @@ export declare const marketingRouter: import("@trpc/server").TRPCBuiltRouter<{
39
39
  }>;
40
40
  get: import("@trpc/server").TRPCQueryProcedure<{
41
41
  input: {
42
- sort?: Record<string, 1 | -1> | undefined;
42
+ query?: Record<string, any> | undefined;
43
43
  search?: {
44
44
  searchKey: string;
45
45
  searchFields?: string[] | undefined;
46
46
  } | undefined;
47
- select?: Record<string, 0 | 1> | undefined;
48
- populate?: any;
47
+ sort?: Record<string, 1 | -1> | undefined;
49
48
  size?: number | undefined;
50
49
  page?: number | undefined;
51
- query?: Record<string, any> | undefined;
50
+ select?: Record<string, 0 | 1> | undefined;
51
+ populate?: any;
52
52
  } | undefined;
53
53
  output: {
54
54
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"marketing.router.d.ts","sourceRoot":"/","sources":["modules/marketing/routers/marketing.router.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAMR,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgKnB,CAAC"}
1
+ {"version":3,"file":"marketing.router.d.ts","sourceRoot":"/","sources":["modules/marketing/routers/marketing.router.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAMV,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgKjB,CAAC"}
@@ -2,6 +2,7 @@ export * from './buy1-get1-marketing.service';
2
2
  export * from './discount-marketing.service';
3
3
  export * from './featured-marketing.service';
4
4
  export * from './free-delivery-marketing.service';
5
+ export * from './new-user-discount-marketing.service';
5
6
  export * from './punch-marketing.service';
6
7
  export * from './spend-to-get-marketing.service';
7
8
  export * from './spend-to-get-progress.service';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["modules/marketing/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yCAAyC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["modules/marketing/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yCAAyC,CAAC"}
@@ -18,6 +18,7 @@ __exportStar(require("./buy1-get1-marketing.service"), exports);
18
18
  __exportStar(require("./discount-marketing.service"), exports);
19
19
  __exportStar(require("./featured-marketing.service"), exports);
20
20
  __exportStar(require("./free-delivery-marketing.service"), exports);
21
+ __exportStar(require("./new-user-discount-marketing.service"), exports);
21
22
  __exportStar(require("./punch-marketing.service"), exports);
22
23
  __exportStar(require("./spend-to-get-marketing.service"), exports);
23
24
  __exportStar(require("./spend-to-get-progress.service"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["modules/marketing/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,+DAA6C;AAC7C,+DAA6C;AAC7C,oEAAkD;AAClD,4DAA0C;AAC1C,mEAAiD;AACjD,kEAAgD;AAChD,+DAA6C;AAC7C,8DAA4C;AAC5C,sDAAoC;AACpC,0EAAwD","sourcesContent":["export * from './buy1-get1-marketing.service';\nexport * from './discount-marketing.service';\nexport * from './featured-marketing.service';\nexport * from './free-delivery-marketing.service';\nexport * from './punch-marketing.service';\nexport * from './spend-to-get-marketing.service';\nexport * from './spend-to-get-progress.service';\nexport * from './marketing-conflict.service';\nexport * from './product-marketing.service';\nexport * from './marketing.service';\nexport * from './synchronize-product-marketing.service';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["modules/marketing/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,+DAA6C;AAC7C,+DAA6C;AAC7C,oEAAkD;AAClD,wEAAsD;AACtD,4DAA0C;AAC1C,mEAAiD;AACjD,kEAAgD;AAChD,+DAA6C;AAC7C,8DAA4C;AAC5C,sDAAoC;AACpC,0EAAwD","sourcesContent":["export * from './buy1-get1-marketing.service';\nexport * from './discount-marketing.service';\nexport * from './featured-marketing.service';\nexport * from './free-delivery-marketing.service';\nexport * from './new-user-discount-marketing.service';\nexport * from './punch-marketing.service';\nexport * from './spend-to-get-marketing.service';\nexport * from './spend-to-get-progress.service';\nexport * from './marketing-conflict.service';\nexport * from './product-marketing.service';\nexport * from './marketing.service';\nexport * from './synchronize-product-marketing.service';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/marketing.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EAKjB,SAAS,IAAI,KAAK,EAOlB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEN,0BAA0B,EAE1B,oCAAoC,EACpC,kBAAkB,IAAI,SAAS,EAC/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AA4C3D,qBACa,gBAAgB;IAC5B,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,UAAU,CAA2D;IAC7E,OAAO,CAAC,0BAA0B,CAA6B;IAC/D,OAAO,CAAC,gCAAgC,CACM;;IAgBjC,MAAM,CAClB,IAAI,EAAE,0BAA0B,EAChC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,OAAO,CAAC,EAAE;QAAE,yBAAyB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/C,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAuKlB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAsB7D,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IA0B3F,MAAM,CAClB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC5B,IAAI,EAAE,SAAS,EACf,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAC7B,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAyIjB,uBAAuB;YA2CvB,uBAAuB;IAmBxB,UAAU,CACtB,IAAI,EAAE,SAAS,EACf,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,OAAO,CAAC,EAAE;QAAE,yBAAyB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/C,OAAO,CAAC,MAAM,CAAC;IAkDL,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC1F,sCAAsC,CAAC,IAAI,EAAE,oCAAoC;IA8BjF,gCAAgC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAiChF,gCAAgC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;YAiC/E,oCAAoC;YAgBpC,kCAAkC;IAgBnC,iCAAiC,IAAI,OAAO,CAAC,IAAI,CAAC;IAqClD,yBAAyB,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC9E,yBAAyB,CAAC,SAAS,EAAE,YAAY,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;CA0CrG;AAED,eAAO,MAAM,gBAAgB,kBAAkC,CAAC"}
1
+ {"version":3,"file":"marketing.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/marketing.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EAKjB,SAAS,IAAI,KAAK,EAOlB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEN,0BAA0B,EAE1B,oCAAoC,EACpC,kBAAkB,IAAI,SAAS,EAC/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AA4C3D,qBACa,gBAAgB;IAC5B,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,UAAU,CAA2D;IAC7E,OAAO,CAAC,0BAA0B,CAA6B;IAC/D,OAAO,CAAC,gCAAgC,CACM;;IAgBjC,MAAM,CAClB,IAAI,EAAE,0BAA0B,EAChC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,OAAO,CAAC,EAAE;QAAE,yBAAyB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/C,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IA4KlB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAsB7D,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IA0B3F,MAAM,CAClB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC5B,IAAI,EAAE,SAAS,EACf,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAC7B,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YA0IjB,uBAAuB;YA2CvB,uBAAuB;IAmBxB,UAAU,CACtB,IAAI,EAAE,SAAS,EACf,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAC/B,OAAO,CAAC,EAAE;QAAE,yBAAyB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/C,OAAO,CAAC,MAAM,CAAC;IAkDL,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC1F,sCAAsC,CAAC,IAAI,EAAE,oCAAoC;IA8BjF,gCAAgC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAiChF,gCAAgC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;YAiC/E,oCAAoC;YAgBpC,kCAAkC;IAgBnC,iCAAiC,IAAI,OAAO,CAAC,IAAI,CAAC;IAqClD,yBAAyB,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC9E,yBAAyB,CAAC,SAAS,EAAE,YAAY,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;CA0CrG;AAED,eAAO,MAAM,gBAAgB,kBAAkC,CAAC"}