import { castDomainVote } from "../../../db/domains"; import { createNotification } from "../../../db/notifications"; import { getProfile } from "../../../db/profile"; import { usePrisma } from "../../../utils/prisma"; export default defineEventHandler(async (event) => { const user = await requireUser(event); const id = getRouterParam(event, "id"); if (!id) throw createError({ statusCode: 400, message: "Submission ID fehlt" }); const body = await readBody(event); const vote = body?.vote as string; if (vote !== "yes" && vote !== "no") { throw createError({ statusCode: 400, message: "vote muss 'yes' oder 'no' sein", }); } const db = usePrisma(); const [result, submission] = await Promise.all([ castDomainVote(user.id, id, vote), db.domainSubmission.findUnique({ where: { id }, select: { userId: true, domain: true }, }), ]); if ( submission?.userId && submission.userId !== user.id && (result as any).yesVotes !== undefined ) { const pr = await getProfile(user.id).catch(() => null); const actorName = pr?.nickname ?? pr?.username ?? "Jemand"; const actorAvatar = pr?.avatar ?? undefined; createNotification({ recipientId: submission.userId, type: "domain_vote", actorName, actorAvatar, preview: submission.domain, }).catch(() => {}); } return result; });