iceshrimp/packages/backend/src/queue/processors/ended-poll-notification.ts

37 lines
1.0 KiB
TypeScript
Raw Normal View History

2023-01-13 13:40:33 +09:00
import type Bull from "bull";
import { In } from "typeorm";
import { Notes, Polls, PollVotes } from "@/models/index.js";
import { queueLogger } from "../logger.js";
import type { EndedPollNotificationJobData } from "@/queue/types.js";
import { createNotification } from "@/services/create-notification.js";
2023-01-13 13:40:33 +09:00
const logger = queueLogger.createSubLogger("ended-poll-notification");
2023-01-13 13:40:33 +09:00
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;
}
2023-01-13 13:40:33 +09:00
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();
2023-01-13 13:40:33 +09:00
const userIds = [...new Set([note.userId, ...votes.map((v) => v.userId)])];
for (const userId of userIds) {
2023-01-13 13:40:33 +09:00
createNotification(userId, "pollEnded", {
noteId: note.id,
});
}
done();
}