feat: bootstrap auto virtual tryon admin frontend
This commit is contained in:
63
app/api/dashboard/orders-overview/route.ts
Normal file
63
app/api/dashboard/orders-overview/route.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
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,
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user