32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import { regeneratePackAsset } from '@/lib/packGenerator';
|
|
import { loadSession, saveSession } from '@/lib/storage';
|
|
import type { RegenerateAssetRequest, RegenerateAssetResponse } from '@/lib/types';
|
|
|
|
export const runtime = 'nodejs';
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
export async function POST(req: Request, ctx: { params: Promise<{ assetId: string }> }) {
|
|
const { assetId } = await ctx.params;
|
|
const { sessionId, userRefinement } = (await req.json()) as RegenerateAssetRequest;
|
|
|
|
if (!assetId || !sessionId) {
|
|
return NextResponse.json({ error: 'assetId and sessionId required' }, { status: 400 });
|
|
}
|
|
|
|
const session = await loadSession(sessionId);
|
|
if (!session) return NextResponse.json({ error: 'session not found' }, { status: 404 });
|
|
|
|
try {
|
|
const regenerated = await regeneratePackAsset({ session, assetId, userRefinement });
|
|
await saveSession(session);
|
|
return NextResponse.json({
|
|
asset: regenerated.asset,
|
|
pack: regenerated.pack,
|
|
provider: regenerated.provider,
|
|
} satisfies RegenerateAssetResponse);
|
|
} catch (error) {
|
|
return NextResponse.json({ error: String(error) }, { status: 500 });
|
|
}
|
|
}
|