feat: add audit database and safer image review

This commit is contained in:
2026-05-19 14:31:16 +08:00
parent 8ddda6aa2b
commit 9ab7756369
23 changed files with 1159 additions and 64 deletions

View File

@@ -1,5 +1,6 @@
import { NextResponse } from 'next/server';
import { randomBytes } from 'node:crypto';
import { recordEvent } from '@/lib/auditDb';
import { detectProvider, generateGptImages, generateMock } from '@/lib/providers';
import { saveSession, saveGeneratedImage, saveRefImage } from '@/lib/storage';
import type { GenerateRequest, GenerateResponse, GenSession } from '@/lib/types';
@@ -18,6 +19,15 @@ export async function POST(req: Request) {
const sessionId = `s_${Date.now().toString(36)}_${randomBytes(3).toString('hex')}`;
const finalPrompt = style ? `${prompt}, style: ${style}` : prompt;
const provider = detectProvider();
recordEvent({
action: 'idea.generate_started',
sessionId,
targetType: 'session',
targetId: sessionId,
status: 'started',
provider,
metadata: { count, refImages: refImages.length, style: style ?? null, promptLength: finalPrompt.length },
});
const savedRefUrls: string[] = [];
for (let i = 0; i < refImages.length; i++) {
@@ -35,6 +45,16 @@ export async function POST(req: Request) {
? await generateGptImages({ sessionId, prompt: finalPrompt, count, refImages: savedRefUrls })
: await generateMock({ sessionId, prompt: finalPrompt, count });
} catch (e) {
recordEvent({
action: 'idea.generate_failed',
sessionId,
targetType: 'session',
targetId: sessionId,
status: 'error',
provider,
message: String(e),
metadata: { count },
});
return NextResponse.json({ error: String(e) }, { status: 500 });
}
@@ -56,6 +76,15 @@ export async function POST(req: Request) {
images,
};
await saveSession(session);
recordEvent({
action: 'idea.generate_completed',
sessionId,
targetType: 'session',
targetId: sessionId,
status: 'ok',
provider,
metadata: { images: images.length },
});
const resp: GenerateResponse = { sessionId, images, provider };
return NextResponse.json(resp);