diff --git a/prisma/schema.prisma b/prisma/schema.prisma index cc6d0ac..d40e803 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -14,51 +14,140 @@ datasource db { } model Users { - user_id Int @id @default(autoincrement()) - first_name String - last_name String - email String? @unique - phone_number Int @unique - residence String? + id String @id @default(uuid()) + first_name String + last_name String + email String? @unique + phone_number Int @unique + residence String? + role Roles @default(GUEST) - employee Employees? @relation("UserEmployee") - customer Customers? @relation("UserCustomer") + employee Employees? @relation("UserEmployee") + customer Customers? @relation("UserCustomer") + oauth_access_token OAuthAccessTokens? @relation("UserOAuthAccessToken") @@map("users") } model Employees { - employee_id Int @id @default(autoincrement()) - user Users @relation("UserEmployee", fields: [user_id], references:[user_id]) - user_id Int @unique - external_payroll_id Int @unique + 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? - role Roles @default(EMPLOYEE) + + timesheet Timesheets? @relation("TimesheetEmployee") + leave_request LeaveRequests? @relation("LeaveRequestEmployee") @@map("employees") } model Customers { - customer_id Int @id @default(autoincrement()) - user Users @relation("UserCustomer", fields: [user_id], references:[user_id]) - user_id Int @unique - invoice_id Int? @unique - role Roles @default(CUSTOMER) + 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 - CUSTOMER - DEALER - EMPLOYEE - HR 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") } \ No newline at end of file