auto-save 2026-05-19 00:01 (~8)
This commit is contained in:
@@ -42,43 +42,3 @@ export async function POST(req: Request) {
|
||||
return NextResponse.json({ error: String(error) }, { status: 500 });
|
||||
}
|
||||
}
|
||||
import { NextResponse } from 'next/server';
|
||||
import { buildCharacterSpec } from '@/lib/packGenerator';
|
||||
import { detectProvider } from '@/lib/providers';
|
||||
import { loadSession, saveSession } from '@/lib/storage';
|
||||
import type { LockCharacterRequest, LockCharacterResponse } from '@/lib/types';
|
||||
|
||||
export const runtime = 'nodejs';
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const { sessionId, imageId, force = false } = (await req.json()) as LockCharacterRequest;
|
||||
if (!sessionId || !imageId) {
|
||||
return NextResponse.json({ error: 'sessionId and imageId required' }, { status: 400 });
|
||||
}
|
||||
|
||||
const session = await loadSession(sessionId);
|
||||
if (!session) return NextResponse.json({ error: 'session not found' }, { status: 404 });
|
||||
|
||||
const sourceImage = session.images.find(image => image.id === imageId);
|
||||
if (!sourceImage) return NextResponse.json({ error: 'image not found' }, { status: 404 });
|
||||
|
||||
if (!force && session.characterSpec?.sourceImageId === imageId) {
|
||||
return NextResponse.json({
|
||||
characterSpec: session.characterSpec,
|
||||
provider: detectProvider(),
|
||||
} satisfies LockCharacterResponse);
|
||||
}
|
||||
|
||||
try {
|
||||
const characterSpec = await buildCharacterSpec(session, sourceImage);
|
||||
session.characterSpec = characterSpec;
|
||||
await saveSession(session);
|
||||
return NextResponse.json({
|
||||
characterSpec,
|
||||
provider: detectProvider(),
|
||||
} satisfies LockCharacterResponse);
|
||||
} catch (error) {
|
||||
return NextResponse.json({ error: String(error) }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,46 +8,6 @@ export const dynamic = 'force-dynamic';
|
||||
|
||||
const PACK_KINDS: PackKind[] = ['patent', 'production', 'marketing'];
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const body = (await req.json()) as GeneratePackRequest;
|
||||
const { sessionId, imageId, kind } = body;
|
||||
|
||||
if (!sessionId || !imageId || !PACK_KINDS.includes(kind)) {
|
||||
return NextResponse.json({ error: 'sessionId, imageId and valid kind required' }, { status: 400 });
|
||||
}
|
||||
|
||||
const session = await loadSession(sessionId);
|
||||
if (!session) return NextResponse.json({ error: 'session not found' }, { status: 404 });
|
||||
|
||||
const sourceImage = session.images.find(image => image.id === imageId);
|
||||
if (!sourceImage) return NextResponse.json({ error: 'image not found' }, { status: 404 });
|
||||
|
||||
try {
|
||||
const { pack, manifest, provider } = await generateAssetPack({ session, sourceImage, kind });
|
||||
const packs = (session.packs ?? []).filter(item => !(item.kind === kind && item.sourceImageId === imageId));
|
||||
const exports = (session.exports ?? []).filter(item => !(item.packKind === kind && item.source.sourceImageId === imageId));
|
||||
|
||||
session.characterSpec = pack.characterSpec;
|
||||
session.packs = [...packs, pack];
|
||||
session.exports = [...exports, manifest];
|
||||
await saveSession(session);
|
||||
|
||||
const response: GeneratePackResponse = { pack, manifest, provider };
|
||||
return NextResponse.json(response);
|
||||
} catch (error) {
|
||||
return NextResponse.json({ error: String(error) }, { status: 500 });
|
||||
}
|
||||
}
|
||||
import { NextResponse } from 'next/server';
|
||||
import { generateAssetPack } from '@/lib/packGenerator';
|
||||
import { loadSession, saveSession } from '@/lib/storage';
|
||||
import type { GeneratePackRequest, GeneratePackResponse, PackKind } from '@/lib/types';
|
||||
|
||||
export const runtime = 'nodejs';
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
const PACK_KINDS: PackKind[] = ['patent', 'production', 'marketing'];
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const { sessionId, imageId, kind } = (await req.json()) as GeneratePackRequest;
|
||||
if (!sessionId || !imageId || !PACK_KINDS.includes(kind)) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
PACK_LABELS,
|
||||
PACK_ORDER,
|
||||
PACK_TEMPLATES,
|
||||
TEMPLATE_FREEZE_VERSION,
|
||||
VIDEO_TEMPLATES,
|
||||
} from '@/lib/templates';
|
||||
|
||||
@@ -13,6 +14,7 @@ export const dynamic = 'force-dynamic';
|
||||
|
||||
export async function GET() {
|
||||
return NextResponse.json({
|
||||
templateFreezeVersion: TEMPLATE_FREEZE_VERSION,
|
||||
filenameSchema: FILENAME_SCHEMA,
|
||||
characterSpecFields: CHARACTER_SPEC_FIELDS,
|
||||
packs: PACK_ORDER.map(kind => ({
|
||||
|
||||
@@ -107,6 +107,7 @@ export type ExportManifest = {
|
||||
version: string;
|
||||
createdAt: number;
|
||||
filenameSchema: string;
|
||||
templateFreezeVersion: string;
|
||||
source: {
|
||||
prompt: string;
|
||||
sourceImageId: string;
|
||||
|
||||
Reference in New Issue
Block a user