diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 8354620..b050f92 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -58,6 +58,7 @@ model SubscriptionPlan { stripePriceId String? @unique // Stripe 价格 ID isActive Boolean @default(true) // 是否激活 sortOrder Int @default(0) // 排序顺序 + costMultiplier Float @default(1.0) // 费用倍率,默认1倍 // 权益配置 (JSON 格式存储) features Json // 功能特性配置 @@ -213,11 +214,11 @@ model Subscription { @@map("subscriptions") } -// AI 模型配置表 - 每个模型记录直接关联一个套餐 +// AI 模型配置表 - 所有模型默认可用于所有套餐 model Model { id String @id @default(cuid()) - subscriptionPlanId String // 关联的套餐 ID - modelId String // OpenRouter 的模型 ID,如 "openai/gpt-4" + subscriptionPlanId String @default("free") // 默认关联到 free 套餐 + modelId String @unique // 全局唯一的模型 ID,如 "openai/gpt-4" name String // 显示名称,如 "GPT-4" provider String // 提供商,如 "OpenAI" serviceProvider String @default("openrouter") // 服务提供者,如 "openrouter", "replicate" @@ -235,12 +236,8 @@ model Model { // 关联关系 subscriptionPlan SubscriptionPlan @relation(fields: [subscriptionPlanId], references: [id], onDelete: Cascade) + simulatorRuns SimulatorRun[] - // 关联关系 - simulatorRuns SimulatorRun[] - - // 同一个套餐内不能有相同的模型ID - @@unique([subscriptionPlanId, modelId]) @@map("models") } diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 79f4deb..bebfc69 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -173,6 +173,25 @@ export default function AdminDashboard() { + +
Manage subscription plans and pricing
+AI usage cost multiplier (e.g., 10.0 for free, 3.0 for pro)
+ID
+{plan.id}
+Price
++ {plan.price === 0 ? 'Free' : `$${plan.price}/${plan.interval}`} +
+Cost Multiplier
+{plan.costMultiplier}x
+Sort Order
+{plan.sortOrder}
+Users
+{plan._count.users}
+Subscriptions
+{plan._count.subscriptions}
+Models
+{plan._count.models}
+