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 { huntId } = await useValidatedParams( event, z.object({ huntId: zh.numAsString }) ); const { userId } = await useValidatedBody( event, z.object({ userId: z.int().gt(0) }) ); const hunt = await prisma.hunt.findUnique({ where: { id: huntId, OR: [ { creatorId: user.user.id }, { members: { some: { memberId: user.user.id } } } ] }, select: { id: true, members: { select: { memberId: true }, where: { memberId: userId }, take: 1 } } }); if (!hunt) { throw createError({ status: 404, statusText: 'Not found!' }); } const newUser = await prisma.user.findUnique({ select: { id: true, role: true }, where: { id: userId, teamsOwner: { none: { huntId } }, teamsMember: { none: { team: { huntId } } }, huntsMember: { none: { huntId } }, huntsCreated: { none: { id: huntId } } } }); if (!newUser) { throw createError({ status: 409, statusText: 'User is already member!' }); } await prisma.huntMember.create({ data: { huntId: hunt.id, memberId: newUser.id } }); if (newUser.role !== 'ADMIN') { await prisma.user.update({ where: { id: newUser.id }, data: { role: 'ADMIN' } }); } return { success: true }; });