import { and, eq } from 'drizzle-orm'; import { useDb } from '~~/server/database/client'; import { expenseParticipants, expenses, participants, } from '~~/server/database/schema'; export default defineEventHandler(async (event) => { const slug = getRouterParam(event, 'slug')!; const id = Number(getRouterParam(event, 'id')); await getPotOrThrow(slug); const db = useDb(event); const [existing] = await db .select() .from(participants) .where(and(eq(participants.id, id), eq(participants.potSlug, slug))); if (!existing) { throw createError({ statusCode: 404, statusMessage: 'Participant not found', }); } const [asPayer] = await db .select() .from(expenses) .where(eq(expenses.payerId, id)) .limit(1); const [asSplit] = await db .select() .from(expenseParticipants) .where(eq(expenseParticipants.participantId, id)) .limit(1); if (asPayer || asSplit) { throw createError({ statusCode: 409, statusMessage: 'Cannot remove a participant with expenses or payments', }); } await db.delete(participants).where(eq(participants.id, id)); return { success: true }; });