Files
FrozenFriendsYume/packages/backend/built/queue/queues/ended-poll-notification.js
T
2026-07-26 18:25:37 +09:00

36 lines
1.3 KiB
JavaScript

import { Notes, PollVotes } from "../../models/index.js";
import { createNotification } from "../../services/create-notification.js";
import { deliverQuestionUpdate } from "../../services/note/polls/update.js";
import { createQueue } from "./index.js";
async function process(job) {
if (job.data == null || Object.keys(job.data).length === 0) {
job.opts.removeOnComplete = true;
return "skip: corrupt job";
}
const note = await Notes.findOneBy({
id: job.data.noteId
});
if (note == null || !note.hasPoll) {
return "skip: note not found";
}
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", {
note: note,
noteId: note.id
});
}
// Broadcast the poll result once it ends
if (!note.localOnly) await deliverQuestionUpdate(note.id);
return "complete";
}
export const [endedPollNotificationQueue, endedPollNotificationInit] = createQueue("endedPollNotification", process);