summaryrefslogtreecommitdiff
path: root/packages/backend/src/queue/processors/ended-poll-notification.ts
blob: 6151c96ad638616464e32a3e63564a56f4878d5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import Bull from 'bull';
import { In } from 'typeorm';
import { Notes, Polls, PollVotes } from '@/models/index.js';
import { queueLogger } from '../logger.js';
import { EndedPollNotificationJobData } from '@/queue/types.js';
import { createNotification } from '@/services/create-notification.js';

const logger = queueLogger.createSubLogger('ended-poll-notification');

export async function endedPollNotification(job: Bull.Job<EndedPollNotificationJobData>, done: any): Promise<void> {
	const note = await Notes.findOneBy({ id: job.data.noteId });
	if (note == null || !note.hasPoll) {
		done();
		return;
	}

	const votes = await PollVotes.createQueryBuilder('vote')
		.select('vote.userId')
		.where('vote.noteId = :noteId', { noteId: note.id })
		.innerJoinAndSelect('vote.user', 'user')
		.andWhere('user.host IS NULL')
		.getMany();

	const userIds = [...new Set([note.userId, ...votes.map(v => v.userId)])];

	for (const userId of userIds) {
		createNotification(userId, 'pollEnded', {
			noteId: note.id,
		});
	}

	done();
}