// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model Users { id String @id @default(uuid()) first_name String last_name String email String @unique password String phone_number Int @unique residence String? role Roles @default(GUEST) employee Employees? @relation("UserEmployee") customer Customers? @relation("UserCustomer") oauth_access_token OAuthAccessTokens? @relation("UserOAuthAccessToken") @@map("users") } model Employees { id Int @id @default(autoincrement()) user Users @relation("UserEmployee", fields: [user_id], references:[id]) user_id String @unique external_payroll_id Int @unique company_code Int first_work_day DateTime last_work_day DateTime? timesheet Timesheets? @relation("TimesheetEmployee") leave_request LeaveRequests? @relation("LeaveRequestEmployee") @@map("employees") } model Customers { id Int @id @default(autoincrement()) user Users @relation("UserCustomer", fields: [user_id], references:[id]) user_id String @unique invoice_id Int? @unique @@map("customers") } model LeaveRequests { id Int @id @default(autoincrement()) employee Employees @relation("LeaveRequestEmployee", fields: [employee_id], references:[id]) employee_id Int @unique leave_type LeaveTypes start_date_time DateTime end_date_time DateTime? comment String approval_status LeaveApprovalStatus @default(PENDING) @@map("leave_requests") } model Timesheets { id Int @id @default(autoincrement()) employee Employees @relation("TimesheetEmployee", fields: [employee_id], references:[id]) employee_id Int @unique is_approved Boolean @default(false) shift Shifts? @relation("ShiftTimesheet") @@map("timesheets") } model Shifts { id Int @id @default(autoincrement()) timesheet Timesheets @relation("ShiftTimesheet", fields: [timesheet_id], references: [id]) timesheet_id Int @unique shift_code ShiftCodes @relation("ShiftShiftCode", fields: [shift_code_id], references: [id]) shift_code_id Int @unique date DateTime start_time DateTime end_time DateTime @@map("shifts") } model ShiftCodes { id Int @id @default(autoincrement()) shift_type String bank_code String shift Shifts? @relation("ShiftShiftCode") @@map("shift_codes") } model OAuthAccessTokens { id String @id @default(cuid()) user Users @relation("UserOAuthAccessToken", fields: [user_id], references: [id]) user_id String @unique access_token String @unique refresh_token String @unique access_token_expiry DateTime refresh_token_expiry DateTime? scopes Json @default("[]") created_at DateTime @default(now()) updated_at DateTime? @@map("refresh_tokens") } enum Roles { ADMIN SUPERVISOR HR ACCOUNTING EMPLOYEE DEALER CUSTOMER GUEST @@map("roles") } enum LeaveTypes { SICK // maladie ou repos VACATION // paye UNPAID // non-paye BEREAVEMENT // deuil de famille PARENTAL // maternite/paternite/adoption LEGAL // obligations legales comme devoir de juree @@map("leave_types") } enum LeaveApprovalStatus { PENDING APPROVED DENIED CANCELLED ESCALATED @@map("leave_approval_status") }