// 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" } datasource db { provider = "sqlite" url = env("DATABASE_URL") } model User { id String @id @default(cuid()) email String @unique password String name String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt conversations ConversationParticipant[] sentMessages Message[] } model Chauffeur { id String @id @default(cuid()) nom String prenom String dateNaissance DateTime telephone String email String adresse String heuresContrat Int @default(35) // Nombre d'heures dans le contrat (ex: 35h) dateDebutContrat DateTime // Date de début du contrat dateFinContrat DateTime? // Date de fin du contrat (modifiable à tout moment, peut être null) heuresRestantes Int @default(35) // Heures restantes (calculé/géré séparément) status String @default("Disponible") // Disponible, Vacances, Arrêt Maladie createdAt DateTime @default(now()) updatedAt DateTime @updatedAt trajets Trajet[] // Relation avec les trajets } model UniversPro { id String @id @default(cuid()) nom String prenom String telephone String email String adresse String // Adresse de résidence nomEntreprise String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Adherent { id String @id @default(cuid()) nom String prenom String dateNaissance DateTime adresse String // Adresse de résidence email String telephone String // Informations complémentaires situation String? // Sélecteur à option prescripteur String? // Sélecteur à option facturation String? // Sélecteur à option commentaire String? // Texte libre telephoneSecondaire String? // Téléphone secondaire instructions String? // Instructions createdAt DateTime @default(now()) updatedAt DateTime @updatedAt trajets Trajet[] // Relation avec les trajets } model Trajet { id String @id @default(cuid()) date DateTime // Date et heure du trajet adresseDepart String // Adresse de départ adresseArrivee String // Adresse d'arrivée commentaire String? // Commentaire optionnel statut String @default("Planifié") // Planifié, En cours, Terminé, Annulé, Validé archived Boolean @default(false) // Indique si le trajet est archivé adherentId String // Référence à l'adhérent adherent Adherent @relation(fields: [adherentId], references: [id]) chauffeurId String? // Référence au chauffeur (optionnel) chauffeur Chauffeur? @relation(fields: [chauffeurId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Conversation { id String @id @default(cuid()) name String? // Nom pour les groupes (null pour les conversations individuelles) type String @default("direct") // "direct" ou "group" createdAt DateTime @default(now()) updatedAt DateTime @updatedAt participants ConversationParticipant[] messages Message[] } model ConversationParticipant { id String @id @default(cuid()) conversationId String conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) joinedAt DateTime @default(now()) lastReadAt DateTime? // Dernière fois que l'utilisateur a lu les messages createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@unique([conversationId, userId]) @@index([userId]) @@index([conversationId]) } model Message { id String @id @default(cuid()) conversationId String conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade) senderId String sender User @relation(fields: [senderId], references: [id]) content String? // Contenu textuel du message (peut être null si seulement des fichiers) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt files MessageFile[] @@index([conversationId, createdAt]) @@index([senderId]) } model MessageFile { id String @id @default(cuid()) messageId String message Message @relation(fields: [messageId], references: [id], onDelete: Cascade) filename String // Nom original du fichier filepath String // Chemin de stockage du fichier fileType String // Type MIME du fichier fileSize Int // Taille en bytes createdAt DateTime @default(now()) @@index([messageId]) }