import { jsonError, jsonOk } from "@/lib/server/api"; import { requireAdminSession } from "@/lib/server/auth/current-user"; import { listPlatformOrganizations } from "@/lib/server/account-store"; import { hasSuperAdminAccess } from "@/lib/auth/permissions"; import { getAdminUsageReport } from "@/lib/server/usage-service"; import type { GenerationCapability, GenerationProvider } from "@/lib/types"; export const runtime = "nodejs"; export const dynamic = "force-dynamic"; export async function GET(request: Request) { try { const session = await requireAdminSession(); const url = new URL(request.url); const isSuperAdmin = hasSuperAdminAccess(session.user); const organizations = (await listPlatformOrganizations({ includeDisabled: isSuperAdmin })) .filter((organization) => isSuperAdmin || organization.id === session.user.organizationId) .map((organization) => ({ organizationId: organization.id, organizationName: organization.name })); const report = await getAdminUsageReport({ startDate: optionalParam(url, "startDate"), endDate: optionalParam(url, "endDate"), organizationId: isSuperAdmin ? optionalParam(url, "organizationId") : session.user.organizationId, ownerId: isSuperAdmin ? optionalParam(url, "ownerId") : undefined, capability: parseCapability(optionalParam(url, "capability")), provider: parseProvider(optionalParam(url, "provider")) }, organizations); if (isSuperAdmin) return jsonOk(report); return jsonOk({ ...report, accounts: [], recent: [], options: { ...report.options, accounts: [] } }); } catch (error) { return jsonError(error, 500, { request, source: "api.admin.usage", logClientErrors: true }); } } function optionalParam(url: URL, name: string): string | undefined { return url.searchParams.get(name)?.trim() || undefined; } function parseCapability(value?: string): GenerationCapability | undefined { if (!value) return undefined; if (value === "image.generate" || value === "video.generate") { return value; } throw badRequest("不支持的功能类型。"); } function parseProvider(value?: string): GenerationProvider | undefined { if (!value) return undefined; if (value === "volcengine-visual" || value === "evolink" || value === "seedance" || value === "bailian") { return value; } throw badRequest("不支持的服务商。"); } function badRequest(message: string): Error & { status: number } { return Object.assign(new Error(message), { status: 400 }); }