import { adaptWorkflowLookupItem } from "@/lib/adapters/workflows"; import { backendRequest } from "@/lib/http/backend-client"; import { jsonSuccess, parsePositiveIntegerParam, withErrorHandling, } from "@/lib/http/response"; import type { OrderStatus, WorkflowListResponseDto } from "@/lib/types/backend"; const MESSAGE = "流程追踪首页当前显示真实后端最近流程。"; const DEFAULT_LIMIT = 8; const ALLOWED_STATUS = new Set([ "created", "running", "waiting_review", "succeeded", "failed", "cancelled", ]); export async function GET(request: Request) { return withErrorHandling(async () => { const url = new URL(request.url); const pageParam = url.searchParams.get("page"); const limitParam = url.searchParams.get("limit"); const queryParam = url.searchParams.get("query")?.trim(); const statusParam = url.searchParams.get("status")?.trim(); const params = new URLSearchParams({ page: String( pageParam ? parsePositiveIntegerParam(pageParam, "page") : 1, ), limit: String( limitParam ? parsePositiveIntegerParam(limitParam, "limit") : DEFAULT_LIMIT, ), }); if (statusParam && ALLOWED_STATUS.has(statusParam as OrderStatus)) { params.set("status", statusParam); } if (queryParam) { params.set("query", queryParam); } const response = await backendRequest( `/workflows?${params.toString()}`, ); return jsonSuccess( { page: response.data.page, limit: response.data.limit, total: response.data.total, totalPages: response.data.total_pages, items: response.data.items.map(adaptWorkflowLookupItem), }, { mode: "proxy", message: MESSAGE, }, ); }); }