69 lines
2.2 KiB
Plaintext
69 lines
2.2 KiB
Plaintext
// 主数据库 Schema - 用于管理项目和用户
|
||
// 数据库名建议:license-server-main
|
||
|
||
generator client {
|
||
provider = "prisma-client-js"
|
||
binaryTargets = ["native", "linux-musl", "debian-openssl-3.0.x"]
|
||
output = "../node_modules/.prisma/main-client"
|
||
}
|
||
|
||
datasource db {
|
||
provider = "postgresql"
|
||
url = env("MAIN_DATABASE_URL")
|
||
}
|
||
|
||
// 项目表
|
||
model Project {
|
||
id String @id @default(uuid())
|
||
code String @unique @map("code") // 项目唯一标识,如 flnxi-sucai
|
||
name String @map("name") // 显示名称
|
||
description String? @map("description")
|
||
|
||
// 数据库连接配置
|
||
dbHost String @map("db_host") // 数据库主机
|
||
dbPort Int @default(5432) @map("db_port") // 数据库端口
|
||
dbName String @map("db_name") // 数据库名
|
||
dbUser String @map("db_user") // 数据库用户
|
||
dbPassword String @map("db_password") // 数据库密码(AES加密存储)
|
||
dbSchema String @default("public") @map("db_schema")
|
||
|
||
// 项目状态
|
||
isActive Boolean @default(true) @map("is_active")
|
||
createdAt DateTime @default(now()) @map("created_at")
|
||
updatedAt DateTime @updatedAt @map("updated_at")
|
||
|
||
// 关联
|
||
adminProjects AdminProject[]
|
||
|
||
@@map("projects")
|
||
}
|
||
|
||
// 管理员表
|
||
model Admin {
|
||
id String @id @default(uuid())
|
||
username String @unique
|
||
passwordHash String @map("password_hash")
|
||
isSuperAdmin Boolean @default(false) @map("is_super_admin") // 超管可访问所有项目
|
||
createdAt DateTime @default(now()) @map("created_at")
|
||
updatedAt DateTime @updatedAt @map("updated_at")
|
||
|
||
// 关联
|
||
adminProjects AdminProject[]
|
||
|
||
@@map("admins")
|
||
}
|
||
|
||
// 管理员-项目权限关联表
|
||
model AdminProject {
|
||
adminId String @map("admin_id")
|
||
projectId String @map("project_id")
|
||
role String @default("admin") // admin / viewer
|
||
createdAt DateTime @default(now()) @map("created_at")
|
||
|
||
admin Admin @relation(fields: [adminId], references: [id], onDelete: Cascade)
|
||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||
|
||
@@id([adminId, projectId])
|
||
@@map("admin_projects")
|
||
}
|