/** * API: Model-Combo Mappings (#563) * GET — List all mappings * POST — Create a new mapping */ import { z } from "zod"; import { NextResponse } from "next/server"; import { requireManagementAuth } from "@/lib/api/requireManagementAuth"; import { getModelComboMappings, createModelComboMapping } from "@/lib/localDb"; import { validateBody, isValidationFailure } from "@/shared/validation/helpers"; const createMappingSchema = z.object({ pattern: z.string().min(1, "Pattern is required").max(500), comboId: z.string().min(1, "ComboId is required"), priority: z.number().int().optional().default(0), enabled: z.boolean().optional().default(true), description: z.string().max(1000).optional().default(""), }); export async function GET(request: Request) { const authError = await requireManagementAuth(request); if (authError) return authError; try { const mappings = await getModelComboMappings(); return NextResponse.json({ mappings }); } catch (error: any) { console.error("Failed to list model-combo mappings:", error); return NextResponse.json({ error: "Failed to list model-combo mappings" }, { status: 500 }); } } export async function POST(request: Request) { const authError = await requireManagementAuth(request); if (authError) return authError; try { const rawBody = await request.json(); const validation = validateBody(createMappingSchema, rawBody); if (isValidationFailure(validation)) { return NextResponse.json({ error: validation.error }, { status: 400 }); } const { data } = validation; const mapping = await createModelComboMapping({ pattern: data.pattern.trim(), comboId: data.comboId, priority: data.priority, enabled: data.enabled, description: data.description, }); return NextResponse.json({ mapping }, { status: 201 }); } catch (error: any) { console.error("Failed to create model-combo mapping:", error); return NextResponse.json({ error: "Failed to create model-combo mapping" }, { status: 500 }); } }