Files
splitt-the-bill/server/api/pots/[slug]/participants/[id].patch.ts
T
anbraten cbe1b42f6e
tinyedge/deploy Deployed by TinyEdge
🐛 add env to useDb and apply prettier
2026-08-07 13:28:26 +02:00

41 lines
1.2 KiB
TypeScript

import { and, eq } from 'drizzle-orm';
import { isValidPaymentLink } from '~~/shared/utils/paymentLink';
import { useDb } from '~~/server/database/client';
import { 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 body = await readBody(event);
const paymentLink =
typeof body?.paymentLink === 'string' ? body.paymentLink.trim() : '';
if (paymentLink && !isValidPaymentLink(paymentLink)) {
throw createError({
statusCode: 400,
statusMessage: 'paymentLink must be a valid http(s) URL',
});
}
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 [updated] = await db
.update(participants)
.set({ paymentLink: paymentLink || null })
.where(eq(participants.id, id))
.returning();
return updated;
});