| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- // 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"
- binaryTargets = ["native", "windows"]
- }
- datasource mysql {
- provider = "mysql"
- url = env("DATABASE_URL")
- }
- // Définition de l'Enum pour les rôles utilisateurs
- enum UserRole {
- USER // Utilisateur standard
- ADMIN // Administrateur système
- DRIVER // Chauffeur
- MANAGER // Manager de compagnie
- EMPLOYEE // Employee de la compagnie
- }
- model Company {
- id Int @id @default(autoincrement())
- name String @unique
- address String
- vehicules Vehicule[] @relation("CompanyVehicules")
- drivers Driver[] @relation("CompanyDrivers")
- manager User @relation("CompanyManager", fields: [managerId], references: [id])
- managerId Int @unique
- }
- model Driver {
- id Int @id @default(autoincrement())
- name String @unique
- address String
- telephone String
- company Company? @relation("CompanyDrivers", fields: [companyId], references: [id])
- companyId Int?
- user User @relation("UserDriver", fields: [userId], references: [id])
- userId Int @unique
- vehicules Vehicule[] @relation("DriverVehicules")
- }
- model User {
- id Int @id @default(autoincrement())
- name String? // Rendu optionnel
- otherName String? // Rendu optionnel
- address String? // Rendu optionnel
- telephone String? // Rendu optionnel
- email String @unique // Reste obligatoire
- password String // Reste obligatoire
- role UserRole @default(USER) // Ajout du champ role avec une valeur par défaut
- reservations Reservation[] @relation("UserReservations")
- driver Driver? @relation("UserDriver")
- managedCompany Company? @relation("CompanyManager")
- transactions Transaction[] @relation("UserTransactions") // Ajout de la relation avec Transaction
- }
- model Vehicule {
- id Int @id @default(autoincrement())
- number_places Int
- color String
- type String
- immatriculation String @unique
- model String
- company Company @relation("CompanyVehicules", fields: [companyId], references: [id])
- companyId Int
- driver Driver @relation("DriverVehicules", fields: [driverId], references: [id])
- driverId Int
- places Place[] @relation("VehiculePlaces")
- trajets Trajet[] @relation("VehiculeTrajets")
- }
- model Place {
- id Int @id @default(autoincrement())
- number Int
- vehicule Vehicule @relation("VehiculePlaces", fields: [vehiculeId], references: [id])
- vehiculeId Int
- reservations Reservation[] @relation("PlaceReservations")
- }
- model Trajet {
- id Int @id @default(autoincrement())
- departAt DateTime
- arriveAt DateTime
- depart String
- arrive String
- vehicule Vehicule @relation("VehiculeTrajets", fields: [vehiculeId], references: [id])
- vehiculeId Int
- reservations Reservation[] @relation("TrajetReservations")
- }
- model Reservation {
- id Int @id @default(autoincrement())
- dateAt DateTime
- place Place @relation("PlaceReservations", fields: [placeId], references: [id])
- placeId Int
- user User @relation("UserReservations", fields: [userId], references: [id])
- userId Int
- trajet Trajet @relation("TrajetReservations", fields: [trajetId], references: [id])
- trajetId Int
- transaction Transaction? @relation("ReservationTransaction") // Ajout de la relation avec Transaction
- qrcode Qrcode? @relation("ReservationQrcode") // Relation unique avec Qrcode
- }
- // a revoir
- model Transaction {
- id String @id @default(uuid())
- amount Float
- currency String
- status String // pending, success, failed
- provider String // cinetpay, stripe, wave, etc.
- reference String // référence externe (PSP)
- metadata Json?
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
- // Relation avec User
- userId Int // Changé de String à Int
- user User @relation("UserTransactions", fields: [userId], references: [id])
- // Relation avec Reservation (une transaction est unique à une réservation)
- reservationId Int @unique
- reservation Reservation @relation("ReservationTransaction", fields: [reservationId], references: [id])
- }
- model Qrcode {
- id String @id @default(uuid())
- // Relation unique avec la Reservation
- reservationId Int @unique // Assure qu'un Qrcode est lié à une seule Reservation
- reservation Reservation @relation("ReservationQrcode", fields: [reservationId], references: [id])
- value String // la valeur encodée (ex: JWT, UUID, URL...)
- createdAt DateTime @default(now())
- scannedAt DateTime? // Suivre les scans
- }
- // fin
|