schema.prisma 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. // This is your Prisma schema file,
  2. // learn more about it in the docs: https://pris.ly/d/prisma-schema
  3. generator client {
  4. provider = "prisma-client-js"
  5. binaryTargets = ["native", "windows"]
  6. }
  7. datasource mysql {
  8. provider = "mysql"
  9. url = env("DATABASE_URL")
  10. }
  11. // Définition de l'Enum pour les rôles utilisateurs
  12. enum UserRole {
  13. USER // Utilisateur standard
  14. ADMIN // Administrateur système
  15. DRIVER // Chauffeur
  16. MANAGER // Manager de compagnie
  17. EMPLOYEE // Employee de la compagnie
  18. }
  19. model Company {
  20. id Int @id @default(autoincrement())
  21. name String @unique
  22. address String
  23. vehicules Vehicule[] @relation("CompanyVehicules")
  24. drivers Driver[] @relation("CompanyDrivers")
  25. manager User @relation("CompanyManager", fields: [managerId], references: [id])
  26. managerId Int @unique
  27. }
  28. model Driver {
  29. id Int @id @default(autoincrement())
  30. name String @unique
  31. address String
  32. telephone String
  33. company Company? @relation("CompanyDrivers", fields: [companyId], references: [id])
  34. companyId Int?
  35. user User @relation("UserDriver", fields: [userId], references: [id])
  36. userId Int @unique
  37. vehicules Vehicule[] @relation("DriverVehicules")
  38. }
  39. model User {
  40. id Int @id @default(autoincrement())
  41. name String? // Rendu optionnel
  42. otherName String? // Rendu optionnel
  43. address String? // Rendu optionnel
  44. telephone String? // Rendu optionnel
  45. email String @unique // Reste obligatoire
  46. password String // Reste obligatoire
  47. role UserRole @default(USER) // Ajout du champ role avec une valeur par défaut
  48. reservations Reservation[] @relation("UserReservations")
  49. driver Driver? @relation("UserDriver")
  50. managedCompany Company? @relation("CompanyManager")
  51. transactions Transaction[] @relation("UserTransactions") // Ajout de la relation avec Transaction
  52. }
  53. model Vehicule {
  54. id Int @id @default(autoincrement())
  55. number_places Int
  56. color String
  57. type String
  58. immatriculation String @unique
  59. model String
  60. company Company @relation("CompanyVehicules", fields: [companyId], references: [id])
  61. companyId Int
  62. driver Driver @relation("DriverVehicules", fields: [driverId], references: [id])
  63. driverId Int
  64. places Place[] @relation("VehiculePlaces")
  65. trajets Trajet[] @relation("VehiculeTrajets")
  66. }
  67. model Place {
  68. id Int @id @default(autoincrement())
  69. number Int
  70. vehicule Vehicule @relation("VehiculePlaces", fields: [vehiculeId], references: [id])
  71. vehiculeId Int
  72. reservations Reservation[] @relation("PlaceReservations")
  73. }
  74. model Trajet {
  75. id Int @id @default(autoincrement())
  76. departAt DateTime
  77. arriveAt DateTime
  78. depart String
  79. arrive String
  80. vehicule Vehicule @relation("VehiculeTrajets", fields: [vehiculeId], references: [id])
  81. vehiculeId Int
  82. reservations Reservation[] @relation("TrajetReservations")
  83. }
  84. model Reservation {
  85. id Int @id @default(autoincrement())
  86. dateAt DateTime
  87. place Place @relation("PlaceReservations", fields: [placeId], references: [id])
  88. placeId Int
  89. user User @relation("UserReservations", fields: [userId], references: [id])
  90. userId Int
  91. trajet Trajet @relation("TrajetReservations", fields: [trajetId], references: [id])
  92. trajetId Int
  93. transaction Transaction? @relation("ReservationTransaction") // Ajout de la relation avec Transaction
  94. qrcode Qrcode? @relation("ReservationQrcode") // Relation unique avec Qrcode
  95. }
  96. // a revoir
  97. model Transaction {
  98. id String @id @default(uuid())
  99. amount Float
  100. currency String
  101. status String // pending, success, failed
  102. provider String // cinetpay, stripe, wave, etc.
  103. reference String // référence externe (PSP)
  104. metadata Json?
  105. createdAt DateTime @default(now())
  106. updatedAt DateTime @updatedAt
  107. // Relation avec User
  108. userId Int // Changé de String à Int
  109. user User @relation("UserTransactions", fields: [userId], references: [id])
  110. // Relation avec Reservation (une transaction est unique à une réservation)
  111. reservationId Int @unique
  112. reservation Reservation @relation("ReservationTransaction", fields: [reservationId], references: [id])
  113. }
  114. model Qrcode {
  115. id String @id @default(uuid())
  116. // Relation unique avec la Reservation
  117. reservationId Int @unique // Assure qu'un Qrcode est lié à une seule Reservation
  118. reservation Reservation @relation("ReservationQrcode", fields: [reservationId], references: [id])
  119. value String // la valeur encodée (ex: JWT, UUID, URL...)
  120. createdAt DateTime @default(now())
  121. scannedAt DateTime? // Suivre les scans
  122. }
  123. // fin