// 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