import { NextResponse } from "next/server"; import { updateTask, validateTaskPayload } from "@/lib/tasks"; export async function PATCH( request: Request, { params }: { params: Promise<{ id: string }> }, ) { const { id } = await params; const numericId = Number(id); if (!Number.isInteger(numericId) || numericId <= 0) { return NextResponse.json({ error: "invalid_task_id" }, { status: 400 }); } const payload = (await request.json()) as Record; const errors = validateTaskPayload(payload as never, true); if (errors.length > 0) { return NextResponse.json({ error: "validation_error", details: errors }, { status: 400 }); } const task = await updateTask(numericId, { title: typeof payload.title === "string" ? payload.title : undefined, description: typeof payload.description === "string" ? payload.description : undefined, assignee: typeof payload.assignee === "string" ? payload.assignee : undefined, family: payload.family === null || typeof payload.family === "string" ? (payload.family as never) : undefined, target_host: typeof payload.target_host === "string" ? payload.target_host : undefined, target_channel: typeof payload.target_channel === "string" ? payload.target_channel : undefined, dispatch_method: payload.dispatch_method as never, dispatch_state: payload.dispatch_state as never, template_key: typeof payload.template_key === "string" ? payload.template_key : undefined, repo_slug: typeof payload.repo_slug === "string" ? payload.repo_slug : undefined, base_branch: typeof payload.base_branch === "string" ? payload.base_branch : undefined, preferred_agent: typeof payload.preferred_agent === "string" ? payload.preferred_agent : undefined, reasoning_effort: typeof payload.reasoning_effort === "string" ? payload.reasoning_effort : undefined, model_hint: typeof payload.model_hint === "string" ? payload.model_hint : undefined, result_summary: payload.result_summary === null || typeof payload.result_summary === "string" ? (payload.result_summary as never) : undefined, result_detail: payload.result_detail === null || typeof payload.result_detail === "string" ? (payload.result_detail as never) : undefined, completed_by: payload.completed_by === null || typeof payload.completed_by === "string" ? (payload.completed_by as never) : undefined, priority: payload.priority as never, status: payload.status as never, last_dispatch_at: typeof payload.last_dispatch_at === "string" ? payload.last_dispatch_at : undefined, acknowledged_at: payload.acknowledged_at === null || typeof payload.acknowledged_at === "string" ? (payload.acknowledged_at as never) : undefined, last_error: payload.last_error === null || typeof payload.last_error === "string" ? (payload.last_error as never) : undefined, tags: Array.isArray(payload.tags) ? payload.tags.filter((tag) => typeof tag === "string") : undefined, }); if (!task) { return NextResponse.json({ error: "task_not_found" }, { status: 404 }); } return NextResponse.json(task); }