import { ReturnModelType, DocumentType } from '@typegoose/typegoose'; import { Member, UpdateMembershipDto, Membership, UpdateMemberDto } from './membership.model'; import { MembershipSummary, Reward, Level, Benefit, Tier, Membership as IMembership, Title } from './membership.interface'; import { Types, QueryPopulateOptions } from 'mongoose'; import { Restaurant } from '~backend/business/business.interface'; import { UserService } from '~backend/user/user.service'; import { ClientSession } from 'mongodb'; import { MailService } from '~backend/mail/mail.service'; import { MembershipRewardService } from './reward/membership-reward.service'; import { CustomerMember } from '~backend/pos-api/pos-api.interface'; export declare class MembershipService { private readonly userService; private readonly membershipRewardService; readonly memberModel: ReturnModelType; readonly membershipModel: ReturnModelType; private readonly mailService; private readonly logger; constructor(userService: UserService, membershipRewardService: MembershipRewardService, memberModel: ReturnModelType, membershipModel: ReturnModelType, mailService: MailService); private migrateUsers; private populateQuery; findById(id: string, populates?: (string | QueryPopulateOptions)[]): Promise>; findByIds(ids: string[], populates?: (string | QueryPopulateOptions)[]): Promise[]>; findByBusinessId(id: string): Promise; findByBusinessIdRestaurantId(businessId: string, restaurantId: string): Promise; /**@deprecated */ findMembersByUserId(id: string, populates?: string[]): Promise[]>; findMemberByIds(ids: string[]): Promise; findMemberById(id: string): Promise; findMember(payload: Partial): Promise; findMemberForPos(restaurant: Restaurant, userId: string): Promise; loadSummary(businessId: string): Promise; create(businessId: string, payload: Membership): Promise; updateMembership(businessId: string, name: string, baseExp: number): Promise; update(businessId: string, payload: UpdateMembershipDto): Promise; updateLevelCycle(businessId: string, levelCycle: Level.Cycle): Promise; updateOnLevelReward(businessId: string, onLevelReward: Reward.OnLevelReward): Promise; updateOnJoinReward(businessId: string, onJoinReward: Reward.OnJoinReward): Promise; updateExperienceRange(businessId: string, expRange: Level.ExperienceRange[]): Promise; joinMembership(businessId: string, user: string): Promise>; findMembersByBusinessUsers(businessId: string, userIds: string[]): Promise; increaseExperience(id: Types.ObjectId, exp: number, membership?: IMembership, session?: ClientSession): Promise<{ member: Member.Member; levelUp: any; }>; updateMemberStat(id: Types.ObjectId, stat: { products: Member.ProductCount[]; billSize: number; visitedAt: Date; }): Promise; updateMember(id: string, payload: UpdateMemberDto): Promise; updateBenefits(businessId: string, benefits: Benefit.Benefit[]): Promise; updateTier(businessId: string, tier: Tier.Option): Promise; updateTitles(businessId: string, titles: Title.Title[]): Promise; runTitleCycle(currentTime?: Date): Promise; runLevelCycle(date?: Date): Promise; validateUrl(id: string, url?: string): Promise; }