143 lines
5.1 KiB
Plaintext
143 lines
5.1 KiB
Plaintext
// 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])
|
|
}
|