// ============================================================================= // Admin Service - Prisma Schema // ============================================================================= generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } // ============================================================================= // App Version Management // ============================================================================= model AppVersion { id String @id @default(uuid()) platform Platform versionCode Int // Android: versionCode, iOS: CFBundleVersion versionName String // 用户可见版本号,如 "1.2.3" buildNumber String // 构建号 downloadUrl String // APK/IPA 下载地址 fileSize BigInt // 文件大小(字节) fileSha256 String // 文件 SHA-256 校验和 minOsVersion String? // 最低操作系统版本要求 changelog String // 更新日志 isForceUpdate Boolean @default(false) // 是否强制更新 isEnabled Boolean @default(true) // 是否启用 releaseDate DateTime? // 发布日期 createdAt DateTime @default(now()) updatedAt DateTime @updatedAt createdBy String // 创建人ID updatedBy String? // 更新人ID @@index([platform, isEnabled]) @@index([platform, versionCode]) @@map("app_versions") } enum Platform { ANDROID IOS } // ============================================================================= // Notification System (通知系统) // ============================================================================= /// 系统通知 - 管理员发布的公告/通知 model Notification { id String @id @default(uuid()) title String // 通知标题 content String // 通知内容 type NotificationType // 通知类型 priority NotificationPriority @default(NORMAL) // 优先级 targetType TargetType @default(ALL) // 目标用户类型 imageUrl String? // 可选的图片URL linkUrl String? // 可选的跳转链接 isEnabled Boolean @default(true) // 是否启用 publishedAt DateTime? // 发布时间(null表示草稿) expiresAt DateTime? // 过期时间(null表示永不过期) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt createdBy String // 创建人ID // 用户已读记录 readRecords NotificationRead[] @@index([isEnabled, publishedAt]) @@index([type]) @@map("notifications") } /// 用户已读记录 model NotificationRead { id String @id @default(uuid()) notificationId String userSerialNum String // 用户序列号 readAt DateTime @default(now()) notification Notification @relation(fields: [notificationId], references: [id], onDelete: Cascade) @@unique([notificationId, userSerialNum]) @@index([userSerialNum]) @@map("notification_reads") } /// 通知类型 enum NotificationType { SYSTEM // 系统通知 ACTIVITY // 活动通知 REWARD // 收益通知 UPGRADE // 升级通知 ANNOUNCEMENT // 公告 } /// 通知优先级 enum NotificationPriority { LOW NORMAL HIGH URGENT } /// 目标用户类型 enum TargetType { ALL // 所有用户 NEW_USER // 新用户 VIP // VIP用户 }