import { useValidatedParams, z, zh } from 'h3-zod'; import prisma from '~~/lib/prisma'; export default defineEventHandler(async (event) => { const user = await requireUserSession(event); const userId = user.user.id; const { huntId } = await useValidatedParams( event, z.object({ huntId: zh.numAsString }) ); // Find the team the user is a member of (but not the owner) const membership = await prisma.teamMember.findFirst({ where: { memberId: userId, team: { huntId, ownerId: { not: userId } } }, select: { memberId: true, teamId: true } }); if (!membership) { // Either the user has no team in this hunt, or they are the owner. // Owners cannot leave their own team (they must delete it instead). const isOwner = await prisma.huntTeam.findFirst({ where: { huntId, ownerId: userId }, select: { id: true } }); throw createError({ status: isOwner ? 403 : 404, statusText: isOwner ? 'Owner cannot leave the team!' : 'Not found!' }); } await prisma.teamMember.delete({ where: { memberId_teamId: membership } }); return { success: true }; });