feat: add audit database and safer image review
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user