import { useValidatedBody, useValidatedParams, z, zh } from 'h3-zod'; import prisma from '~~/lib/prisma'; export default defineEventHandler(async (event) => { const user = await requireUserSession(event); const { teamId } = await useValidatedParams( event, z.object({ teamId: zh.numAsString }) ); const { userId } = await useValidatedBody( event, z.object({ userId: z.int().gt(0) }) ); const team = await prisma.huntTeam.findUnique({ where: { id: teamId, hunt: { members: { some: { memberId: user.user.id } } } }, select: { id: true, ownerId: true, huntId: true, members: { select: { memberId: true }, where: { memberId: userId }, take: 1 } } }); if (!team) { throw createError({ status: 404, statusText: 'Not found!' }); } const huntId = team.huntId; const newUser = await prisma.user.findUnique({ select: { id: 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.teamMember.create({ data: { teamId: team.id, memberId: newUser.id } }); return { success: true }; });