import { eq } from 'drizzle-orm'; import { z } from 'zod/v4'; import useDatabase from '~/composables/useDatabase'; import { campaignTable } from '~/db/schema'; import { CampaignValidation } from '#shared/campaign.util'; import { cryptURI } from '#shared/general.util'; export default defineEventHandler(async (e) => { const body = await readValidatedBody(e, CampaignValidation.extend({ id: z.unknown(), }).safeParse); if(!body.success) { setResponseStatus(e, 400); return body.error.message; } const session = await getUserSession(e); if(!session.user || session.user.state !== 1) { setResponseStatus(e, 401); return; } const db = useDatabase(); try { const id = db.transaction((tx) => { const id = tx.insert(campaignTable).values({ name: body.data.name, public_notes: body.data.public_notes, owner: session.user!.id, dm_notes: body.data.dm_notes, settings: body.data.settings, link: '', }).returning({ id: campaignTable.id }).get().id; tx.update(campaignTable).set({ link: cryptURI('campaign', id) }).where(eq(campaignTable.id, id)).run(); return id; }); setResponseStatus(e, 201); return id; } catch(_e) { console.error(_e); setResponseStatus(e, 500); return; } });