import type { UpdateWorkOrderInput } from "@/lib/work-orders/schemas"; import { requireApiContext } from "@/server/api/context"; import { json, optionalVersion, readJsonObject, withApi } from "@/server/api/respond"; import { computeCompletionBlockers } from "@/server/services/work-orders/completion"; import { availableTransitions, getWorkOrderDetail } from "@/server/services/work-orders/detail"; import { updateWorkOrder } from "@/server/services/work-orders/update"; type Params = { params: Promise<{ id: string }> }; /** GET /api/v1/work-orders/[id] — detail incl. transitions available to the caller and completion blockers. */ export const GET = withApi(async (_req: Request, { params }: Params) => { const ctx = await requireApiContext("work_orders"); const { id } = await params; const wo = await getWorkOrderDetail(ctx, id); const blockers = await computeCompletionBlockers(ctx, id); return json({ workOrder: wo, availableTransitions: availableTransitions(ctx, wo.status), completionBlockers: blockers }); }); /** PATCH /api/v1/work-orders/[id] — body: partial master data + optional baseVersion (409 on mismatch). */ export const PATCH = withApi(async (req: Request, { params }: Params) => { const ctx = await requireApiContext("work_orders"); const { id } = await params; const { baseVersion, ...patch } = await readJsonObject(req); return json(await updateWorkOrder(ctx, id, patch as UpdateWorkOrderInput, optionalVersion(baseVersion))); });