doctor-mail/apps/server/src/queue/models/post/post.queue.service.ts

41 lines
1.4 KiB
TypeScript
Raw Normal View History

2025-01-24 00:19:02 +08:00
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';
2025-01-24 15:06:57 +08:00
import {
QueueJobType,
updatePostStateJobData,
updateVisitCountJobData,
} from '@server/queue/types';
2025-01-24 00:19:02 +08:00
@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 });
}
});
2025-01-24 15:06:57 +08:00
EventBus.on('updatePostState', ({ id }) => {
this.addUpdatePostState({ id });
});
2025-01-24 00:19:02 +08:00
}
async addUpdateVisitCountJob(data: updateVisitCountJobData) {
this.logger.log(`update post view count ${data.id}`);
await this.generalQueue.add(QueueJobType.UPDATE_POST_VISIT_COUNT, data, {
2025-01-24 17:39:41 +08:00
debounce: {
id: `${QueueJobType.UPDATE_POST_VISIT_COUNT}_${data.type}_${data.id}`,
},
2025-01-24 00:19:02 +08:00
});
}
2025-01-24 15:06:57 +08:00
async addUpdatePostState(data: updatePostStateJobData) {
this.logger.log(`update post state ${data.id}`);
await this.generalQueue.add(QueueJobType.UPDATE_POST_STATE, data, {
2025-01-24 17:39:41 +08:00
debounce: { id: `${QueueJobType.UPDATE_POST_STATE}_${data.id}` },
2025-01-24 15:06:57 +08:00
});
}
2025-01-24 00:19:02 +08:00
}