- getTenantId in shared Utility src/lib/tenant-header.ts ausgelagert (alle 4 Route-Dateien) - send/route.ts: updateCampaignStatus-Ergebnis geprüft (C1), addBulk statt sequentiellem await (C2), Suppression-Check vor Enqueue (C3) - [id]/route.ts: GET unterscheidet 404/500, PATCH unterscheidet 404/400 - schedule/route.ts: immediate-Typ abgelehnt (I4), Draft-Guard hinzugefügt (I5) - .eslintrc.json ergänzt (next/core-web-vitals) — fehlte im Projekt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
22 lines
998 B
TypeScript
22 lines
998 B
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { CreateCampaignSchema } from '../../../lib/validation'
|
|
import { createCampaign, listCampaigns } from '../../../server/db/campaigns'
|
|
import { getTenantId } from '../../../lib/tenant-header'
|
|
|
|
export async function GET(req: NextRequest) {
|
|
const tenantId = getTenantId(req)
|
|
const result = await listCampaigns(tenantId)
|
|
if (!result.ok) return NextResponse.json({ error: result.error.message }, { status: 500 })
|
|
return NextResponse.json(result.data)
|
|
}
|
|
|
|
export async function POST(req: NextRequest) {
|
|
const tenantId = getTenantId(req)
|
|
const body = await req.json()
|
|
const parsed = CreateCampaignSchema.safeParse(body)
|
|
if (!parsed.success) return NextResponse.json({ error: parsed.error.issues }, { status: 400 })
|
|
const result = await createCampaign(tenantId, parsed.data)
|
|
if (!result.ok) return NextResponse.json({ error: result.error.message }, { status: 500 })
|
|
return NextResponse.json(result.data, { status: 201 })
|
|
}
|