64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import { adaptOrderSummary } from "@/lib/adapters/orders";
|
|
import { backendRequest } from "@/lib/http/backend-client";
|
|
import {
|
|
jsonSuccess,
|
|
parsePositiveIntegerParam,
|
|
withErrorHandling,
|
|
} from "@/lib/http/response";
|
|
import type { OrderListResponseDto, OrderStatus } from "@/lib/types/backend";
|
|
|
|
const MESSAGE = "订单总览当前显示真实后端最近订单。";
|
|
const DEFAULT_LIMIT = 6;
|
|
const ALLOWED_STATUS = new Set<OrderStatus>([
|
|
"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<OrderListResponseDto>(
|
|
`/orders?${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(adaptOrderSummary),
|
|
},
|
|
{
|
|
mode: "proxy",
|
|
message: MESSAGE,
|
|
},
|
|
);
|
|
});
|
|
}
|