113 lines
3.5 KiB
Plaintext
113 lines
3.5 KiB
Plaintext
// This is your Prisma schema file,
|
|
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model User {
|
|
id Int @id @default(autoincrement())
|
|
username String? @unique
|
|
email String @unique
|
|
password String
|
|
name String
|
|
role String @default("user") // "user", "approver", "super_admin"
|
|
failedLoginAttempts Int @default(0)
|
|
lockoutUntil DateTime?
|
|
requests Request[]
|
|
approvals ApprovalLog[]
|
|
activityLogs ActivityLog[]
|
|
categories Category[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model SystemSettings {
|
|
id Int @id @default(1)
|
|
telegramBotToken String?
|
|
telegramChatId String?
|
|
isTelegramEnabled Boolean @default(false)
|
|
|
|
// Email Config
|
|
isEmailEnabled Boolean @default(false)
|
|
smtpHost String?
|
|
smtpPort Int?
|
|
smtpUser String?
|
|
smtpPass String?
|
|
targetEmail String? // Comma separated for multiple
|
|
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model Category {
|
|
id Int @id @default(autoincrement())
|
|
name String @unique
|
|
users User[]
|
|
items Item[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model Item {
|
|
id Int @id @default(autoincrement())
|
|
name String @unique
|
|
totalQuantity Int @default(0)
|
|
borrowedQty Int @default(0)
|
|
trialQty Int @default(0)
|
|
billedQty Int @default(0)
|
|
availableQty Int @default(0)
|
|
damagedQty Int @default(0)
|
|
soldQty Int @default(0)
|
|
categoryId Int?
|
|
category Category? @relation(fields: [categoryId], references: [id])
|
|
requests Request[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model Request {
|
|
id Int @id @default(autoincrement())
|
|
userId Int
|
|
itemId Int
|
|
quantity Int @default(1)
|
|
purpose String
|
|
company String
|
|
address String
|
|
requestDate DateTime @default(now())
|
|
status String @default("pending") // "pending", "approved_1", "approved_2", "rejected"
|
|
type String @default("borrow") // "borrow", "trial", "billed", "purchase", "return_borrow", "return_trial", "return_billed"
|
|
notes String?
|
|
serialNumber String?
|
|
user User @relation(fields: [userId], references: [id])
|
|
item Item @relation(fields: [itemId], references: [id])
|
|
approvalLogs ApprovalLog[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
}
|
|
|
|
model ApprovalLog {
|
|
id Int @id @default(autoincrement())
|
|
requestId Int
|
|
approverId Int
|
|
approvalStep Int // 1 or 2
|
|
status String // "approved", "rejected"
|
|
request Request @relation(fields: [requestId], references: [id])
|
|
approver User @relation(fields: [approverId], references: [id])
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
model ActivityLog {
|
|
id Int @id @default(autoincrement())
|
|
userId Int
|
|
user User @relation(fields: [userId], references: [id])
|
|
action String
|
|
details String
|
|
type String // "request", "approval", "admin_item", "admin_user"
|
|
createdAt DateTime @default(now())
|
|
}
|