| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- generator client {
- provider = "prisma-client-js"
- binaryTargets = ["native", "windows"]
- }
- datasource mysql {
- provider = "mysql"
- url = env("DATABASE_URL")
- }
- model Station {
- id Int @id @default(autoincrement())
- name String
- long Decimal?
- lat Decimal?
- address String?
- city String?
- country String?
- municipality String?
- description String?
- stationCompanies StationCompany[]
- trajetsDepartingFrom Trajet[] @relation("TrajetsDepartingFrom") // Ajout de la relation inverse
- trajetsArrivingAt Trajet[] @relation("TrajetsArrivingAt") // Ajout de la relation inverse
- }
- model Company {
- id Int @id @default(autoincrement())
- name String @unique
- address String
- managerId Int @unique
- manager User @relation("CompanyManager", fields: [managerId], references: [id])
- employees User[] @relation("CompanyEmployees")
- drivers Driver[] @relation("CompanyDrivers")
- stationCompanies StationCompany[]
- vehicules Vehicule[] @relation("CompanyVehicules")
- trajets Trajet[] @relation("CompanyTrajets") // Relation inverse avec Trajet
- }
- model StationCompany {
- id Int @id @default(autoincrement())
- stationId Int
- companyId Int
- stationChiefId Int
- company Company @relation(fields: [companyId], references: [id])
- stationChief User @relation("UserStationChief", fields: [stationChiefId], references: [id])
- station Station @relation(fields: [stationId], references: [id])
- @@unique([stationId, companyId])
- @@index([companyId], map: "StationCompany_companyId_fkey")
- @@index([stationChiefId], map: "StationCompany_stationChiefId_fkey")
- }
- model Driver {
- id Int @id @default(autoincrement())
- name String @unique
- address String
- telephone String
- companyId Int?
- userId Int @unique
- company Company? @relation("CompanyDrivers", fields: [companyId], references: [id])
- user User @relation("UserDriver", fields: [userId], references: [id])
- vehicules Vehicule[] @relation("DriverVehicules")
- @@index([companyId], map: "Driver_companyId_fkey")
- }
- model User {
- id Int @id @default(autoincrement())
- name String?
- otherName String?
- address String?
- telephone String?
- email String @unique
- password String
- role UserRole @default(USER)
- companyId Int? // Nouveau champ pour la relation employé-entreprise
- company Company? @relation("CompanyEmployees", fields: [companyId], references: [id])
- managedCompany Company? @relation("CompanyManager")
- driver Driver? @relation("UserDriver")
- reservations Reservation[] @relation("UserReservations")
- stationCompanies StationCompany[] @relation("UserStationChief")
- transactions Transaction[] @relation("UserTransactions")
- @@index([companyId], map: "User_companyId_fkey")
- }
- model Vehicule {
- id Int @id @default(autoincrement())
- number_places Int
- color String
- type String
- immatriculation String @unique
- model String
- companyId Int
- driverId Int?
- status VehiculeStatus @default(INACTIF)
- places Place[] @relation("VehiculePlaces")
- trajets Trajet[] @relation("VehiculeTrajets")
- company Company @relation("CompanyVehicules", fields: [companyId], references: [id])
- driver Driver? @relation("DriverVehicules", fields: [driverId], references: [id])
- @@index([companyId], map: "Vehicule_companyId_fkey")
- @@index([driverId], map: "Vehicule_driverId_fkey")
- }
- model Place {
- id Int @id @default(autoincrement())
- number Int
- vehiculeId Int
- isAvailable Boolean @default(true) // Indique si la place est disponible
- occupiedAt DateTime? // Date d'occupation si la place est occupée
- vehicule Vehicule @relation("VehiculePlaces", fields: [vehiculeId], references: [id])
- reservations Reservation[] @relation("PlaceReservations")
- @@index([vehiculeId], map: "Place_vehiculeId_fkey")
- }
- model Trajet {
- id Int @id @default(autoincrement())
- departAt DateTime
- arriveAt DateTime
- // depart String // Ancien champ
- // arrive String // Ancien champ
- departStationId Int // Nouveau champ pour l'ID de la station de départ
- arriveStationId Int // Nouveau champ pour l'ID de la station d'arrivée
- vehiculeId Int
- companyId Int? // Relation directe avec Company (optionnel temporairement)
- pricePerSeat Float @default(0.0) // Prix par place
- reservations Reservation[] @relation("TrajetReservations")
- vehicule Vehicule @relation("VehiculeTrajets", fields: [vehiculeId], references: [id])
- company Company? @relation("CompanyTrajets", fields: [companyId], references: [id]) // Relation directe avec Company
- departStation Station @relation("TrajetsDepartingFrom", fields: [departStationId], references: [id]) // Relation vers la station de départ
- arriveStation Station @relation("TrajetsArrivingAt", fields: [arriveStationId], references: [id]) // Relation vers la station d'arrivée
- @@index([vehiculeId], map: "Trajet_vehiculeId_fkey")
- @@index([companyId], map: "Trajet_companyId_fkey") // Index pour la relation avec Company
- @@index([departStationId], map: "Trajet_departStationId_fkey") // Index pour la nouvelle clé étrangère
- @@index([arriveStationId], map: "Trajet_arriveStationId_fkey") // Index pour la nouvelle clé étrangère
- }
- model Reservation {
- id Int @id @default(autoincrement())
- dateAt DateTime
- placeId Int
- userId Int
- trajetId Int
- qrcode Qrcode? @relation("ReservationQrcode")
- place Place @relation("PlaceReservations", fields: [placeId], references: [id])
- trajet Trajet @relation("TrajetReservations", fields: [trajetId], references: [id])
- user User @relation("UserReservations", fields: [userId], references: [id])
- transaction Transaction? @relation("ReservationTransaction")
- @@index([placeId], map: "Reservation_placeId_fkey")
- @@index([trajetId], map: "Reservation_trajetId_fkey")
- @@index([userId], map: "Reservation_userId_fkey")
- }
- model Transaction {
- id String @id @default(uuid())
- amount Float?
- currency String?
- status String?
- provider String?
- reference String?
- metadata Json?
- createdAt DateTime? @default(now())
- updatedAt DateTime? @updatedAt
- userId Int @unique
- reservationId Int @unique
- reservation Reservation @relation("ReservationTransaction", fields: [reservationId], references: [id])
- user User @relation("UserTransactions", fields: [userId], references: [id])
- @@index([userId], map: "Transaction_userId_fkey")
- }
- model Qrcode {
- id String @id @default(uuid())
- reservationId Int @unique
- createdAt DateTime @default(now())
- scannedAt DateTime?
- value String
- reservation Reservation @relation("ReservationQrcode", fields: [reservationId], references: [id])
- }
- enum UserRole {
- USER
- ADMIN
- DRIVER
- MANAGER
- EMPLOYEE
- }
- enum VehiculeStatus {
- ACTIF
- INACTIF
- MAINTENANCE
- }
|