Your Name b4698be089
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
feat: add external image generation api
2026-05-18 15:56:08 +08:00

75 lines
2.8 KiB
TypeScript

import { desc, eq } from "drizzle-orm";
import { NextResponse } from "next/server";
import { requireAdmin } from "@/lib/middleware/admin";
import { db } from "@/lib/db";
import { externalImageApiRequestLog, user } from "@/lib/db/schema";
import { ChatSDKError } from "@/lib/errors";
export const runtime = "nodejs";
export const maxDuration = 60;
export async function GET(request: Request) {
try {
await requireAdmin();
const { searchParams } = new URL(request.url);
const limit = Math.min(
100,
Math.max(1, Number.parseInt(searchParams.get("limit") || "50", 10)),
);
const rows = await db
.select({
id: externalImageApiRequestLog.id,
apiKeyId: externalImageApiRequestLog.apiKeyId,
apiKeyName: externalImageApiRequestLog.apiKeyName,
ownerUserId: externalImageApiRequestLog.ownerUserId,
ownerUserEmail: user.email,
ownerUserName: user.name,
modelDbId: externalImageApiRequestLog.modelDbId,
modelRuntimeId: externalImageApiRequestLog.modelRuntimeId,
modelDisplayName: externalImageApiRequestLog.modelDisplayName,
prompt: externalImageApiRequestLog.prompt,
negativePrompt: externalImageApiRequestLog.negativePrompt,
imageCount: externalImageApiRequestLog.imageCount,
aspectRatio: externalImageApiRequestLog.aspectRatio,
imageSize: externalImageApiRequestLog.imageSize,
status: externalImageApiRequestLog.status,
requesterIp: externalImageApiRequestLog.requesterIp,
requesterUserAgent: externalImageApiRequestLog.requesterUserAgent,
requestPayload: externalImageApiRequestLog.requestPayload,
responsePayload: externalImageApiRequestLog.responsePayload,
generatedImageIds: externalImageApiRequestLog.generatedImageIds,
generatedAssetIds: externalImageApiRequestLog.generatedAssetIds,
generatedImageUrls: externalImageApiRequestLog.generatedImageUrls,
errorMessage: externalImageApiRequestLog.errorMessage,
durationMs: externalImageApiRequestLog.durationMs,
createdAt: externalImageApiRequestLog.createdAt,
completedAt: externalImageApiRequestLog.completedAt,
})
.from(externalImageApiRequestLog)
.leftJoin(user, eq(externalImageApiRequestLog.ownerUserId, user.id))
.orderBy(desc(externalImageApiRequestLog.createdAt))
.limit(limit);
return NextResponse.json({
success: true,
data: {
logs: rows,
},
});
} catch (error) {
if (error instanceof ChatSDKError) {
return error.toResponse();
}
console.error("[Admin External Image API Logs] GET failed:", error);
return NextResponse.json(
{
success: false,
error: error instanceof Error ? error.message : "获取日志失败",
},
{ status: 500 },
);
}
}