schema.prisma 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. generator client {
  2. provider = "prisma-client-js"
  3. binaryTargets = ["native", "windows"]
  4. }
  5. datasource mysql {
  6. provider = "mysql"
  7. url = env("DATABASE_URL")
  8. }
  9. model Station {
  10. id Int @id @default(autoincrement())
  11. name String
  12. long Decimal?
  13. lat Decimal?
  14. address String?
  15. city String?
  16. country String?
  17. municipality String?
  18. description String?
  19. stationCompanies StationCompany[]
  20. trajetsDepartingFrom Trajet[] @relation("TrajetsDepartingFrom") // Ajout de la relation inverse
  21. trajetsArrivingAt Trajet[] @relation("TrajetsArrivingAt") // Ajout de la relation inverse
  22. }
  23. model Company {
  24. id Int @id @default(autoincrement())
  25. name String @unique
  26. address String
  27. managerId Int @unique
  28. manager User @relation("CompanyManager", fields: [managerId], references: [id])
  29. drivers Driver[] @relation("CompanyDrivers")
  30. stationCompanies StationCompany[]
  31. vehicules Vehicule[] @relation("CompanyVehicules")
  32. }
  33. model StationCompany {
  34. id Int @id @default(autoincrement())
  35. stationId Int
  36. companyId Int
  37. stationChiefId Int
  38. company Company @relation(fields: [companyId], references: [id])
  39. stationChief User @relation("UserStationChief", fields: [stationChiefId], references: [id])
  40. station Station @relation(fields: [stationId], references: [id])
  41. @@unique([stationId, companyId])
  42. @@index([companyId], map: "StationCompany_companyId_fkey")
  43. @@index([stationChiefId], map: "StationCompany_stationChiefId_fkey")
  44. }
  45. model Driver {
  46. id Int @id @default(autoincrement())
  47. name String @unique
  48. address String
  49. telephone String
  50. companyId Int?
  51. userId Int @unique
  52. company Company? @relation("CompanyDrivers", fields: [companyId], references: [id])
  53. user User @relation("UserDriver", fields: [userId], references: [id])
  54. vehicules Vehicule[] @relation("DriverVehicules")
  55. @@index([companyId], map: "Driver_companyId_fkey")
  56. }
  57. model User {
  58. id Int @id @default(autoincrement())
  59. name String?
  60. otherName String?
  61. address String?
  62. telephone String?
  63. email String @unique
  64. password String
  65. role UserRole @default(USER)
  66. managedCompany Company? @relation("CompanyManager")
  67. driver Driver? @relation("UserDriver")
  68. reservations Reservation[] @relation("UserReservations")
  69. stationCompanies StationCompany[] @relation("UserStationChief")
  70. transactions Transaction[] @relation("UserTransactions")
  71. }
  72. model Vehicule {
  73. id Int @id @default(autoincrement())
  74. number_places Int
  75. color String
  76. type String
  77. immatriculation String @unique
  78. model String
  79. companyId Int
  80. driverId Int?
  81. status VehiculeStatus @default(INACTIF)
  82. places Place[] @relation("VehiculePlaces")
  83. trajets Trajet[] @relation("VehiculeTrajets")
  84. company Company @relation("CompanyVehicules", fields: [companyId], references: [id])
  85. driver Driver? @relation("DriverVehicules", fields: [driverId], references: [id])
  86. @@index([companyId], map: "Vehicule_companyId_fkey")
  87. @@index([driverId], map: "Vehicule_driverId_fkey")
  88. }
  89. model Place {
  90. id Int @id @default(autoincrement())
  91. number Int
  92. vehiculeId Int
  93. vehicule Vehicule @relation("VehiculePlaces", fields: [vehiculeId], references: [id])
  94. reservations Reservation[] @relation("PlaceReservations")
  95. @@index([vehiculeId], map: "Place_vehiculeId_fkey")
  96. }
  97. model Trajet {
  98. id Int @id @default(autoincrement())
  99. departAt DateTime
  100. arriveAt DateTime
  101. // depart String // Ancien champ
  102. // arrive String // Ancien champ
  103. departStationId Int // Nouveau champ pour l'ID de la station de départ
  104. arriveStationId Int // Nouveau champ pour l'ID de la station d'arrivée
  105. vehiculeId Int
  106. reservations Reservation[] @relation("TrajetReservations")
  107. vehicule Vehicule @relation("VehiculeTrajets", fields: [vehiculeId], references: [id])
  108. departStation Station @relation("TrajetsDepartingFrom", fields: [departStationId], references: [id]) // Relation vers la station de départ
  109. arriveStation Station @relation("TrajetsArrivingAt", fields: [arriveStationId], references: [id]) // Relation vers la station d'arrivée
  110. @@index([vehiculeId], map: "Trajet_vehiculeId_fkey")
  111. @@index([departStationId], map: "Trajet_departStationId_fkey") // Index pour la nouvelle clé étrangère
  112. @@index([arriveStationId], map: "Trajet_arriveStationId_fkey") // Index pour la nouvelle clé étrangère
  113. }
  114. model Reservation {
  115. id Int @id @default(autoincrement())
  116. dateAt DateTime
  117. placeId Int
  118. userId Int
  119. trajetId Int
  120. qrcode Qrcode? @relation("ReservationQrcode")
  121. place Place @relation("PlaceReservations", fields: [placeId], references: [id])
  122. trajet Trajet @relation("TrajetReservations", fields: [trajetId], references: [id])
  123. user User @relation("UserReservations", fields: [userId], references: [id])
  124. transaction Transaction? @relation("ReservationTransaction")
  125. @@index([placeId], map: "Reservation_placeId_fkey")
  126. @@index([trajetId], map: "Reservation_trajetId_fkey")
  127. @@index([userId], map: "Reservation_userId_fkey")
  128. }
  129. model Transaction {
  130. id String @id @default(uuid())
  131. amount Float?
  132. currency String?
  133. status String?
  134. provider String?
  135. reference String?
  136. metadata Json?
  137. createdAt DateTime? @default(now())
  138. updatedAt DateTime? @updatedAt
  139. userId Int @unique
  140. reservationId Int @unique
  141. reservation Reservation @relation("ReservationTransaction", fields: [reservationId], references: [id])
  142. user User @relation("UserTransactions", fields: [userId], references: [id])
  143. @@index([userId], map: "Transaction_userId_fkey")
  144. }
  145. model Qrcode {
  146. id String @id @default(uuid())
  147. reservationId Int @unique
  148. createdAt DateTime @default(now())
  149. scannedAt DateTime?
  150. value String
  151. reservation Reservation @relation("ReservationQrcode", fields: [reservationId], references: [id])
  152. }
  153. enum UserRole {
  154. USER
  155. ADMIN
  156. DRIVER
  157. MANAGER
  158. EMPLOYEE
  159. }
  160. enum VehiculeStatus {
  161. ACTIF
  162. INACTIF
  163. MAINTENANCE
  164. }