Some checks failed
CI / validate (push) Has been cancelled
Co-authored-by: multica-agent <github@multica.ai>
28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
import { z } from 'zod'
|
|
import { requireCampaignAccess, requireStageTwoSafeText, stageTwoApiError, stageTwoDatabase, stageTwoUuid } from '~/server/utils/stage-two-supabase'
|
|
import { requireStageTwoUser } from '~/server/utils/stage-two-supabase'
|
|
|
|
const PatchBodySchema = z.object({
|
|
title: z.string().trim().min(1).max(200),
|
|
}).strict()
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
const user = await requireStageTwoUser(event)
|
|
const campaignId = stageTwoUuid(event.context.params?.id ?? '')
|
|
await requireCampaignAccess(campaignId, user.id, true)
|
|
const body = PatchBodySchema.parse(await readBody(event))
|
|
requireStageTwoSafeText(body.title)
|
|
|
|
const campaigns = await stageTwoDatabase<Array<Record<string, unknown>>>(`campaigns?id=eq.${campaignId}&limit=1`, {
|
|
method: 'PATCH',
|
|
body: JSON.stringify({ title: body.title, updated_at: new Date().toISOString() }),
|
|
prefer: 'return=representation',
|
|
})
|
|
if (!campaigns[0]) throw createError({ statusCode: 404, statusMessage: 'Campaign not found.' })
|
|
return { campaign: campaigns[0] }
|
|
} catch (error) {
|
|
stageTwoApiError(error)
|
|
}
|
|
})
|