generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" } model Order { id String @id @default(cuid()) userId Int @map("user_id") userEmail String? @map("user_email") userName String? @map("user_name") userNotes String? @map("user_notes") amount Decimal @db.Decimal(10, 2) payAmount Decimal? @db.Decimal(10, 2) @map("pay_amount") feeRate Decimal? @db.Decimal(5, 4) @map("fee_rate") rechargeCode String @unique @map("recharge_code") status OrderStatus @default(PENDING) paymentType String @map("payment_type") paymentTradeNo String? @map("payment_trade_no") payUrl String? @map("pay_url") qrCode String? @map("qr_code") qrCodeImg String? @map("qr_code_img") refundAmount Decimal? @db.Decimal(10, 2) @map("refund_amount") refundReason String? @map("refund_reason") refundAt DateTime? @map("refund_at") forceRefund Boolean @default(false) @map("force_refund") expiresAt DateTime @map("expires_at") paidAt DateTime? @map("paid_at") completedAt DateTime? @map("completed_at") failedAt DateTime? @map("failed_at") failedReason String? @map("failed_reason") createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") clientIp String? @map("client_ip") srcHost String? @map("src_host") srcUrl String? @map("src_url") // ── 订单类型 & 订阅相关 ── orderType String @default("balance") @map("order_type") planId String? @map("plan_id") plan SubscriptionPlan? @relation(fields: [planId], references: [id]) subscriptionGroupId Int? @map("subscription_group_id") subscriptionDays Int? @map("subscription_days") auditLogs AuditLog[] @@index([userId]) @@index([status]) @@index([expiresAt]) @@index([createdAt]) @@index([paidAt]) @@index([paymentType, paidAt]) @@index([orderType]) @@map("orders") } enum OrderStatus { PENDING PAID RECHARGING COMPLETED EXPIRED CANCELLED FAILED REFUNDING REFUNDED REFUND_FAILED } model AuditLog { id String @id @default(cuid()) orderId String @map("order_id") order Order @relation(fields: [orderId], references: [id]) action String detail String? @db.Text operator String? createdAt DateTime @default(now()) @map("created_at") @@index([orderId]) @@index([createdAt]) @@map("audit_logs") } // ── 渠道展示配置 ── model Channel { id String @id @default(cuid()) groupId Int @unique @map("group_id") name String platform String @default("claude") rateMultiplier Decimal @db.Decimal(10, 4) @map("rate_multiplier") description String? @db.Text models String? @db.Text features String? @db.Text sortOrder Int @default(0) @map("sort_order") enabled Boolean @default(true) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") @@index([sortOrder]) @@map("channels") } // ── 订阅套餐配置 ── model SubscriptionPlan { id String @id @default(cuid()) groupId Int @unique @map("group_id") name String description String? @db.Text price Decimal @db.Decimal(10, 2) originalPrice Decimal? @db.Decimal(10, 2) @map("original_price") validityDays Int @default(30) @map("validity_days") validityUnit String @default("day") @map("validity_unit") // day | week | month features String? @db.Text productName String? @map("product_name") forSale Boolean @default(false) @map("for_sale") sortOrder Int @default(0) @map("sort_order") createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") orders Order[] @@index([forSale, sortOrder]) @@map("subscription_plans") } // ── 系统配置 ── model SystemConfig { key String @id value String @db.Text group String @default("general") label String? updatedAt DateTime @updatedAt @map("updated_at") @@index([group]) @@map("system_configs") }