flnxi-Wu/prisma/schema.prisma
WuYongJie 8705b9846a
Some checks failed
CI Check / check (push) Has been cancelled
feat: 统一弹窗样式系统与分类管理优化
- 创建统一的Modal组件,采用Apple风格设计
- 实现毛玻璃效果、圆角、动画和细边框描边
- 修复弹窗打开时背景滚动问题
- 修复分类管理中重复卡片和数组字符串显示问题
- 优化选项解析逻辑,添加去重和过滤机制
2025-11-25 09:37:00 +08:00

237 lines
7.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "linux-musl-openssl-3.0.x"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum Role {
USER
ADMIN
}
model User {
id String @id @default(uuid())
email String @unique
username String @unique
password String
role Role @default(USER)
isActive Boolean @default(false)
canDownload Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
department String @default("")
dingtalkUserId String? @unique
loginType String @default("normal")
realName String?
phone String? @unique
avatar String?
managedDepartment String?
isSuperAdmin Boolean @default(false)
parentId String?
likes MaterialLike[]
materials Material[]
parent User? @relation("UserHierarchy", fields: [parentId], references: [id])
children User[] @relation("UserHierarchy")
@@map("users")
}
model UploadTemplate {
id String @id @default(uuid())
name String
description String?
status String @default("draft")
materialType String @default("其他")
version Int @default(1)
fieldGroups String?
displayConfig String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
fields UploadField[]
materials Material[]
}
model UploadField {
id String @id @default(uuid())
templateId String
key String
label String
type String
required Boolean @default(false)
orderIndex Int @default(0)
layoutWidth String?
validations String?
optionsSource String?
optionsStatic String?
allowedExtensions String?
visibleOnHomeFilter Boolean @default(false)
isSearchable Boolean @default(false)
isReadOnly Boolean @default(false)
addToCategory Boolean @default(false)
conditions String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
template UploadTemplate @relation(fields: [templateId], references: [id], onDelete: Cascade)
}
model FilterItem {
id String @id @default(uuid())
fieldKey String
label String
group String?
orderIndex Int @default(0)
multiSelect Boolean @default(false)
showOnHome Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Material {
id String @id @default(uuid())
previewUrl String
productModel String
brandName String?
seriesName String?
skuCode String?
materialTexture String?
categoryName String
sceneName String
materialType String @default("3DMAX")
renderer String @default("CR")
renderTime String?
imageResolution String?
colorMode String?
authorName String
zipFileName String @default("")
zipFilePath String @default("")
zipFileSize BigInt @default(0)
downloadCount Int @default(0)
likeCount Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
userId String
displayImages String @default("")
platformName String @default("")
metadata String?
templateId String?
likes MaterialLike[]
template UploadTemplate? @relation(fields: [templateId], references: [id])
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId])
@@index([createdAt])
@@index([categoryName])
@@index([sceneName])
@@index([platformName])
@@index([materialType])
@@index([downloadCount])
@@index([likeCount])
@@map("materials")
}
model MaterialLike {
id String @id @default(uuid())
materialId String
userId String
createdAt DateTime @default(now())
material Material @relation(fields: [materialId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([materialId, userId])
@@index([materialId])
@@index([userId])
@@map("material_likes")
}
model Category {
id String @id @default(uuid())
name String @unique
options String? // JSON array of options for dropdown
createdAt DateTime @default(now())
@@map("categories")
}
model Scene {
id String @id @default(uuid())
name String @unique
options String? // JSON array of options for dropdown
createdAt DateTime @default(now())
@@map("scenes")
}
model Platform {
id String @id @default(uuid())
name String @unique
options String? // JSON array of options for dropdown
createdAt DateTime @default(now())
@@map("platforms")
}
model SystemSettings {
id String @id @default(uuid())
headerBgColor String @default("#1f2937")
siteName String @default("由壹点3D素材")
updatedAt DateTime @updatedAt
createdAt DateTime @default(now())
headerLogoUrl String @default("http://s3.1080p.hk/shuzhou/2025/05/18/8ebadf0a7cc34eaea00e8619b8efb827.png")
loginLogoUrl String @default("http://s3.1080p.hk/shuzhou/2025/05/18/8ebadf0a7cc34eaea00e8619b8efb827.png")
s3AccessKey String @default("")
s3Bucket String @default("")
s3Endpoint String @default("")
s3PublicUrl String @default("")
s3Region String @default("us-east-1")
s3SecretKey String @default("")
enableRegistration Boolean @default(true)
enableUserActivation Boolean @default(false)
enableAiImageEdit Boolean @default(false)
enableTunnelService Boolean @default(false)
enabledBuiltinTemplates String? // JSON array of enabled builtin template keys (empty array or null = all enabled)
categoryManagedFields String? // JSON array,记录分类管理已启用的字段 key
@@map("system_settings")
}
model Department {
id String @id @default(uuid())
name String @unique
createdAt DateTime @default(now())
@@map("departments")
}
model Danmaku {
id String @id @default(uuid())
content String
username String
userId String
createdAt DateTime @default(now())
@@index([createdAt])
@@map("danmakus")
}
model Invitation {
id String @id @default(uuid())
code String @unique
createdBy String
usedBy String?
usedAt DateTime?
expiresAt DateTime?
maxUses Int @default(1)
currentUses Int @default(0)
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([code])
@@index([createdBy])
@@map("invitations")
}