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]) drivers Driver[] @relation("CompanyDrivers") stationCompanies StationCompany[] vehicules Vehicule[] @relation("CompanyVehicules") } 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) managedCompany Company? @relation("CompanyManager") driver Driver? @relation("UserDriver") reservations Reservation[] @relation("UserReservations") stationCompanies StationCompany[] @relation("UserStationChief") transactions Transaction[] @relation("UserTransactions") } 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 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 reservations Reservation[] @relation("TrajetReservations") vehicule Vehicule @relation("VehiculeTrajets", fields: [vehiculeId], references: [id]) 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([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 }