Files
MAD-Platform/prisma/schema.prisma

143 lines
5.1 KiB
Plaintext
Raw Normal View History

2026-01-20 17:20:13 +01:00
// 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
2026-01-21 18:13:35 +01:00
conversations ConversationParticipant[]
sentMessages Message[]
2026-01-20 17:20:13 +01:00
}
2026-01-20 18:08:06 +01:00
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
2026-01-21 17:34:48 +01:00
trajets Trajet[] // Relation avec les trajets
2026-01-20 18:08:06 +01:00
}
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
}
2026-01-20 19:02:49 +01:00
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
2026-01-21 17:34:48 +01:00
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
2026-01-21 18:13:35 +01:00
statut String @default("Planifié") // Planifié, En cours, Terminé, Annulé, Validé
archived Boolean @default(false) // Indique si le trajet est archivé
2026-01-21 17:34:48 +01:00
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
2026-01-20 19:02:49 +01:00
}
2026-01-21 18:13:35 +01:00
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])
}