// 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()) }