import { useValidatedBody, useValidatedParams, z, zh } from 'h3-zod'; import prisma from '~~/lib/prisma'; export default defineEventHandler(async (event) => { const user = await requireUserSession(event); if (user.user.role !== 'ADMIN') { throw createError({ status: 403, statusText: 'Not allowed!' }); } const userId = user.user.id; const { answerId } = await useValidatedParams( event, z.object({ answerId: zh.numAsString }) ); const answer = await prisma.questAnswer.findUnique({ where: { id: answerId, OR: [ { quest: { hunt: { creatorId: userId } } }, { quest: { hunt: { members: { some: { memberId: userId } } } } } ] }, select: { id: true } }); if (!answer) { throw createError({ status: 404, statusText: 'Not found!' }); } const data = await useValidatedBody( event, z.object({ score: z.int().min(0).max(32767).nullable(), review: z.string().max(2000).trim().nullable(), showcase: z.boolean().nullable().default(false), internalNote: z.string().max(256).trim().nullable(), rankingValue: z.int().nullable() }) ); await prisma.review.upsert({ where: { answerId }, update: { ...data, reviewerId: userId }, create: { ...data, reviewerId: userId, answerId } }); return answer; });