training_data/apps/server/src/queue/models/post/post.queue.service.ts

57 lines
2.0 KiB
TypeScript
Executable File

import { InjectQueue } from '@nestjs/bullmq';
import { Injectable, Logger, OnModuleInit } from '@nestjs/common';
import { Queue } from 'bullmq';
import EventBus from '@server/utils/event-bus';
import { ObjectType, VisitType } from '@nice/common';
import {
QueueJobType,
updatePostStateJobData,
updateVisitCountJobData,
} from '@server/queue/types';
@Injectable()
export class PostQueueService implements OnModuleInit {
private readonly logger = new Logger(PostQueueService.name);
constructor(@InjectQueue('general') private generalQueue: Queue) {}
onModuleInit() {
EventBus.on('updateVisitCount', ({ id, objectType, visitType }) => {
if (objectType === ObjectType.POST) {
this.addUpdateVisitCountJob({ id, type: visitType });
}
});
EventBus.on('updatePostState', ({ id }) => {
this.addUpdatePostState({ id });
});
EventBus.on('updatePostState', ({ id }) => {
this.addUpdatePostState({ id });
});
EventBus.on('updateTotalCourseViewCount', ({ visitType }) => {
this.addUpdateTotalCourseViewCount({ visitType });
});
}
async addUpdateVisitCountJob(data: updateVisitCountJobData) {
this.logger.log(`update post view count ${data.id}`);
await this.generalQueue.add(QueueJobType.UPDATE_POST_VISIT_COUNT, data, {
debounce: {
id: `${QueueJobType.UPDATE_POST_VISIT_COUNT}_${data.type}_${data.id}`,
},
});
}
async addUpdatePostState(data: updatePostStateJobData) {
this.logger.log(`update post state ${data.id}`);
await this.generalQueue.add(QueueJobType.UPDATE_POST_STATE, data, {
debounce: { id: `${QueueJobType.UPDATE_POST_STATE}_${data.id}` },
});
}
async addUpdateTotalCourseViewCount({ visitType }) {
this.logger.log(`update post state ${visitType}`);
await this.generalQueue.add(
QueueJobType.UPDATE_TOTAL_COURSE_VIEW_COUNT,
{ type: visitType },
{
debounce: { id: `${QueueJobType.UPDATE_POST_STATE}_${visitType}` },
},
);
}
}