import { Ref } from '@typegoose/typegoose'; import { Types } from 'mongoose'; import { Member } from '~backend/marketing/membership/membership.model'; import { Reward } from '~backend/marketing/reward/reward.model'; import { User } from '~backend/user/user.model'; import { ICreditDispatchDto, ICreditRunResponse } from '../credit/credit-reward-job.interface'; import { IExperienceDispatchDto, IExperienceRunResponse } from '../experience/experience-reward-job.interface'; import { RewardJobType, ISource, IRewardJobFailure, IRewardJob, IRecipient } from '../reward-job.interface'; import { IVoucherDispatchDto, IVoucherRunResponse } from '../voucher/voucher-reward-job.interface'; export interface IBaseRewardJobOption { type: RewardJobType; rewards: Ref[]; } export interface IBaseDispatchDto { type: RewardJobType; source: ISource; recipients: IRecipient[]; distributedAt: Date; } export interface IBaseRunResponse { type: RewardJobType; id: string; rewards: Ref[]; failures: IRewardJobFailure[]; } export interface IDistributeDto { job: IRewardJob; user: User; member?: Member.Member; } export interface IDistributeResponse { refs: Types.ObjectId[]; rewards: Types.ObjectId[]; } export type IDispatchDto = IVoucherDispatchDto | ICreditDispatchDto | IExperienceDispatchDto; export type IRunResponse = IVoucherRunResponse | ICreditRunResponse | IExperienceRunResponse;