|
|
@@ -11,6 +11,15 @@ datasource 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
|
|
|
@@ -41,9 +50,11 @@ model User {
|
|
|
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 {
|
|
|
@@ -81,12 +92,45 @@ model Trajet {
|
|
|
}
|
|
|
|
|
|
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
|
|
|
+ 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
|