import { useValidatedParams, z, zh } from 'h3-zod'; import prisma from '~~/lib/prisma'; export default defineEventHandler(async (event) => { const { huntId } = await useValidatedParams( event, z.object({ huntId: zh.numAsString }) ); const user = await getUserSession(event); const userId = user.user?.id || 0; // TODO: use one request for this logic const exists = await prisma.hunt.findUnique({ where: { id: huntId, deletedAt: null }, select: { id: true } }); if (!exists) { throw createError({ status: 404, statusText: 'Not found!' }); } const hunt = await prisma.hunt.findUnique({ where: { id: huntId, deletedAt: null, OR: [ { revealAnswers: true, revealQuests: true }, { creatorId: userId }, { members: { some: { memberId: userId } } } ] }, select: { id: true, name_de: true, name_en: true, quests: { select: { id: true, title_de: true, title_en: true, answers: { select: { team: { select: { id: true, name: true } }, picture: { select: { url: true, creator: { select: { name: true } } } } }, where: { final: true, picture: { private: false } } } }, orderBy: [ { order: 'asc' }, { id: 'asc' } ], where: { answers: { some: { final: true, picture: { private: false } } } } } } }); if (!hunt) { throw createError({ status: 403, statusText: 'Answers are not revealed yet!' }); } return hunt; });