75 lines
2.8 KiB
TypeScript
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 },
|
|
);
|
|
}
|
|
}
|