targo-backend/prisma/schema.prisma

188 lines
4.9 KiB
Plaintext

// 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_DEV")
}
model Users {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.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")
oauth_access_tokens 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 @db.Uuid
external_payroll_id Int
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 @db.Uuid
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
leave_type LeaveTypes
start_date_time DateTime
end_date_time DateTime?
comment String
approval_status LeaveApprovalStatus @default(PENDING)
@@map("leave_requests")
}
//pay-period vue
model PayPeriods {
period_number Int @id
start_date DateTime
end_date DateTime
year Int
label String
@@map("pay_period")
}
model Timesheets {
id Int @id @default(autoincrement())
employee Employees @relation("TimesheetEmployee", fields: [employee_id], references: [id])
employee_id Int
is_approved Boolean @default(false)
shift Shifts[] @relation("ShiftTimesheet")
expense Expenses[] @relation("ExpensesTimesheet")
@@map("timesheets")
}
model Shifts {
id Int @id @default(autoincrement())
timesheet Timesheets @relation("ShiftTimesheet", fields: [timesheet_id], references: [id])
timesheet_id Int
shift_code ShiftCodes @relation("ShiftShiftCode", fields: [shift_code_id], references: [id])
shift_code_id Int
description String?
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 Expenses {
id Int @id @default(autoincrement())
timesheet Timesheets @relation("ExpensesTimesheet", fields: [timesheet_id], references: [id])
timesheet_id Int
expense_code ExpenseCodes @relation("ExpenseExpenseCode", fields: [expense_code_id], references: [id])
expense_code_id Int
date DateTime
amount Float
attachement String?
description String?
is_approved Boolean @default(false)
supervisor_comment String?
}
model ExpenseCodes {
id Int @id @default(autoincrement())
expense_type String
bank_code String
expense Expenses[] @relation("ExpenseExpenseCode")
}
model OAuthAccessTokens {
id String @id @default(cuid())
user Users @relation("UserOAuthAccessToken", fields: [user_id], references: [id])
user_id String @db.Uuid
application String
access_token String @unique
refresh_token String @unique
access_token_expiry DateTime
refresh_token_expiry DateTime?
is_revoked Boolean @default(false)
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")
}