generated from corrad-software/corrad-af-2024
271 lines
11 KiB
Plaintext
271 lines
11 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "mysql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model audit {
|
|
auditID Int @id @default(autoincrement())
|
|
auditIP String? @db.VarChar(255)
|
|
auditURL String? @db.VarChar(255)
|
|
auditURLMethod String? @db.VarChar(255)
|
|
auditURLPayload String? @db.VarChar(255)
|
|
auditCreatedDate DateTime? @db.DateTime(0)
|
|
}
|
|
|
|
model lookup {
|
|
lookupID Int @id @default(autoincrement())
|
|
lookupOrder Int?
|
|
lookupTitle String? @db.VarChar(255)
|
|
lookupRefCode String? @db.VarChar(255)
|
|
lookupValue String? @db.VarChar(255)
|
|
lookupType String? @db.VarChar(255)
|
|
lookupStatus String? @db.VarChar(255)
|
|
lookupCreatedDate DateTime? @db.DateTime(0)
|
|
lookupModifiedDate DateTime? @db.DateTime(0)
|
|
}
|
|
|
|
model role {
|
|
roleID Int @id @default(autoincrement())
|
|
roleName String? @db.VarChar(255)
|
|
roleDescription String? @db.VarChar(255)
|
|
roleStatus String? @db.VarChar(255)
|
|
roleCreatedDate DateTime? @db.DateTime(0)
|
|
roleModifiedDate DateTime? @db.DateTime(0)
|
|
userrole userrole[]
|
|
permissions AccessPermission[]
|
|
}
|
|
|
|
model user {
|
|
userID Int @id @default(autoincrement())
|
|
userSecretKey String? @db.VarChar(255)
|
|
userUsername String? @db.VarChar(255)
|
|
userPassword String? @db.VarChar(255)
|
|
userFullName String? @db.VarChar(255)
|
|
userEmail String? @db.VarChar(255)
|
|
userPhone String? @db.VarChar(255)
|
|
userStatus String? @db.VarChar(255)
|
|
userCreatedDate DateTime? @db.DateTime(0)
|
|
userModifiedDate DateTime? @db.DateTime(0)
|
|
userrole userrole[]
|
|
accessRequests AccessRequest[]
|
|
permissions AccessPermission[]
|
|
documents Document[] @relation("DocumentCreator")
|
|
cabinets Cabinet[] @relation("CabinetCreator")
|
|
drawers Drawer[] @relation("DrawerCreator")
|
|
folders Folder[] @relation("FolderCreator")
|
|
subfolders Subfolder[] @relation("SubfolderCreator")
|
|
}
|
|
|
|
model userrole {
|
|
userRoleID Int @id @default(autoincrement())
|
|
userRoleUserID Int @default(0)
|
|
userRoleRoleID Int @default(0)
|
|
userRoleCreatedDate DateTime @db.DateTime(0)
|
|
role role @relation(fields: [userRoleRoleID], references: [roleID], onDelete: NoAction, onUpdate: NoAction, map: "FK_userrole_role")
|
|
user user @relation(fields: [userRoleUserID], references: [userID], onDelete: NoAction, onUpdate: NoAction, map: "FK_userrole_user")
|
|
|
|
@@index([userRoleRoleID], map: "FK_userrole_role")
|
|
@@index([userRoleUserID], map: "FK_userrole_user")
|
|
}
|
|
|
|
model site_settings {
|
|
settingID Int @id @default(autoincrement())
|
|
siteName String? @db.VarChar(255)
|
|
siteNameFontSize Int? @default(18)
|
|
siteDescription String? @db.Text
|
|
siteLogo String? @db.VarChar(500)
|
|
siteLoadingLogo String? @db.VarChar(500)
|
|
siteFavicon String? @db.VarChar(500)
|
|
showSiteNameInHeader Boolean? @default(true)
|
|
primaryColor String? @db.VarChar(50)
|
|
secondaryColor String? @db.VarChar(50)
|
|
successColor String? @db.VarChar(50)
|
|
infoColor String? @db.VarChar(50)
|
|
warningColor String? @db.VarChar(50)
|
|
dangerColor String? @db.VarChar(50)
|
|
customCSS String? @db.Text
|
|
themeMode String? @db.VarChar(50)
|
|
customThemeFile String? @db.VarChar(500)
|
|
currentFont String? @db.VarChar(255)
|
|
fontSource String? @db.VarChar(500)
|
|
seoTitle String? @db.VarChar(255)
|
|
seoDescription String? @db.Text
|
|
seoKeywords String? @db.Text
|
|
seoAuthor String? @db.VarChar(255)
|
|
seoOgImage String? @db.VarChar(500)
|
|
seoTwitterCard String? @default("summary_large_image") @db.VarChar(50)
|
|
seoCanonicalUrl String? @db.VarChar(500)
|
|
seoRobots String? @default("index, follow") @db.VarChar(100)
|
|
seoGoogleAnalytics String? @db.VarChar(255)
|
|
seoGoogleTagManager String? @db.VarChar(255)
|
|
seoFacebookPixel String? @db.VarChar(255)
|
|
settingCreatedDate DateTime? @db.DateTime(0)
|
|
settingModifiedDate DateTime? @db.DateTime(0)
|
|
siteLoginLogo String? @db.VarChar(500)
|
|
}
|
|
|
|
// DMS Models
|
|
|
|
model Cabinet {
|
|
id Int @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
description String? @db.Text
|
|
createdAt DateTime @default(now()) @db.DateTime(0)
|
|
updatedAt DateTime @updatedAt @db.DateTime(0)
|
|
createdBy Int
|
|
status String @default("active") @db.VarChar(50)
|
|
user user @relation("CabinetCreator", fields: [createdBy], references: [userID])
|
|
drawers Drawer[]
|
|
permissions AccessPermission[]
|
|
|
|
@@index([createdBy])
|
|
}
|
|
|
|
model Drawer {
|
|
id Int @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
description String? @db.Text
|
|
cabinetId Int
|
|
createdAt DateTime @default(now()) @db.DateTime(0)
|
|
updatedAt DateTime @updatedAt @db.DateTime(0)
|
|
createdBy Int
|
|
status String @default("active") @db.VarChar(50)
|
|
cabinet Cabinet @relation(fields: [cabinetId], references: [id], onDelete: Cascade)
|
|
user user @relation("DrawerCreator", fields: [createdBy], references: [userID])
|
|
folders Folder[]
|
|
permissions AccessPermission[]
|
|
|
|
@@index([cabinetId])
|
|
@@index([createdBy])
|
|
}
|
|
|
|
model Folder {
|
|
id Int @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
description String? @db.Text
|
|
drawerId Int
|
|
createdAt DateTime @default(now()) @db.DateTime(0)
|
|
updatedAt DateTime @updatedAt @db.DateTime(0)
|
|
createdBy Int
|
|
status String @default("active") @db.VarChar(50)
|
|
drawer Drawer @relation(fields: [drawerId], references: [id], onDelete: Cascade)
|
|
user user @relation("FolderCreator", fields: [createdBy], references: [userID])
|
|
subfolders Subfolder[]
|
|
documents Document[] @relation("FolderDocuments")
|
|
permissions AccessPermission[]
|
|
|
|
@@index([drawerId])
|
|
@@index([createdBy])
|
|
}
|
|
|
|
model Subfolder {
|
|
id Int @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
description String? @db.Text
|
|
folderId Int
|
|
createdAt DateTime @default(now()) @db.DateTime(0)
|
|
updatedAt DateTime @updatedAt @db.DateTime(0)
|
|
createdBy Int
|
|
status String @default("active") @db.VarChar(50)
|
|
folder Folder @relation(fields: [folderId], references: [id], onDelete: Cascade)
|
|
user user @relation("SubfolderCreator", fields: [createdBy], references: [userID])
|
|
documents Document[] @relation("SubfolderDocuments")
|
|
permissions AccessPermission[]
|
|
|
|
@@index([folderId])
|
|
@@index([createdBy])
|
|
}
|
|
|
|
model Document {
|
|
id Int @id @default(autoincrement())
|
|
name String @db.VarChar(255)
|
|
description String? @db.Text
|
|
fileSize Int @default(0)
|
|
fileType String @db.VarChar(100)
|
|
fileExtension String @db.VarChar(20)
|
|
filePath String @db.VarChar(500)
|
|
version Int @default(1)
|
|
isTemplate Boolean @default(false)
|
|
isPublic Boolean @default(false)
|
|
folderId Int?
|
|
subfolderId Int?
|
|
createdAt DateTime @default(now()) @db.DateTime(0)
|
|
updatedAt DateTime @updatedAt @db.DateTime(0)
|
|
createdBy Int
|
|
status String @default("active") @db.VarChar(50)
|
|
folder Folder? @relation("FolderDocuments", fields: [folderId], references: [id], onDelete: SetNull)
|
|
subfolder Subfolder? @relation("SubfolderDocuments", fields: [subfolderId], references: [id], onDelete: SetNull)
|
|
user user @relation("DocumentCreator", fields: [createdBy], references: [userID])
|
|
accessRequests AccessRequest[]
|
|
permissions AccessPermission[]
|
|
versions DocumentVersion[]
|
|
|
|
@@index([folderId])
|
|
@@index([subfolderId])
|
|
@@index([createdBy])
|
|
}
|
|
|
|
model DocumentVersion {
|
|
id Int @id @default(autoincrement())
|
|
documentId Int
|
|
version Int
|
|
filePath String @db.VarChar(500)
|
|
fileSize Int @default(0)
|
|
createdAt DateTime @default(now()) @db.DateTime(0)
|
|
createdBy Int
|
|
document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([documentId])
|
|
}
|
|
|
|
model AccessRequest {
|
|
id Int @id @default(autoincrement())
|
|
documentId Int
|
|
userId Int
|
|
requestedLevel String @db.VarChar(50) // view, download, print, edit, full
|
|
justification String? @db.Text
|
|
status String @default("pending") @db.VarChar(50) // pending, approved, rejected
|
|
responseNote String? @db.Text
|
|
requestedAt DateTime @default(now()) @db.DateTime(0)
|
|
respondedAt DateTime? @db.DateTime(0)
|
|
document Document @relation(fields: [documentId], references: [id], onDelete: Cascade)
|
|
user user @relation(fields: [userId], references: [userID])
|
|
|
|
@@index([documentId])
|
|
@@index([userId])
|
|
}
|
|
|
|
model AccessPermission {
|
|
id Int @id @default(autoincrement())
|
|
userId Int?
|
|
roleId Int?
|
|
documentId Int?
|
|
cabinetId Int?
|
|
drawerId Int?
|
|
folderId Int?
|
|
subfolderId Int?
|
|
permissionLevel String @db.VarChar(50) // view, download, print, edit, full
|
|
createdAt DateTime @default(now()) @db.DateTime(0)
|
|
updatedAt DateTime @updatedAt @db.DateTime(0)
|
|
expiresAt DateTime? @db.DateTime(0)
|
|
user user? @relation(fields: [userId], references: [userID], onDelete: SetNull)
|
|
role role? @relation(fields: [roleId], references: [roleID], onDelete: SetNull)
|
|
document Document? @relation(fields: [documentId], references: [id], onDelete: Cascade)
|
|
cabinet Cabinet? @relation(fields: [cabinetId], references: [id], onDelete: Cascade)
|
|
drawer Drawer? @relation(fields: [drawerId], references: [id], onDelete: Cascade)
|
|
folder Folder? @relation(fields: [folderId], references: [id], onDelete: Cascade)
|
|
subfolder Subfolder? @relation(fields: [subfolderId], references: [id], onDelete: Cascade)
|
|
|
|
@@index([userId])
|
|
@@index([roleId])
|
|
@@index([documentId])
|
|
@@index([cabinetId])
|
|
@@index([drawerId])
|
|
@@index([folderId])
|
|
@@index([subfolderId])
|
|
}
|