import { NextResponse } from "next/server"; import { auth } from "@/app/(auth)/auth"; import { getModelGenerationCreditCost } from "@/lib/ai/image-model-pricing"; import { getSystemSetting } from "@/lib/db/queries"; import { findStyleProImageModelByRef, getStyleProImageModelDisplayEntries, getStyleProImageModelEntries, toPublicStyleProModelOption, } from "@/lib/style-pro/model-options"; import { STYLE_PRO_CONFIG_KEY, normalizeStyleProConfig, } from "@/lib/style-pro/config"; export const dynamic = "force-dynamic"; export async function GET() { try { const session = await auth(); if (!session?.user?.id) { return NextResponse.json( { success: false, error: "未登录" }, { status: 401 } ); } const [displayEntries, entries, realisticModelEntries, setting] = await Promise.all([ getStyleProImageModelDisplayEntries({ includeHidden: false }), getStyleProImageModelEntries({ includeHidden: false }), getStyleProImageModelEntries({ includeHidden: true }), getSystemSetting({ key: STYLE_PRO_CONFIG_KEY }).catch(() => null), ]); const config = normalizeStyleProConfig(setting?.value); const configuredDefault = findStyleProImageModelByRef( entries, config.modelId ); const defaultEntry = configuredDefault || entries.find((entry) => entry.model.isDefault) || entries[0] || null; const realisticFirstModel = findStyleProImageModelByRef( realisticModelEntries, config.realisticFirstModelId ); const realisticSecondModel = findStyleProImageModelByRef( realisticModelEntries, config.realisticSecondModelId ); const realisticUnitCost = realisticFirstModel && realisticSecondModel ? getModelGenerationCreditCost(realisticFirstModel.model as any, "image", { imageSize: config.imageSize || "2K", }) + getModelGenerationCreditCost(realisticSecondModel.model as any, "image", { imageSize: config.imageSize || "2K", }) : 0; return NextResponse.json({ success: true, defaultModelId: defaultEntry?.model.id || null, realisticUnitCost, models: displayEntries.map(toPublicStyleProModelOption), }); } catch (error) { console.error("[Style Pro Model Options] Failed:", error); return NextResponse.json( { success: false, error: "获取风格化 PRO 生图模型失败" }, { status: 500 } ); } }