import { eq } from 'drizzle-orm'; import useDatabase from '~/composables/useDatabase'; import { campaignTable } from '~/db/schema'; import { CampaignValidation } from '#shared/campaign.util'; export default defineEventHandler(async (e) => { const params = getRouterParam(e, "id"); if(!params) { setResponseStatus(e, 400); return; } const id = parseInt(params, 10); const body = await readValidatedBody(e, CampaignValidation.safeParse); if(!body.success) { setResponseStatus(e, 400); return body.error.message; } const db = useDatabase(); const old = db.select({ id: campaignTable.id, owner: campaignTable.owner }).from(campaignTable).where(eq(campaignTable.id, id)).get(); if(!old) { setResponseStatus(e, 404); return; } const session = await getUserSession(e); if(!session.user || old.owner !== session.user.id || session.user.state !== 1) { setResponseStatus(e, 401); return; } try { db.transaction((tx) => { tx.update(campaignTable).set({ name: body.data.name, public_notes: body.data.public_notes, dm_notes: body.data.dm_notes, settings: body.data.settings, }).where(eq(campaignTable.id, id)).run(); }); } catch(_e) { setResponseStatus(e, 500); return; } setResponseStatus(e, 200); return; });