phosphat-report-app/prisma/schema.prisma

152 lines
4.9 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 = "sqlite"
url = env("DATABASE_URL")
}
model Report {
id Int @id @default(autoincrement())
employeeId Int
employee Employee @relation(fields: [employeeId], references: [id])
createdDate DateTime @default(now())
updatedDate DateTime @updatedAt
shift String // 'day' or 'night'
areaId Int
area Area @relation(fields: [areaId], references: [id])
dredgerLocationId Int
dredgerLocation DredgerLocation @relation(fields: [dredgerLocationId], references: [id])
dredgerLineLength Int
reclamationLocationId Int
reclamationLocation ReclamationLocation @relation(fields: [reclamationLocationId], references: [id])
shoreConnection Int
reclamationHeight Json // JSON: { base: int, extra: int }
pipelineLength Json // JSON: { main: int, ext1: int, reserve: int, ext2: int }
stats Json // JSON: { Dozers: int, Exc: int, Loaders: int, Foreman: string, Laborer: int }
timeSheet Json // JSON: Array of timesheet objects
stoppages Json // JSON: Array of stoppage records
notes String?
// Sheet relations
daySheetFor Sheet[] @relation("DayShift")
nightSheetFor Sheet[] @relation("NightShift")
// Worker relations
shiftWorkers ShiftWorker[]
}
model Area {
id Int @id @default(autoincrement())
name String @unique
reports Report[]
sheets Sheet[]
}
model DredgerLocation {
id Int @id @default(autoincrement())
name String @unique
class String // 's', 'd', 'sp'
reports Report[]
sheets Sheet[]
}
model ReclamationLocation {
id Int @id @default(autoincrement())
name String @unique
reports Report[]
sheets Sheet[]
}
model Employee {
id Int @id @default(autoincrement())
name String
authLevel Int
username String @unique
email String @unique
password String
status String @default("active") // 'active' or 'inactive'
reports Report[]
passwordResetTokens PasswordResetToken[]
}
model PasswordResetToken {
id Int @id @default(autoincrement())
token String @unique
employeeId Int
employee Employee @relation(fields: [employeeId], references: [id], onDelete: Cascade)
expiresAt DateTime
used Boolean @default(false)
createdAt DateTime @default(now())
}
model Foreman {
id Int @id @default(autoincrement())
name String
}
model Equipment {
id Int @id @default(autoincrement())
category String
model String
number Int
}
model Worker {
id Int @id @default(autoincrement())
name String @unique
status String @default("active") // 'active' or 'inactive'
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
shiftWorkers ShiftWorker[]
}
model ShiftWorker {
id Int @id @default(autoincrement())
reportId Int
workerId Int
report Report @relation(fields: [reportId], references: [id], onDelete: Cascade)
worker Worker @relation(fields: [workerId], references: [id], onDelete: Cascade)
@@unique([reportId, workerId])
}
model Sheet {
id Int @id @default(autoincrement())
dayShiftId Int?
nightShiftId Int?
status String @default("pending") // 'pending', 'completed'
areaId Int
dredgerLocationId Int
reclamationLocationId Int
date String // Store as string in YYYY-MM-DD format
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
area Area @relation(fields: [areaId], references: [id])
dredgerLocation DredgerLocation @relation(fields: [dredgerLocationId], references: [id])
reclamationLocation ReclamationLocation @relation(fields: [reclamationLocationId], references: [id])
dayShift Report? @relation("DayShift", fields: [dayShiftId], references: [id])
nightShift Report? @relation("NightShift", fields: [nightShiftId], references: [id])
@@unique([areaId, dredgerLocationId, reclamationLocationId, date])
}
model MailSettings {
id Int @id @default(autoincrement())
host String
port Int
secure Boolean @default(false)
username String
password String
fromName String
fromEmail String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}