import { Reward } from './reward.model'; import { ReturnModelType, DocumentType } from '@typegoose/typegoose'; import { Restaurant } from '~backend/business/business.model'; import { CreateRewardsOption, CreateJoinRewardOption, MemberRewardIssueResult } from './reward.interface'; import { VoucherService } from '../voucher/voucher.service'; import { MembershipService } from '../membership/membership.service'; import { Member } from '~backend/marketing/membership/membership.model'; import { Types, QueryPopulateOptions, ClientSession } from 'mongoose'; import { Membership } from '../membership/membership.interface'; import { MemberClaim } from '../marketing.interface'; import { WebsocketService } from '~backend/websocket/websocket.service'; export interface RewardTarget { user: string | 'none'; exp: number; member: Member.Member; vouchers: Types.ObjectId[]; distributeAt?: Date; } export declare class RewardService { readonly rewardModel: ReturnModelType; private readonly voucherService; private readonly membershipService; private readonly websocketService; private readonly logger; constructor(rewardModel: ReturnModelType, voucherService: VoucherService, membershipService: MembershipService, websocketService: WebsocketService); findById(id: string, populates?: (string | QueryPopulateOptions)[]): Promise>; getRewardsByUserId(user: string, populates?: (string | QueryPopulateOptions)[]): Promise[]>; readByUnreadUserId(user: string, populates?: (string | QueryPopulateOptions)[]): Promise[]>; /** @deprecated */ createJoinReward({ member, membership, restaurant }: CreateJoinRewardOption, session?: ClientSession): Promise; createRewardTarget(reward: RewardTarget, businessId: Types.ObjectId, membership?: Membership, restaurantId?: Types.ObjectId, session?: ClientSession): Promise; createBillReward(restaurant: Restaurant, membership: Membership | null, members: Member.Member[], options: CreateRewardsOption): Promise; runExpSequence(member: Member.Member, exp: number, membership: Membership, session?: ClientSession): Promise<{ issued: MemberRewardIssueResult; voucherIds: Types.ObjectId[]; }>; private runVoucherSequence; redeemReward(reward: Reward, user: string): Promise; /** @deprecated */ createClaimReward(memberClaims: MemberClaim[]): Promise; distributeRewards(rewardIds: string[], userId: string): Promise; }