@lyxa.ai/marketing 1.0.62 → 1.0.64
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.
- package/dist/lib/event/event-initializations.d.ts.map +1 -1
- package/dist/lib/event/event-initializations.js +2 -0
- package/dist/lib/event/event-initializations.js.map +1 -1
- package/dist/lib/event/event-listeners/event-listeners.d.ts +2 -0
- package/dist/lib/event/event-listeners/event-listeners.d.ts.map +1 -1
- package/dist/lib/event/event-listeners/event-listeners.js +69 -12
- package/dist/lib/event/event-listeners/event-listeners.js.map +1 -1
- package/dist/lib/event/events/marketing-product-seed.event.d.ts +1 -2
- package/dist/lib/event/events/marketing-product-seed.event.d.ts.map +1 -1
- package/dist/lib/event/events/marketing-product-seed.event.js.map +1 -1
- package/dist/lib/event/events/marketing-product-sync.event.d.ts +11 -0
- package/dist/lib/event/events/marketing-product-sync.event.d.ts.map +1 -0
- package/dist/lib/event/events/marketing-product-sync.event.js +12 -0
- package/dist/lib/event/events/marketing-product-sync.event.js.map +1 -0
- package/dist/lib/index.d.ts +536 -19
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +5 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/modules/coupon/routers/coupon.router.d.ts.map +1 -1
- package/dist/lib/modules/coupon/services/custom-coupon.service.d.ts +15 -3
- package/dist/lib/modules/coupon/services/custom-coupon.service.d.ts.map +1 -1
- package/dist/lib/modules/coupon/services/helper.service.d.ts +15 -3
- package/dist/lib/modules/coupon/services/helper.service.d.ts.map +1 -1
- package/dist/lib/modules/coupon/services/individual-store-coupon.service.d.ts +15 -3
- package/dist/lib/modules/coupon/services/individual-store-coupon.service.d.ts.map +1 -1
- package/dist/lib/modules/coupon/services/shops-categories-coupon.service.d.ts +15 -3
- package/dist/lib/modules/coupon/services/shops-categories-coupon.service.d.ts.map +1 -1
- package/dist/lib/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
- package/dist/lib/modules/coupon/validations/create-coupon.validation.js +4 -1
- package/dist/lib/modules/coupon/validations/create-coupon.validation.js.map +1 -1
- package/dist/lib/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
- package/dist/lib/modules/deal-setting/services/deal-setting.service.js +4 -1
- package/dist/lib/modules/deal-setting/services/deal-setting.service.js.map +1 -1
- package/dist/lib/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
- package/dist/lib/modules/featured-setting/services/featured-setting.service.js +3 -0
- package/dist/lib/modules/featured-setting/services/featured-setting.service.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts +54 -8
- package/dist/lib/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js +11 -0
- package/dist/lib/modules/limited-time-offer/campaign/campaign.router.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js +6 -0
- package/dist/lib/modules/limited-time-offer/campaign/jobs/index.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
- package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js +2 -6
- package/dist/lib/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +16 -3
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js +22 -3
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +2 -0
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js +12 -0
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +242 -35
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js +19 -1
- package/dist/lib/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +10 -1
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js +78 -1
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +3 -0
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js +66 -8
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js +41 -19
- package/dist/lib/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts +249 -18
- package/dist/lib/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts +2 -0
- package/dist/lib/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js +10 -4
- package/dist/lib/modules/limited-time-offer/limited-time-offer.service.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
- package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js +1 -1
- package/dist/lib/modules/limited-time-offer/notification/limited-time-offer-notification.constants.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +30 -3
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js +23 -1
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.builder.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +18 -0
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js +103 -0
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.repository.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +195 -10
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js +29 -0
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.router.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +547 -148
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js +16 -6
- package/dist/lib/modules/limited-time-offer/participant/limited-time-offer-participant.validation.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +11 -4
- package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js +48 -7
- package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +18 -5
- package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
- package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js +98 -17
- package/dist/lib/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.js.map +1 -1
- package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts +13 -0
- package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts.map +1 -0
- package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.js +75 -0
- package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.js.map +1 -0
- package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts +21 -0
- package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts.map +1 -0
- package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.js +83 -0
- package/dist/lib/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.js.map +1 -0
- package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts +2 -0
- package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
- package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js +41 -0
- package/dist/lib/modules/marketing/patterns/repository/MarketingMetricsRepository.js.map +1 -1
- package/dist/lib/modules/marketing/routers/marketing.router.d.ts +16 -0
- package/dist/lib/modules/marketing/routers/marketing.router.d.ts.map +1 -1
- package/dist/lib/modules/marketing/routers/marketing.router.js +5 -0
- package/dist/lib/modules/marketing/routers/marketing.router.js.map +1 -1
- package/dist/lib/modules/marketing/services/index.d.ts +3 -0
- package/dist/lib/modules/marketing/services/index.d.ts.map +1 -1
- package/dist/lib/modules/marketing/services/index.js +3 -0
- package/dist/lib/modules/marketing/services/index.js.map +1 -1
- package/dist/lib/modules/marketing/services/marketing-conflict.repository.d.ts +9 -0
- package/dist/lib/modules/marketing/services/marketing-conflict.repository.d.ts.map +1 -0
- package/dist/lib/modules/marketing/services/marketing-conflict.repository.js +63 -0
- package/dist/lib/modules/marketing/services/marketing-conflict.repository.js.map +1 -0
- package/dist/lib/modules/marketing/services/marketing-conflict.service.d.ts +28 -0
- package/dist/lib/modules/marketing/services/marketing-conflict.service.d.ts.map +1 -0
- package/dist/lib/modules/marketing/services/marketing-conflict.service.js +139 -0
- package/dist/lib/modules/marketing/services/marketing-conflict.service.js.map +1 -0
- package/dist/lib/modules/marketing/services/marketing.service.d.ts +7 -2
- package/dist/lib/modules/marketing/services/marketing.service.d.ts.map +1 -1
- package/dist/lib/modules/marketing/services/marketing.service.js +107 -48
- package/dist/lib/modules/marketing/services/marketing.service.js.map +1 -1
- package/dist/lib/modules/marketing/services/product-marketing.service.d.ts +2 -3
- package/dist/lib/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
- package/dist/lib/modules/marketing/services/product-marketing.service.js +42 -13
- package/dist/lib/modules/marketing/services/product-marketing.service.js.map +1 -1
- package/dist/lib/modules/marketing/services/spend-to-get-marketing.repository.d.ts +14 -0
- package/dist/lib/modules/marketing/services/spend-to-get-marketing.repository.d.ts.map +1 -0
- package/dist/lib/modules/marketing/services/spend-to-get-marketing.repository.js +82 -0
- package/dist/lib/modules/marketing/services/spend-to-get-marketing.repository.js.map +1 -0
- package/dist/lib/modules/marketing/services/spend-to-get-marketing.service.d.ts +11 -0
- package/dist/lib/modules/marketing/services/spend-to-get-marketing.service.d.ts.map +1 -0
- package/dist/lib/modules/marketing/services/spend-to-get-marketing.service.js +100 -0
- package/dist/lib/modules/marketing/services/spend-to-get-marketing.service.js.map +1 -0
- package/dist/lib/modules/marketing/services/spend-to-get-progress.repository.d.ts +9 -0
- package/dist/lib/modules/marketing/services/spend-to-get-progress.repository.d.ts.map +1 -0
- package/dist/lib/modules/marketing/services/spend-to-get-progress.repository.js +69 -0
- package/dist/lib/modules/marketing/services/spend-to-get-progress.repository.js.map +1 -0
- package/dist/lib/modules/marketing/services/spend-to-get-progress.service.d.ts +31 -0
- package/dist/lib/modules/marketing/services/spend-to-get-progress.service.d.ts.map +1 -0
- package/dist/lib/modules/marketing/services/spend-to-get-progress.service.js +123 -0
- package/dist/lib/modules/marketing/services/spend-to-get-progress.service.js.map +1 -0
- package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
- package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js +95 -27
- package/dist/lib/modules/marketing/services/synchronize-product-marketing.service.js.map +1 -1
- package/dist/lib/modules/marketing/validations/all-marketings.validation.d.ts.map +1 -1
- package/dist/lib/modules/marketing/validations/all-marketings.validation.js +3 -0
- package/dist/lib/modules/marketing/validations/all-marketings.validation.js.map +1 -1
- package/dist/lib/modules/marketing/validations/buy1-get1-marketing.validation.d.ts +3 -3
- package/dist/lib/modules/marketing/validations/discount-marketing.validation.d.ts +3 -3
- package/dist/lib/modules/marketing/validations/index.d.ts +1 -0
- package/dist/lib/modules/marketing/validations/index.d.ts.map +1 -1
- package/dist/lib/modules/marketing/validations/index.js +1 -0
- package/dist/lib/modules/marketing/validations/index.js.map +1 -1
- package/dist/lib/modules/marketing/validations/marketing.validation.d.ts +23 -0
- package/dist/lib/modules/marketing/validations/marketing.validation.d.ts.map +1 -1
- package/dist/lib/modules/marketing/validations/marketing.validation.js +9 -1
- package/dist/lib/modules/marketing/validations/marketing.validation.js.map +1 -1
- package/dist/lib/modules/marketing/validations/product-marketing.validation.d.ts +2 -2
- package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.d.ts +617 -0
- package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.d.ts.map +1 -0
- package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.js +119 -0
- package/dist/lib/modules/marketing/validations/spend-to-get-marketing.validation.js.map +1 -0
- package/dist/lib/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +1 -1
- package/dist/lib/modules/punch-marketing-history/validations/punch-marketing-history.validation.d.ts +2 -2
- package/dist/lib/modules/spend-to-get-history/routers/index.d.ts +2 -0
- package/dist/lib/modules/spend-to-get-history/routers/index.d.ts.map +1 -0
- package/dist/lib/modules/spend-to-get-history/routers/index.js +18 -0
- package/dist/lib/modules/spend-to-get-history/routers/index.js.map +1 -0
- package/dist/lib/modules/spend-to-get-history/routers/spend-to-get-history.router.js +62 -0
- package/dist/lib/modules/spend-to-get-history/routers/spend-to-get-history.router.js.map +1 -0
- package/dist/lib/modules/spend-to-get-history/services/index.d.ts +2 -0
- package/dist/lib/modules/spend-to-get-history/services/index.d.ts.map +1 -0
- package/dist/lib/modules/spend-to-get-history/services/index.js +18 -0
- package/dist/lib/modules/spend-to-get-history/services/index.js.map +1 -0
- package/dist/lib/modules/spend-to-get-history/services/spend-to-get-history.service.d.ts +24 -0
- package/dist/lib/modules/spend-to-get-history/services/spend-to-get-history.service.d.ts.map +1 -0
- package/dist/lib/modules/spend-to-get-history/services/spend-to-get-history.service.js +136 -0
- package/dist/lib/modules/spend-to-get-history/services/spend-to-get-history.service.js.map +1 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +24 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js +108 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.repository.js.map +1 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts +271 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.js +62 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.router.js.map +1 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts +24 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.js +116 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.service.js.map +1 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +232 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js +30 -0
- package/dist/lib/modules/spend-to-get-history/spend-to-get-history.validation.js.map +1 -0
- package/dist/lib/modules/spend-to-get-history/validations/index.d.ts +2 -0
- package/dist/lib/modules/spend-to-get-history/validations/index.d.ts.map +1 -0
- package/dist/lib/modules/spend-to-get-history/validations/index.js +18 -0
- package/dist/lib/modules/spend-to-get-history/validations/index.js.map +1 -0
- package/dist/lib/modules/spend-to-get-history/validations/spend-to-get-history.validation.d.ts +232 -0
- package/dist/lib/modules/spend-to-get-history/validations/spend-to-get-history.validation.d.ts.map +1 -0
- package/dist/lib/modules/spend-to-get-history/validations/spend-to-get-history.validation.js +30 -0
- package/dist/lib/modules/spend-to-get-history/validations/spend-to-get-history.validation.js.map +1 -0
- package/dist/lib/modules/tournament/match/events/match-ended.consumer.d.ts +2 -0
- package/dist/lib/modules/tournament/match/events/match-ended.consumer.d.ts.map +1 -0
- package/dist/lib/modules/tournament/match/events/match-ended.consumer.js +15 -0
- package/dist/lib/modules/tournament/match/events/match-ended.consumer.js.map +1 -0
- package/dist/lib/modules/tournament/match/events/match-ended.event.d.ts +14 -0
- package/dist/lib/modules/tournament/match/events/match-ended.event.d.ts.map +1 -0
- package/dist/lib/modules/tournament/match/events/match-ended.event.js +12 -0
- package/dist/lib/modules/tournament/match/events/match-ended.event.js.map +1 -0
- package/dist/lib/modules/tournament/notification/jobs/notification.producer.d.ts +10 -0
- package/dist/lib/modules/tournament/notification/jobs/notification.producer.d.ts.map +1 -0
- package/dist/lib/modules/tournament/notification/jobs/notification.producer.js +23 -0
- package/dist/lib/modules/tournament/notification/jobs/notification.producer.js.map +1 -0
- package/dist/lib/modules/tournament/notification/jobs/notification.worker.d.ts +9 -0
- package/dist/lib/modules/tournament/notification/jobs/notification.worker.d.ts.map +1 -0
- package/dist/lib/modules/tournament/notification/jobs/notification.worker.js +82 -0
- package/dist/lib/modules/tournament/notification/jobs/notification.worker.js.map +1 -0
- package/dist/lib/modules/tournament/notification/notification.schedule.config.d.ts +10 -0
- package/dist/lib/modules/tournament/notification/notification.schedule.config.d.ts.map +1 -0
- package/dist/lib/modules/tournament/notification/notification.schedule.config.js +15 -0
- package/dist/lib/modules/tournament/notification/notification.schedule.config.js.map +1 -0
- package/dist/lib/modules/tournament/notification/notification.scheduler.service.d.ts +10 -0
- package/dist/lib/modules/tournament/notification/notification.scheduler.service.d.ts.map +1 -0
- package/dist/lib/modules/tournament/notification/notification.scheduler.service.js +73 -0
- package/dist/lib/modules/tournament/notification/notification.scheduler.service.js.map +1 -0
- package/dist/types/event/event-initializations.d.ts.map +1 -1
- package/dist/types/event/event-listeners/event-listeners.d.ts +2 -0
- package/dist/types/event/event-listeners/event-listeners.d.ts.map +1 -1
- package/dist/types/event/events/marketing-product-seed.event.d.ts +1 -2
- package/dist/types/event/events/marketing-product-seed.event.d.ts.map +1 -1
- package/dist/types/event/events/marketing-product-sync.event.d.ts +11 -0
- package/dist/types/event/events/marketing-product-sync.event.d.ts.map +1 -0
- package/dist/types/events/event-initializations.d.ts +2 -0
- package/dist/types/events/event-initializations.d.ts.map +1 -0
- package/dist/types/index.d.ts +536 -19
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modules/coupon/routers/coupon.router.d.ts.map +1 -1
- package/dist/types/modules/coupon/services/custom-coupon.service.d.ts +15 -3
- package/dist/types/modules/coupon/services/custom-coupon.service.d.ts.map +1 -1
- package/dist/types/modules/coupon/services/helper.service.d.ts +15 -3
- package/dist/types/modules/coupon/services/helper.service.d.ts.map +1 -1
- package/dist/types/modules/coupon/services/individual-store-coupon.service.d.ts +15 -3
- package/dist/types/modules/coupon/services/individual-store-coupon.service.d.ts.map +1 -1
- package/dist/types/modules/coupon/services/shops-categories-coupon.service.d.ts +15 -3
- package/dist/types/modules/coupon/services/shops-categories-coupon.service.d.ts.map +1 -1
- package/dist/types/modules/coupon/validations/create-coupon.validation.d.ts.map +1 -1
- package/dist/types/modules/deal-setting/services/deal-setting.service.d.ts.map +1 -1
- package/dist/types/modules/featured-setting/services/featured-setting.service.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts +54 -8
- package/dist/types/modules/limited-time-offer/campaign/campaign.router.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/campaign/jobs/index.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts +0 -1
- package/dist/types/modules/limited-time-offer/campaign/jobs/limited-time-offer-campaign.worker.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts +16 -3
- package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.builder.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts +2 -0
- package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.repository.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts +242 -35
- package/dist/types/modules/limited-time-offer/campaign/limited-time-offer-campaign.validation.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts +10 -1
- package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-lifecycle.service.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts +3 -0
- package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign-scheduler.service.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts +1 -1
- package/dist/types/modules/limited-time-offer/campaign/services/limited-time-offer-campaign.service.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts +249 -18
- package/dist/types/modules/limited-time-offer/limited-time-offer.router.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts +2 -0
- package/dist/types/modules/limited-time-offer/limited-time-offer.service.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/notification/limited-time-offer-notification.constants.d.ts +1 -1
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts +30 -3
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.builder.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts +18 -0
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.repository.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts +195 -10
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.router.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts +1 -0
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.service.d.ts.map +1 -0
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts +547 -148
- package/dist/types/modules/limited-time-offer/participant/limited-time-offer-participant.validation.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts +11 -4
- package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant-marketing.service.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts +18 -5
- package/dist/types/modules/limited-time-offer/participant/services/limited-time-offer-participant.service.d.ts.map +1 -1
- package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts +13 -0
- package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.repository.d.ts.map +1 -0
- package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts +21 -0
- package/dist/types/modules/limited-time-offer/session/limited-time-offer-campaign-session.service.d.ts.map +1 -0
- package/dist/types/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts +2 -0
- package/dist/types/modules/marketing/patterns/repository/MarketingMetricsRepository.d.ts.map +1 -1
- package/dist/types/modules/marketing/routers/marketing.router.d.ts +16 -0
- package/dist/types/modules/marketing/routers/marketing.router.d.ts.map +1 -1
- package/dist/types/modules/marketing/services/index.d.ts +3 -0
- package/dist/types/modules/marketing/services/index.d.ts.map +1 -1
- package/dist/types/modules/marketing/services/marketing-conflict.repository.d.ts +9 -0
- package/dist/types/modules/marketing/services/marketing-conflict.repository.d.ts.map +1 -0
- package/dist/types/modules/marketing/services/marketing-conflict.service.d.ts +46 -0
- package/dist/types/modules/marketing/services/marketing-conflict.service.d.ts.map +1 -0
- package/dist/types/modules/marketing/services/marketing.service.d.ts +7 -2
- package/dist/types/modules/marketing/services/marketing.service.d.ts.map +1 -1
- package/dist/types/modules/marketing/services/product-marketing.service.d.ts +7 -3
- package/dist/types/modules/marketing/services/product-marketing.service.d.ts.map +1 -1
- package/dist/types/modules/marketing/services/spend-to-get-marketing.repository.d.ts +14 -0
- package/dist/types/modules/marketing/services/spend-to-get-marketing.repository.d.ts.map +1 -0
- package/dist/types/modules/marketing/services/spend-to-get-marketing.service.d.ts +20 -0
- package/dist/types/modules/marketing/services/spend-to-get-marketing.service.d.ts.map +1 -0
- package/dist/types/modules/marketing/services/spend-to-get-progress.repository.d.ts +9 -0
- package/dist/types/modules/marketing/services/spend-to-get-progress.repository.d.ts.map +1 -0
- package/dist/types/modules/marketing/services/spend-to-get-progress.service.d.ts +37 -0
- package/dist/types/modules/marketing/services/spend-to-get-progress.service.d.ts.map +1 -0
- package/dist/types/modules/marketing/services/synchronize-product-marketing.service.d.ts.map +1 -1
- package/dist/types/modules/marketing/validations/all-marketings.validation.d.ts.map +1 -1
- package/dist/types/modules/marketing/validations/buy1-get1-marketing.validation.d.ts +3 -3
- package/dist/types/modules/marketing/validations/discount-marketing.validation.d.ts +3 -3
- package/dist/types/modules/marketing/validations/index.d.ts +1 -0
- package/dist/types/modules/marketing/validations/index.d.ts.map +1 -1
- package/dist/types/modules/marketing/validations/marketing.validation.d.ts +23 -0
- package/dist/types/modules/marketing/validations/marketing.validation.d.ts.map +1 -1
- package/dist/types/modules/marketing/validations/product-marketing.validation.d.ts +2 -2
- package/dist/types/modules/marketing/validations/spend-to-get-marketing.validation.d.ts +630 -0
- package/dist/types/modules/marketing/validations/spend-to-get-marketing.validation.d.ts.map +1 -0
- package/dist/types/modules/punch-marketing-history/routers/punch-marketing-history.router.d.ts +1 -1
- package/dist/types/modules/punch-marketing-history/validations/punch-marketing-history.validation.d.ts +2 -2
- package/dist/types/modules/spend-to-get-history/routers/index.d.ts +2 -0
- package/dist/types/modules/spend-to-get-history/routers/index.d.ts.map +1 -0
- package/dist/types/modules/spend-to-get-history/services/index.d.ts +2 -0
- package/dist/types/modules/spend-to-get-history/services/index.d.ts.map +1 -0
- package/dist/types/modules/spend-to-get-history/services/spend-to-get-history.service.d.ts +56 -0
- package/dist/types/modules/spend-to-get-history/services/spend-to-get-history.service.d.ts.map +1 -0
- package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts +24 -0
- package/dist/types/modules/spend-to-get-history/spend-to-get-history.repository.d.ts.map +1 -0
- package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts +271 -0
- package/dist/types/modules/spend-to-get-history/spend-to-get-history.router.d.ts.map +1 -0
- package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts +56 -0
- package/dist/types/modules/spend-to-get-history/spend-to-get-history.service.d.ts.map +1 -0
- package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts +241 -0
- package/dist/types/modules/spend-to-get-history/spend-to-get-history.validation.d.ts.map +1 -0
- package/dist/types/modules/spend-to-get-history/validations/index.d.ts +2 -0
- package/dist/types/modules/spend-to-get-history/validations/index.d.ts.map +1 -0
- package/dist/types/modules/spend-to-get-history/validations/spend-to-get-history.validation.d.ts +241 -0
- package/dist/types/modules/spend-to-get-history/validations/spend-to-get-history.validation.d.ts.map +1 -0
- package/dist/types/modules/tournament/config/tournament-config.validation.d.ts +201 -0
- package/dist/types/modules/tournament/config/tournament-config.validation.d.ts.map +1 -0
- package/dist/types/modules/tournament/match/events/match-ended.consumer.d.ts +2 -0
- package/dist/types/modules/tournament/match/events/match-ended.consumer.d.ts.map +1 -0
- package/dist/types/modules/tournament/match/events/match-ended.event.d.ts +14 -0
- package/dist/types/modules/tournament/match/events/match-ended.event.d.ts.map +1 -0
- package/dist/types/modules/tournament/notification/jobs/notification.producer.d.ts +10 -0
- package/dist/types/modules/tournament/notification/jobs/notification.producer.d.ts.map +1 -0
- package/dist/types/modules/tournament/notification/jobs/notification.worker.d.ts +9 -0
- package/dist/types/modules/tournament/notification/jobs/notification.worker.d.ts.map +1 -0
- package/dist/types/modules/tournament/notification/notification.schedule.config.d.ts +10 -0
- package/dist/types/modules/tournament/notification/notification.schedule.config.d.ts.map +1 -0
- package/dist/types/modules/tournament/notification/notification.scheduler.service.d.ts +10 -0
- package/dist/types/modules/tournament/notification/notification.scheduler.service.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -3,6 +3,9 @@ export * from './discount-marketing.service';
|
|
|
3
3
|
export * from './featured-marketing.service';
|
|
4
4
|
export * from './free-delivery-marketing.service';
|
|
5
5
|
export * from './punch-marketing.service';
|
|
6
|
+
export * from './spend-to-get-marketing.service';
|
|
7
|
+
export * from './spend-to-get-progress.service';
|
|
8
|
+
export * from './marketing-conflict.service';
|
|
6
9
|
export * from './product-marketing.service';
|
|
7
10
|
export * from './marketing.service';
|
|
8
11
|
export * from './synchronize-product-marketing.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,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,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"}
|
|
@@ -19,6 +19,9 @@ __exportStar(require("./discount-marketing.service"), exports);
|
|
|
19
19
|
__exportStar(require("./featured-marketing.service"), exports);
|
|
20
20
|
__exportStar(require("./free-delivery-marketing.service"), exports);
|
|
21
21
|
__exportStar(require("./punch-marketing.service"), exports);
|
|
22
|
+
__exportStar(require("./spend-to-get-marketing.service"), exports);
|
|
23
|
+
__exportStar(require("./spend-to-get-progress.service"), exports);
|
|
24
|
+
__exportStar(require("./marketing-conflict.service"), exports);
|
|
22
25
|
__exportStar(require("./product-marketing.service"), exports);
|
|
23
26
|
__exportStar(require("./marketing.service"), exports);
|
|
24
27
|
__exportStar(require("./synchronize-product-marketing.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,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 './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,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"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DocumentType, mongoose } from '@typegoose/typegoose';
|
|
2
|
+
import { Marketing as Model } from '@lyxa.ai/core/dist/libraries/mongo/models';
|
|
3
|
+
export declare class MarketingConflictRepository {
|
|
4
|
+
private model;
|
|
5
|
+
constructor();
|
|
6
|
+
find(filter: mongoose.FilterQuery<Model>): Promise<DocumentType<Model>[]>;
|
|
7
|
+
}
|
|
8
|
+
export declare const marketingConflictRepository: MarketingConflictRepository;
|
|
9
|
+
//# sourceMappingURL=marketing-conflict.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketing-conflict.repository.d.ts","sourceRoot":"/","sources":["modules/marketing/services/marketing-conflict.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAkB,SAAS,IAAI,KAAK,EAAE,MAAM,2CAA2C,CAAC;AAG/F,qBACa,2BAA2B;IACvC,OAAO,CAAC,KAAK,CAAiD;;IAMxD,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;CAG/E;AAED,eAAO,MAAM,2BAA2B,6BAA6C,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.marketingConflictRepository = exports.MarketingConflictRepository = void 0;
|
|
46
|
+
const typedi_1 = __importStar(require("typedi"));
|
|
47
|
+
const models_1 = require("@lyxa.ai/core/dist/libraries/mongo/models");
|
|
48
|
+
let MarketingConflictRepository = class MarketingConflictRepository {
|
|
49
|
+
model;
|
|
50
|
+
constructor() {
|
|
51
|
+
this.model = models_1.MarketingModel;
|
|
52
|
+
}
|
|
53
|
+
async find(filter) {
|
|
54
|
+
return this.model.find(filter);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
exports.MarketingConflictRepository = MarketingConflictRepository;
|
|
58
|
+
exports.MarketingConflictRepository = MarketingConflictRepository = __decorate([
|
|
59
|
+
(0, typedi_1.Service)(),
|
|
60
|
+
__metadata("design:paramtypes", [])
|
|
61
|
+
], MarketingConflictRepository);
|
|
62
|
+
exports.marketingConflictRepository = typedi_1.default.get(MarketingConflictRepository);
|
|
63
|
+
//# sourceMappingURL=marketing-conflict.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketing-conflict.repository.js","sourceRoot":"/","sources":["modules/marketing/services/marketing-conflict.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAE5C,sEAA+F;AAIxF,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAC/B,KAAK,CAAiD;IAE9D;QACC,IAAI,CAAC,KAAK,GAAG,uBAAgE,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAmC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACD,CAAA;AAVY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,gBAAO,GAAE;;GACG,2BAA2B,CAUvC;AAEY,QAAA,2BAA2B,GAAG,gBAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC","sourcesContent":["import Container, { Service } from 'typedi';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport { MarketingModel, Marketing as Model } from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport { SoftDeleteModel } from '@lyxa.ai/core/dist/libraries/mongo/plugins/soft-delete-plugin';\n\n@Service()\nexport class MarketingConflictRepository {\n\tprivate model: typeof MarketingModel & SoftDeleteModel<Model>;\n\n\tconstructor() {\n\t\tthis.model = MarketingModel as typeof MarketingModel & SoftDeleteModel<Model>;\n\t}\n\n\tasync find(filter: mongoose.FilterQuery<Model>): Promise<DocumentType<Model>[]> {\n\t\treturn this.model.find(filter);\n\t}\n}\n\nexport const marketingConflictRepository = Container.get(MarketingConflictRepository);\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DocumentType, mongoose } from '@typegoose/typegoose';
|
|
2
|
+
import { Marketing } from '@lyxa.ai/core/dist/libraries/mongo/models';
|
|
3
|
+
import { MarketingType, SpendToGetRewardType } from '@lyxa.ai/core/dist/utilities/enum';
|
|
4
|
+
import { Duration } from '@lyxa.ai/core/dist/libraries/mongo/models/shared/duration.model';
|
|
5
|
+
export declare enum RewardTypeGroup {
|
|
6
|
+
DISCOUNT = "discount",
|
|
7
|
+
FREE_DELIVERY = "free_delivery"
|
|
8
|
+
}
|
|
9
|
+
export declare const CONFLICT_CHECK_MARKETING_TYPES: MarketingType[];
|
|
10
|
+
export interface ConflictCheckParams {
|
|
11
|
+
shop: mongoose.Types.ObjectId;
|
|
12
|
+
marketingType: MarketingType;
|
|
13
|
+
duration: Pick<Duration, 'start' | 'end'>;
|
|
14
|
+
rewardTypeGroups: RewardTypeGroup[];
|
|
15
|
+
excludeMarketingId?: mongoose.Types.ObjectId;
|
|
16
|
+
}
|
|
17
|
+
export declare class MarketingConflictService {
|
|
18
|
+
private repository;
|
|
19
|
+
constructor();
|
|
20
|
+
getRewardTypeGroups(marketingType: MarketingType, tiers?: {
|
|
21
|
+
rewardType: SpendToGetRewardType;
|
|
22
|
+
}[]): RewardTypeGroup[];
|
|
23
|
+
findConflicting(params: ConflictCheckParams): Promise<DocumentType<Marketing>[]>;
|
|
24
|
+
assertNoConflict(params: ConflictCheckParams): Promise<void>;
|
|
25
|
+
private describeConflict;
|
|
26
|
+
}
|
|
27
|
+
export declare const marketingConflictService: MarketingConflictService;
|
|
28
|
+
//# sourceMappingURL=marketing-conflict.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketing-conflict.service.d.ts","sourceRoot":"/","sources":["modules/marketing/services/marketing-conflict.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AACtE,OAAO,EAAmB,aAAa,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAI3F,oBAAY,eAAe;IAC1B,QAAQ,aAAa;IACrB,aAAa,kBAAkB;CAC/B;AAED,eAAO,MAAM,8BAA8B,iBAK1C,CAAC;AAKF,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;IAC1C,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;CAC7C;AAED,qBACa,wBAAwB;IACpC,OAAO,CAAC,UAAU,CAA8B;;IAUzC,mBAAmB,CACzB,aAAa,EAAE,aAAa,EAC5B,KAAK,CAAC,EAAE;QAAE,UAAU,EAAE,oBAAoB,CAAA;KAAE,EAAE,GAC5C,eAAe,EAAE;IAoCP,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;IA8BhF,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzE,OAAO,CAAC,gBAAgB;CAaxB;AAED,eAAO,MAAM,wBAAwB,0BAA0C,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.marketingConflictService = exports.MarketingConflictService = exports.CONFLICT_CHECK_MARKETING_TYPES = exports.RewardTypeGroup = void 0;
|
|
46
|
+
const typedi_1 = __importStar(require("typedi"));
|
|
47
|
+
const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
|
|
48
|
+
const error_common_1 = require("@lyxa.ai/core/dist/utilities/error-common");
|
|
49
|
+
const marketing_conflict_repository_1 = require("./marketing-conflict.repository");
|
|
50
|
+
var RewardTypeGroup;
|
|
51
|
+
(function (RewardTypeGroup) {
|
|
52
|
+
RewardTypeGroup["DISCOUNT"] = "discount";
|
|
53
|
+
RewardTypeGroup["FREE_DELIVERY"] = "free_delivery";
|
|
54
|
+
})(RewardTypeGroup || (exports.RewardTypeGroup = RewardTypeGroup = {}));
|
|
55
|
+
exports.CONFLICT_CHECK_MARKETING_TYPES = [
|
|
56
|
+
enum_1.MarketingType.DISCOUNT,
|
|
57
|
+
enum_1.MarketingType.BUY1GET1,
|
|
58
|
+
enum_1.MarketingType.FREE_DELIVERY,
|
|
59
|
+
enum_1.MarketingType.SPEND_TO_GET,
|
|
60
|
+
];
|
|
61
|
+
const MAX_DATE = new Date('9999-12-31T23:59:59.999Z');
|
|
62
|
+
let MarketingConflictService = class MarketingConflictService {
|
|
63
|
+
repository;
|
|
64
|
+
constructor() {
|
|
65
|
+
this.repository = typedi_1.default.get(marketing_conflict_repository_1.MarketingConflictRepository);
|
|
66
|
+
}
|
|
67
|
+
getRewardTypeGroups(marketingType, tiers) {
|
|
68
|
+
if (marketingType === enum_1.MarketingType.DISCOUNT || marketingType === enum_1.MarketingType.BUY1GET1) {
|
|
69
|
+
return [RewardTypeGroup.DISCOUNT];
|
|
70
|
+
}
|
|
71
|
+
if (marketingType === enum_1.MarketingType.FREE_DELIVERY) {
|
|
72
|
+
return [RewardTypeGroup.FREE_DELIVERY];
|
|
73
|
+
}
|
|
74
|
+
if (marketingType === enum_1.MarketingType.SPEND_TO_GET) {
|
|
75
|
+
const groups = new Set();
|
|
76
|
+
for (const tier of tiers ?? []) {
|
|
77
|
+
groups.add(tier.rewardType === enum_1.SpendToGetRewardType.FREE_DELIVERY
|
|
78
|
+
? RewardTypeGroup.FREE_DELIVERY
|
|
79
|
+
: RewardTypeGroup.DISCOUNT);
|
|
80
|
+
}
|
|
81
|
+
return Array.from(groups);
|
|
82
|
+
}
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
async findConflicting(params) {
|
|
86
|
+
if (params.rewardTypeGroups.length === 0)
|
|
87
|
+
return [];
|
|
88
|
+
const newStart = params.duration.start;
|
|
89
|
+
const newEnd = params.duration.end ?? MAX_DATE;
|
|
90
|
+
const newIsSpendToGet = params.marketingType === enum_1.MarketingType.SPEND_TO_GET;
|
|
91
|
+
const candidates = await this.repository.find({
|
|
92
|
+
shop: params.shop,
|
|
93
|
+
status: enum_1.MarketingStatus.ACTIVE,
|
|
94
|
+
marketingType: { $in: exports.CONFLICT_CHECK_MARKETING_TYPES },
|
|
95
|
+
...(params.excludeMarketingId && { _id: { $ne: params.excludeMarketingId } }),
|
|
96
|
+
'duration.start': { $lt: newEnd },
|
|
97
|
+
$or: [{ 'duration.end': { $exists: false } }, { 'duration.end': { $gt: newStart } }],
|
|
98
|
+
});
|
|
99
|
+
return candidates.filter(candidate => {
|
|
100
|
+
const candidateIsSpendToGet = candidate.marketingType === enum_1.MarketingType.SPEND_TO_GET;
|
|
101
|
+
if (!newIsSpendToGet && !candidateIsSpendToGet)
|
|
102
|
+
return false;
|
|
103
|
+
const candidateGroups = this.getRewardTypeGroups(candidate.marketingType, candidate.tiers);
|
|
104
|
+
return candidateGroups.some(group => params.rewardTypeGroups.includes(group));
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
async assertNoConflict(params) {
|
|
108
|
+
const conflicts = await this.findConflicting(params);
|
|
109
|
+
if (conflicts.length === 0)
|
|
110
|
+
return;
|
|
111
|
+
const messages = new Set();
|
|
112
|
+
for (const conflict of conflicts) {
|
|
113
|
+
for (const group of this.getRewardTypeGroups(conflict.marketingType, conflict.tiers)) {
|
|
114
|
+
if (params.rewardTypeGroups.includes(group)) {
|
|
115
|
+
messages.add(this.describeConflict(conflict.marketingType, group));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
(0, error_common_1.conflictError)(Array.from(messages).join(' '));
|
|
120
|
+
}
|
|
121
|
+
describeConflict(existingType, group) {
|
|
122
|
+
const isFreeDelivery = group === RewardTypeGroup.FREE_DELIVERY;
|
|
123
|
+
if (existingType === enum_1.MarketingType.SPEND_TO_GET) {
|
|
124
|
+
return isFreeDelivery
|
|
125
|
+
? 'This shop already has an active Spend to Get promotion offering Free Delivery for these dates.'
|
|
126
|
+
: 'This shop already has an active Spend to Get promotion offering a discount for these dates.';
|
|
127
|
+
}
|
|
128
|
+
return isFreeDelivery
|
|
129
|
+
? 'This shop already has an active Free Delivery promotion for these dates.'
|
|
130
|
+
: 'This shop already has an active Discount/B1G1 promotion for these dates.';
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
exports.MarketingConflictService = MarketingConflictService;
|
|
134
|
+
exports.MarketingConflictService = MarketingConflictService = __decorate([
|
|
135
|
+
(0, typedi_1.Service)(),
|
|
136
|
+
__metadata("design:paramtypes", [])
|
|
137
|
+
], MarketingConflictService);
|
|
138
|
+
exports.marketingConflictService = typedi_1.default.get(MarketingConflictService);
|
|
139
|
+
//# sourceMappingURL=marketing-conflict.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketing-conflict.service.js","sourceRoot":"/","sources":["modules/marketing/services/marketing-conflict.service.ts"],"names":[],"mappings":"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","sourcesContent":["import Container, { Service } from 'typedi';\nimport { DocumentType, mongoose } from '@typegoose/typegoose';\nimport { Marketing } from '@lyxa.ai/core/dist/libraries/mongo/models';\nimport { MarketingStatus, MarketingType, SpendToGetRewardType } from '@lyxa.ai/core/dist/utilities/enum';\nimport { Duration } from '@lyxa.ai/core/dist/libraries/mongo/models/shared/duration.model';\nimport { conflictError } from '@lyxa.ai/core/dist/utilities/error-common';\nimport { MarketingConflictRepository } from './marketing-conflict.repository';\n\nexport enum RewardTypeGroup {\n\tDISCOUNT = 'discount',\n\tFREE_DELIVERY = 'free_delivery',\n}\n\nexport const CONFLICT_CHECK_MARKETING_TYPES = [\n\tMarketingType.DISCOUNT,\n\tMarketingType.BUY1GET1,\n\tMarketingType.FREE_DELIVERY,\n\tMarketingType.SPEND_TO_GET,\n];\n\n// Open-ended promotions (no duration.end) are treated as running indefinitely for overlap purposes.\nconst MAX_DATE = new Date('9999-12-31T23:59:59.999Z');\n\nexport interface ConflictCheckParams {\n\tshop: mongoose.Types.ObjectId;\n\tmarketingType: MarketingType;\n\tduration: Pick<Duration, 'start' | 'end'>;\n\trewardTypeGroups: RewardTypeGroup[];\n\texcludeMarketingId?: mongoose.Types.ObjectId;\n}\n\n@Service()\nexport class MarketingConflictService {\n\tprivate repository: MarketingConflictRepository;\n\n\tconstructor() {\n\t\tthis.repository = Container.get(MarketingConflictRepository);\n\t}\n\n\t/**\n\t * A Spend-to-Get promotion's reward-type-group membership is the union of all its tiers'\n\t * reward types (a promotion with both a discount and a free-delivery tier belongs to both groups).\n\t */\n\tpublic getRewardTypeGroups(\n\t\tmarketingType: MarketingType,\n\t\ttiers?: { rewardType: SpendToGetRewardType }[]\n\t): RewardTypeGroup[] {\n\t\tif (marketingType === MarketingType.DISCOUNT || marketingType === MarketingType.BUY1GET1) {\n\t\t\treturn [RewardTypeGroup.DISCOUNT];\n\t\t}\n\n\t\tif (marketingType === MarketingType.FREE_DELIVERY) {\n\t\t\treturn [RewardTypeGroup.FREE_DELIVERY];\n\t\t}\n\n\t\tif (marketingType === MarketingType.SPEND_TO_GET) {\n\t\t\tconst groups = new Set<RewardTypeGroup>();\n\t\t\tfor (const tier of tiers ?? []) {\n\t\t\t\tgroups.add(\n\t\t\t\t\ttier.rewardType === SpendToGetRewardType.FREE_DELIVERY\n\t\t\t\t\t\t? RewardTypeGroup.FREE_DELIVERY\n\t\t\t\t\t\t: RewardTypeGroup.DISCOUNT\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn Array.from(groups);\n\t\t}\n\n\t\treturn [];\n\t}\n\n\t/**\n\t * Finds other active promotions on the same shop whose date range overlaps `duration` and whose\n\t * reward-type-group membership intersects `rewardTypeGroups`. Strict `<`/`>` comparisons mean\n\t * back-to-back dates (one ends 23:59, the next starts 00:00) are not treated as overlapping.\n\t *\n\t * The exclusivity rule applies only to pairings that involve a Spend-to-Get promotion. Two\n\t * standalone promotions (e.g. an admin Discount and a shop Discount) are allowed to run\n\t * concurrently and are intentionally never flagged here.\n\t */\n\t// ponytail: check-then-write, not transactional — two same-shop activations racing within the\n\t// same millisecond could both pass. Upgrade to a per-shop lock document + mongoose session if\n\t// concurrent admin activation ever becomes frequent enough to matter.\n\tpublic async findConflicting(params: ConflictCheckParams): Promise<DocumentType<Marketing>[]> {\n\t\tif (params.rewardTypeGroups.length === 0) return [];\n\n\t\tconst newStart = params.duration.start;\n\t\tconst newEnd = params.duration.end ?? MAX_DATE;\n\t\tconst newIsSpendToGet = params.marketingType === MarketingType.SPEND_TO_GET;\n\n\t\tconst candidates = await this.repository.find({\n\t\t\tshop: params.shop,\n\t\t\tstatus: MarketingStatus.ACTIVE,\n\t\t\tmarketingType: { $in: CONFLICT_CHECK_MARKETING_TYPES },\n\t\t\t...(params.excludeMarketingId && { _id: { $ne: params.excludeMarketingId } }),\n\t\t\t'duration.start': { $lt: newEnd },\n\t\t\t$or: [{ 'duration.end': { $exists: false } }, { 'duration.end': { $gt: newStart } }],\n\t\t});\n\n\t\treturn candidates.filter(candidate => {\n\t\t\tconst candidateIsSpendToGet = candidate.marketingType === MarketingType.SPEND_TO_GET;\n\t\t\tif (!newIsSpendToGet && !candidateIsSpendToGet) return false;\n\n\t\t\tconst candidateGroups = this.getRewardTypeGroups(candidate.marketingType, (candidate as any).tiers);\n\t\t\treturn candidateGroups.some(group => params.rewardTypeGroups.includes(group));\n\t\t});\n\t}\n\n\t/**\n\t * Throws a CONFLICT error describing the existing blocking promotion. The message identifies\n\t * whether the blocker is a Spend-to-Get promotion or a standalone one and which reward type\n\t * (Free Delivery vs discount) actually overlaps.\n\t */\n\tpublic async assertNoConflict(params: ConflictCheckParams): Promise<void> {\n\t\tconst conflicts = await this.findConflicting(params);\n\t\tif (conflicts.length === 0) return;\n\n\t\tconst messages = new Set<string>();\n\t\tfor (const conflict of conflicts) {\n\t\t\tfor (const group of this.getRewardTypeGroups(conflict.marketingType, (conflict as any).tiers)) {\n\t\t\t\tif (params.rewardTypeGroups.includes(group)) {\n\t\t\t\t\tmessages.add(this.describeConflict(conflict.marketingType, group));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconflictError(Array.from(messages).join(' '));\n\t}\n\n\tprivate describeConflict(existingType: MarketingType, group: RewardTypeGroup): string {\n\t\tconst isFreeDelivery = group === RewardTypeGroup.FREE_DELIVERY;\n\n\t\tif (existingType === MarketingType.SPEND_TO_GET) {\n\t\t\treturn isFreeDelivery\n\t\t\t\t? 'This shop already has an active Spend to Get promotion offering Free Delivery for these dates.'\n\t\t\t\t: 'This shop already has an active Spend to Get promotion offering a discount for these dates.';\n\t\t}\n\n\t\treturn isFreeDelivery\n\t\t\t? 'This shop already has an active Free Delivery promotion for these dates.'\n\t\t\t: 'This shop already has an active Discount/B1G1 promotion for these dates.';\n\t}\n}\n\nexport const marketingConflictService = Container.get(MarketingConflictService);\n"]}
|
|
@@ -10,13 +10,17 @@ export declare class MarketingService {
|
|
|
10
10
|
private marketingMetricsRepository;
|
|
11
11
|
private limitedTimeOfferParticipantModel;
|
|
12
12
|
constructor();
|
|
13
|
-
create(data: AllMarketingsValidationDTO, admin?: mongoose.Types.ObjectId
|
|
13
|
+
create(data: AllMarketingsValidationDTO, admin?: mongoose.Types.ObjectId, options?: {
|
|
14
|
+
skipLimitedTimeOfferGuard?: boolean;
|
|
15
|
+
}): Promise<DocumentType<Model>>;
|
|
14
16
|
findById(data: GetByIdInputDTO): Promise<DocumentType<Model>>;
|
|
15
17
|
find(data?: Partial<FilterDTO>): Promise<PaginatedResponse<DocumentType<ModelType<Model>>>>;
|
|
16
18
|
update(_id: mongoose.Types.ObjectId, data: UpdateDTO, admin?: mongoose.Types.ObjectId): Promise<DocumentType<Model>>;
|
|
17
19
|
private verifyUnpauseConditions;
|
|
18
20
|
private logMarketingAdminAction;
|
|
19
|
-
deleteById(data: DeleteDTO, admin?: mongoose.Types.ObjectId
|
|
21
|
+
deleteById(data: DeleteDTO, admin?: mongoose.Types.ObjectId, options?: {
|
|
22
|
+
skipLimitedTimeOfferGuard?: boolean;
|
|
23
|
+
}): Promise<string>;
|
|
20
24
|
deleteManyByIds(marketingIds: mongoose.Types.ObjectId[], softDelete?: boolean): Promise<void>;
|
|
21
25
|
handleNewProductForEntireMenuMarketing(data: ProductEntireMenuMarketingHandlerDTO): Promise<string>;
|
|
22
26
|
incrementMarketingSpentFromOrder(orderId: mongoose.Types.ObjectId): Promise<any>;
|
|
@@ -24,6 +28,7 @@ export declare class MarketingService {
|
|
|
24
28
|
private expireMarketingsExceedingSpendLimits;
|
|
25
29
|
private unExpireMarketingsBelowSpendLimits;
|
|
26
30
|
recomputeAndSyncAllMarketingSpent(): Promise<void>;
|
|
31
|
+
private publishEntireMenuSeedEvents;
|
|
27
32
|
reseedEntireMenuMarketing(marketingId: mongoose.Types.ObjectId): Promise<void>;
|
|
28
33
|
assignMarketingToProducts(marketing: DocumentType<Buy1Get1Marketing | DiscountMarketing>): Promise<void>;
|
|
29
34
|
}
|
|
@@ -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,EAMjB,SAAS,IAAI,KAAK,
|
|
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,EAMjB,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,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AA+C3D,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;IA+JlB,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;YAwIjB,uBAAuB;YAyCvB,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;YAqCjD,2BAA2B;IA2B5B,yBAAyB,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9E,yBAAyB,CAAC,SAAS,EAAE,YAAY,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;CAqCrG;AAED,eAAO,MAAM,gBAAgB,kBAAkC,CAAC"}
|
|
@@ -55,12 +55,14 @@ const admin_logs_event_1 = require("@lyxa.ai/core/dist/libraries/event/events/ad
|
|
|
55
55
|
const enum_1 = require("@lyxa.ai/core/dist/utilities/enum");
|
|
56
56
|
const event_1 = require("@lyxa.ai/core/dist/libraries/event");
|
|
57
57
|
const marketing_product_seed_event_1 = require("../../../event/events/marketing-product-seed.event");
|
|
58
|
+
const marketing_product_sync_event_1 = require("../../../event/events/marketing-product-sync.event");
|
|
58
59
|
const _1 = require(".");
|
|
59
60
|
const enum_2 = require("@lyxa.ai/core/dist/utilities/enum");
|
|
60
61
|
const error_common_1 = require("@lyxa.ai/core/dist/utilities/error-common");
|
|
61
62
|
const mongo_stream_changes_batch_process_shops_event_1 = require("@lyxa.ai/core/dist/libraries/event/events/mongo-stream-changes-batch-process-shops-event");
|
|
62
63
|
const MarketingMetricsRepository_1 = require("../patterns/repository/MarketingMetricsRepository");
|
|
63
64
|
const marketing_product_sync_queue_1 = require("../queues/marketing-product-sync.queue");
|
|
65
|
+
const limited_time_offer_participant_service_1 = require("../../limited-time-offer/participant/services/limited-time-offer-participant.service");
|
|
64
66
|
let MarketingService = class MarketingService {
|
|
65
67
|
model;
|
|
66
68
|
shopModel;
|
|
@@ -75,14 +77,21 @@ let MarketingService = class MarketingService {
|
|
|
75
77
|
this.limitedTimeOfferParticipantModel =
|
|
76
78
|
models_1.LimitedTimeOfferParticipantModel;
|
|
77
79
|
}
|
|
78
|
-
async create(data, admin) {
|
|
80
|
+
async create(data, admin, options) {
|
|
79
81
|
const now = (0, dayjs_1.dayjs)().toDate();
|
|
82
|
+
if (!options?.skipLimitedTimeOfferGuard &&
|
|
83
|
+
data.marketingType === enum_2.MarketingType.DISCOUNT &&
|
|
84
|
+
(await limited_time_offer_participant_service_1.ltoParticipantService.isActiveParticipant(data.shop))) {
|
|
85
|
+
(0, error_common_1.forbiddenError)('You are currently participating in a Limited Time Offer. Please manage your discount from the Limited Time Offer section or withdraw first.');
|
|
86
|
+
}
|
|
80
87
|
const existingRecord = await this.model.findOne({
|
|
81
88
|
shop: data.shop,
|
|
82
89
|
marketingType: data.marketingType,
|
|
83
90
|
'duration.end': { $gt: now },
|
|
84
91
|
status: enum_1.MarketingStatus.ACTIVE,
|
|
85
92
|
isAppliedByCompany: data.isAppliedByCompany,
|
|
93
|
+
campaignType: data.campaignType,
|
|
94
|
+
admin: admin ? { $ne: null } : null,
|
|
86
95
|
});
|
|
87
96
|
if (existingRecord) {
|
|
88
97
|
throw new server_1.TRPCError({
|
|
@@ -90,6 +99,14 @@ let MarketingService = class MarketingService {
|
|
|
90
99
|
message: `This shop already has a ${data.marketingType} marketing`,
|
|
91
100
|
});
|
|
92
101
|
}
|
|
102
|
+
if (_1.CONFLICT_CHECK_MARKETING_TYPES.includes(data.marketingType)) {
|
|
103
|
+
await _1.marketingConflictService.assertNoConflict({
|
|
104
|
+
shop: data.shop,
|
|
105
|
+
marketingType: data.marketingType,
|
|
106
|
+
duration: data.duration,
|
|
107
|
+
rewardTypeGroups: _1.marketingConflictService.getRewardTypeGroups(data.marketingType, data.tiers),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
93
110
|
if (data.isEntireMenu) {
|
|
94
111
|
const existingMarketing = await this.model.findOne({
|
|
95
112
|
shop: data.shop,
|
|
@@ -114,12 +131,17 @@ let MarketingService = class MarketingService {
|
|
|
114
131
|
message: `Product list contains duplicate products`,
|
|
115
132
|
});
|
|
116
133
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
134
|
+
if (data.campaignType === enum_1.MarketingCampaignType.LIMITED_TIME_OFFER) {
|
|
135
|
+
await _1.productMarketingService.pauseConflictingMarketings(productIds);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const isAvailable = await _1.productMarketingService.checkProductMarketingAvailability(productIds, data.isAppliedByCompany);
|
|
139
|
+
if (!isAvailable) {
|
|
140
|
+
throw new server_1.TRPCError({
|
|
141
|
+
code: 'CONFLICT',
|
|
142
|
+
message: `Product list contains products which already have marketing applied`,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
123
145
|
}
|
|
124
146
|
}
|
|
125
147
|
if (admin) {
|
|
@@ -153,6 +175,10 @@ let MarketingService = class MarketingService {
|
|
|
153
175
|
marketing = await _1.punchMarketingService.create(data);
|
|
154
176
|
break;
|
|
155
177
|
}
|
|
178
|
+
case enum_2.MarketingType.SPEND_TO_GET: {
|
|
179
|
+
marketing = await _1.spendToGetMarketingService.create(data);
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
156
182
|
default: {
|
|
157
183
|
marketing = await this.model.create(data, admin);
|
|
158
184
|
}
|
|
@@ -229,6 +255,10 @@ let MarketingService = class MarketingService {
|
|
|
229
255
|
if (data.status &&
|
|
230
256
|
data.status === enum_1.MarketingStatus.ACTIVE &&
|
|
231
257
|
oldMarketing.status === enum_1.MarketingStatus.PAUSED) {
|
|
258
|
+
if (oldMarketing.marketingType === enum_2.MarketingType.DISCOUNT &&
|
|
259
|
+
(await limited_time_offer_participant_service_1.ltoParticipantService.isActiveParticipant(oldMarketing.shop._id))) {
|
|
260
|
+
(0, error_common_1.forbiddenError)('You are currently participating in a Limited Time Offer. Please manage your discount from the Limited Time Offer section or withdraw first.');
|
|
261
|
+
}
|
|
232
262
|
await this.verifyUnpauseConditions(_id);
|
|
233
263
|
}
|
|
234
264
|
switch (oldMarketing.marketingType) {
|
|
@@ -255,6 +285,10 @@ let MarketingService = class MarketingService {
|
|
|
255
285
|
marketing = await _1.punchMarketingService.update(_id, data);
|
|
256
286
|
break;
|
|
257
287
|
}
|
|
288
|
+
case enum_2.MarketingType.SPEND_TO_GET: {
|
|
289
|
+
marketing = await _1.spendToGetMarketingService.update(_id, data);
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
258
292
|
default: {
|
|
259
293
|
marketing = await this.model
|
|
260
294
|
.findOneAndUpdate({
|
|
@@ -297,6 +331,15 @@ let MarketingService = class MarketingService {
|
|
|
297
331
|
const marketing = await this.model.findOne({ _id: marketingId, deletedAt: null }).populate('products');
|
|
298
332
|
if (!marketing)
|
|
299
333
|
return;
|
|
334
|
+
const hasActiveLto = await this.model.exists({
|
|
335
|
+
shop: marketing.shop,
|
|
336
|
+
campaignType: enum_1.MarketingCampaignType.LIMITED_TIME_OFFER,
|
|
337
|
+
status: enum_1.MarketingStatus.ACTIVE,
|
|
338
|
+
deletedAt: null,
|
|
339
|
+
});
|
|
340
|
+
if (hasActiveLto) {
|
|
341
|
+
(0, error_common_1.conflictError)("Can't resume this discount while a limited time offer is active");
|
|
342
|
+
}
|
|
300
343
|
if ([enum_2.MarketingType.BUY1GET1, enum_2.MarketingType.DISCOUNT].includes(marketing.marketingType)) {
|
|
301
344
|
const typedMarketing = marketing;
|
|
302
345
|
const productIds = typedMarketing.products.map((product) => product.product);
|
|
@@ -305,6 +348,15 @@ let MarketingService = class MarketingService {
|
|
|
305
348
|
(0, error_common_1.conflictError)("You can't activate discount and B1G1 on the same items at the same time");
|
|
306
349
|
}
|
|
307
350
|
}
|
|
351
|
+
if (_1.CONFLICT_CHECK_MARKETING_TYPES.includes(marketing.marketingType)) {
|
|
352
|
+
await _1.marketingConflictService.assertNoConflict({
|
|
353
|
+
shop: marketing.shop,
|
|
354
|
+
marketingType: marketing.marketingType,
|
|
355
|
+
duration: marketing.duration,
|
|
356
|
+
rewardTypeGroups: _1.marketingConflictService.getRewardTypeGroups(marketing.marketingType, marketing.tiers),
|
|
357
|
+
excludeMarketingId: marketingId,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
308
360
|
}
|
|
309
361
|
async logMarketingAdminAction(admin, actionType, oldDocument, newDocument) {
|
|
310
362
|
const adminActivityLogsEvent = new admin_logs_event_1.AdminActivityLogsEvent({
|
|
@@ -315,8 +367,16 @@ let MarketingService = class MarketingService {
|
|
|
315
367
|
});
|
|
316
368
|
await (0, event_1.publishEvent)(adminActivityLogsEvent);
|
|
317
369
|
}
|
|
318
|
-
async deleteById(data, admin) {
|
|
370
|
+
async deleteById(data, admin, options) {
|
|
319
371
|
const { _id, softDelete } = data;
|
|
372
|
+
if (!options?.skipLimitedTimeOfferGuard) {
|
|
373
|
+
const partOfLimitedTimeOffer = await this.limitedTimeOfferParticipantModel.exists({
|
|
374
|
+
marketing: _id,
|
|
375
|
+
});
|
|
376
|
+
if (partOfLimitedTimeOffer) {
|
|
377
|
+
(0, error_common_1.forbiddenError)('You are currently participating in a Limited Time Offer. Please make your edits from the Limited Time Offer section.');
|
|
378
|
+
}
|
|
379
|
+
}
|
|
320
380
|
const record = await this.model.findById(_id).populate({
|
|
321
381
|
path: 'shop',
|
|
322
382
|
select: '_id name shopId',
|
|
@@ -494,31 +554,34 @@ let MarketingService = class MarketingService {
|
|
|
494
554
|
await this.expireMarketingsExceedingSpendLimits(marketingIds);
|
|
495
555
|
await this.unExpireMarketingsBelowSpendLimits(marketingIds);
|
|
496
556
|
}
|
|
557
|
+
async publishEntireMenuSeedEvents(marketing) {
|
|
558
|
+
const PAGE_SIZE = 500;
|
|
559
|
+
const marketingId = marketing._id.toString();
|
|
560
|
+
const shopId = (marketing.shop?._id ?? marketing.shop).toString();
|
|
561
|
+
const products = await models_1.ProductModel.find({ shop: marketing.shop }).select('_id').lean();
|
|
562
|
+
const productIds = products.map((p) => p._id.toString());
|
|
563
|
+
for (let i = 0; i < productIds.length; i += PAGE_SIZE) {
|
|
564
|
+
await (0, event_1.publishEvent)(new marketing_product_seed_event_1.MarketingEntireMenuSeedEvent({
|
|
565
|
+
marketingId,
|
|
566
|
+
shopId,
|
|
567
|
+
isAppliedByCompany: marketing.isAppliedByCompany ?? false,
|
|
568
|
+
isBuy1Get1: marketing.marketingType === enum_2.MarketingType.BUY1GET1,
|
|
569
|
+
value: marketing.value,
|
|
570
|
+
valueType: marketing.valueType,
|
|
571
|
+
productIds: productIds.slice(i, i + PAGE_SIZE),
|
|
572
|
+
}));
|
|
573
|
+
}
|
|
574
|
+
return productIds.length;
|
|
575
|
+
}
|
|
497
576
|
async reseedEntireMenuMarketing(marketingId) {
|
|
498
577
|
const logger = (0, core_1.getLibraries)().getLoggerKit();
|
|
499
578
|
const marketing = await this.model.findOne({ _id: marketingId, deletedAt: null });
|
|
500
579
|
if (!marketing)
|
|
501
580
|
(0, error_common_1.internalServerError)('Marketing not found');
|
|
502
|
-
const
|
|
503
|
-
|
|
504
|
-
const shopId = (marketing.shop?._id ?? marketing.shop).toString();
|
|
505
|
-
const count = await models_1.ProductModel.countDocuments({ shop: marketing.shop });
|
|
506
|
-
const pages = Math.ceil(count / PAGE_SIZE);
|
|
507
|
-
if (!pages)
|
|
508
|
-
return;
|
|
509
|
-
await Promise.all(Array.from({ length: pages }, (_, page) => (0, event_1.publishEvent)(new marketing_product_seed_event_1.MarketingEntireMenuSeedEvent({
|
|
510
|
-
marketingId: mid,
|
|
511
|
-
shopId,
|
|
512
|
-
isAppliedByCompany: marketing.isAppliedByCompany ?? false,
|
|
513
|
-
isBuy1Get1: marketing.marketingType === enum_2.MarketingType.BUY1GET1,
|
|
514
|
-
value: marketing.value,
|
|
515
|
-
valueType: marketing.valueType,
|
|
516
|
-
page,
|
|
517
|
-
pageSize: PAGE_SIZE,
|
|
518
|
-
}))));
|
|
519
|
-
logger.debug(`entire-menu reseed dispatched — ${pages} pages for ${count} products`, {
|
|
581
|
+
const productCount = await this.publishEntireMenuSeedEvents(marketing);
|
|
582
|
+
logger.debug(`entire-menu reseed dispatched — ${productCount} products`, {
|
|
520
583
|
tag: 'marketing.seed.entire-menu',
|
|
521
|
-
data: { marketingId:
|
|
584
|
+
data: { marketingId: marketingId.toString(), productCount },
|
|
522
585
|
});
|
|
523
586
|
}
|
|
524
587
|
async assignMarketingToProducts(marketing) {
|
|
@@ -528,31 +591,27 @@ let MarketingService = class MarketingService {
|
|
|
528
591
|
}
|
|
529
592
|
if (marketing.isEntireMenu) {
|
|
530
593
|
const logger = (0, core_1.getLibraries)().getLoggerKit();
|
|
531
|
-
const
|
|
532
|
-
|
|
594
|
+
const productCount = await this.publishEntireMenuSeedEvents(marketing);
|
|
595
|
+
logger.debug(`entire-menu marketing seed dispatched — ${productCount} products`, {
|
|
596
|
+
tag: 'marketing.seed.entire-menu',
|
|
597
|
+
data: { marketingId: marketing._id.toString(), productCount },
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
else {
|
|
533
601
|
const shopId = (marketing.shop?._id ?? marketing.shop).toString();
|
|
534
|
-
const
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
602
|
+
const pms = await models_1.ProductMarketingModel.find({ marketing: marketing._id, deletedAt: null })
|
|
603
|
+
.select('product')
|
|
604
|
+
.lean();
|
|
605
|
+
const productIds = pms.map((p) => p.product.toString());
|
|
606
|
+
const PAGE_SIZE = 500;
|
|
607
|
+
for (let i = 0; i < productIds.length; i += PAGE_SIZE) {
|
|
608
|
+
await (0, event_1.publishEvent)(new marketing_product_sync_event_1.MarketingProductSyncEvent({
|
|
609
|
+
marketingId: marketing._id.toString(),
|
|
539
610
|
shopId,
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
value: marketing.value,
|
|
543
|
-
valueType: marketing.valueType,
|
|
544
|
-
page,
|
|
545
|
-
pageSize: PAGE_SIZE,
|
|
546
|
-
}))));
|
|
547
|
-
logger.debug(`entire-menu marketing seed dispatched — ${pages} pages for ${count} products`, {
|
|
548
|
-
tag: 'marketing.seed.entire-menu',
|
|
549
|
-
data: { marketingId, shopId, pages, productCount: count },
|
|
550
|
-
});
|
|
611
|
+
productIds: productIds.slice(i, i + PAGE_SIZE),
|
|
612
|
+
}));
|
|
551
613
|
}
|
|
552
614
|
}
|
|
553
|
-
else {
|
|
554
|
-
await _1.productMarketingService.syncProductMarketingInfo(marketing._id);
|
|
555
|
-
}
|
|
556
615
|
}
|
|
557
616
|
};
|
|
558
617
|
exports.MarketingService = MarketingService;
|