import { Ref } from '@typegoose/typegoose'; import { Types } from 'mongoose'; import { Business, Restaurant } from '~backend/business/business.model'; import { User } from '~backend/user/user.model'; import { Membership } from '../membership/membership.model'; import { ICreditRewardJobOption } from './credit/credit-reward-job.interface'; import { IVoucherRewardJobOption } from './voucher/voucher-reward-job.interface'; import { Member } from '../membership/membership.model'; import { IExperienceRewardJobOption } from './experience/experience-reward-job.interface'; import { Voucher } from '../marketing.model'; export declare enum RewardJobType { credit = "CREDIT", voucher = "VOUCHER", experience = "EXPERIENCE" } export declare enum Status { NEW = "NEW", SUCCESS = "SUCCESS", FAILED = "FAILED", IN_PROGRESS = "IN_PROGRESS", ROLLING_BACK = "ROLLING_BACK" } export declare enum SourceType { membershipScheduledBenefit = "MEMBERSHIP_SCHEDULED_BENEFIT", membershipJoinBenefit = "MEMBERSHIP_JOIN_BENEFIT", membershipJoinReward = "MEMBERSHIP_JOIN_REWARD", bill = "BILL", billRetentionVoucher = "BILL_RETENTION_VOUCHER", billFeedbackVoucher = "BILL_FEEDBACK_VOUCHER", portalSendMember = "PORTAL_SEND_MEMBER", billCashback = "BILL_CASHBACK" } export interface IBaseSource { type: SourceType; business: Ref; restaurant?: Ref; billId?: string; } export interface IMembershipScheduledBenefitSource extends IBaseSource { type: SourceType.membershipScheduledBenefit; membership: Ref; benefitId: Types.ObjectId; } export interface IMembershipJoinBenefitSource extends IBaseSource { type: SourceType.membershipJoinBenefit; membership: Ref; benefitId: Types.ObjectId; } export interface IMembershipJoinRewardSource extends IBaseSource { type: SourceType.membershipJoinReward; membership: Ref; } export interface IBillSource extends IBaseSource { type: SourceType.bill; restaurant: Ref; billId: string; } export interface IBillRetentionVoucherSource extends IBaseSource { type: SourceType.billRetentionVoucher; restaurant: Ref; voucher: Ref; billId: string; } export interface IBillFeedbackVoucherSource extends IBaseSource { type: SourceType.billFeedbackVoucher; billMetaId: string; } export interface IPortalSendMemberSource extends IBaseSource { type: SourceType.portalSendMember; sender: Ref; } export interface IBillCashbackSource extends IBaseSource { type: SourceType.billCashback; billId: string; restaurant: Ref; } export interface IRewardJobFailure { message: string; stack?: string; recipients: IRecipient[]; } export type ISource = IMembershipScheduledBenefitSource | IMembershipJoinBenefitSource | IMembershipJoinRewardSource | IBillSource | IBillRetentionVoucherSource | IBillFeedbackVoucherSource | IPortalSendMemberSource | IBillCashbackSource; export interface IRewardJob { id?: string; recipients: IRecipient[]; status: Status; source: ISource; option: IVoucherRewardJobOption | ICreditRewardJobOption | IExperienceRewardJobOption; failures: IRewardJobFailure[]; distributedAt: Date; } export interface IRecipient { user: Ref; member?: Ref; }