import { Logger } from '@nestjs/common'; import { ReturnModelType } from '@typegoose/typegoose'; import { MailService } from '~backend/mail/mail.service'; import { Member } from '~backend/marketing/membership/membership.model'; import { RewardService } from '~backend/marketing/reward/reward.service'; import { User } from '~backend/user/user.model'; import { UserService } from '~backend/user/user.service'; import { WebsocketService } from '~backend/websocket/websocket.service'; import { IRewardJob } from '../reward-job.interface'; import { RewardJob } from '../reward-job.model'; import { IDispatchDto, IDistributeDto, IDistributeResponse, IRunResponse } from './base-reward-job.interface'; export declare abstract class BaseRewardJobService { protected readonly rewardJobModel: ReturnModelType; protected readonly rewardService: RewardService; protected readonly websocketService: WebsocketService; protected readonly mailService: MailService; protected readonly userService: UserService; constructor(rewardJobModel: ReturnModelType, rewardService: RewardService, websocketService: WebsocketService, mailService: MailService, userService: UserService); protected readonly logger: Logger; protected abstract newJobObject(dto: IDispatchDto): IRewardJob; /** create job */ protected create(dto: IDispatchDto): Promise; protected abstract distribute(dto: IDistributeDto): Promise; private newFailure; private isRunnable; /** * run job * !job must populate * recipients.user * recipients.member.membership, * failures.recipients.user * failures.recipients.member.membership, */ protected run(job: IRewardJob, recipients: { user: User; member: Member.Member; }[]): Promise; /** create and run job */ dispatch(dto: IDispatchDto): Promise; private getLogMessage; private getUpdatePayload; /** trigger when run/rerun success */ protected onSuccess(response: IRunResponse): Promise; /** trigger when run/rerun failure */ protected onError(response: IRunResponse): Promise; /** rerun job */ rerun(job: RewardJob): Promise; abstract rollback(job: IRewardJob): Promise; }