generator client { provider = "prisma-client-js" } datasource db { provider = "sqlserver" } model Campus { id Int @id @default(autoincrement()) nom String adresse String ville String codePostal String @map("code_postal") actif Boolean @default(true) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") utilisateurs Utilisateur[] sallesPret SallePret[] materiels Materiel[] emprunts Emprunt[] historiques Historique[] @@map("campus") } model Role { id Int @id @default(autoincrement()) code String @unique libelle String description String utilisateurs Utilisateur[] @@map("role") } model Utilisateur { id Int @id @default(autoincrement()) microsoftId String @unique @map("microsoft_id") nom String prenom String email String @unique classe String? roleId Int @map("role_id") campusId Int @map("campus_id") actif Boolean @default(true) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") campus Campus @relation(fields: [campusId], references: [id]) role Role @relation(fields: [roleId], references: [id]) cartes CarteEtudiante[] emprunts Emprunt[] checklists Checklist[] anomaliesConcernees Anomalie[] @relation("AnomalieEtudiant") anomaliesTraitees Anomalie[] @relation("AnomalieResponsable") notifications Notification[] historiques Historique[] @@map("utilisateur") } model CategorieMateriel { id Int @id @default(autoincrement()) nom String description String actif Boolean @default(true) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") materiels Materiel[] @@map("categorie_materiel") } model SallePret { id Int @id @default(autoincrement()) nom String localisation String campusId Int @map("campus_id") actif Boolean @default(true) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") campus Campus @relation(fields: [campusId], references: [id]) postes PosteEmprunt[] emprunts Emprunt[] historiques Historique[] @@map("salle_pret") } model PosteEmprunt { id Int @id @default(autoincrement()) nom String identifiantPoste String @map("identifiant_poste") sallePretId Int @map("salle_pret_id") actif Boolean @default(true) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") sallePret SallePret @relation(fields: [sallePretId], references: [id]) emprunts Emprunt[] historiques Historique[] @@map("poste_emprunt") } model CarteEtudiante { id Int @id @default(autoincrement()) utilisateurId Int @map("utilisateur_id") qrCode String @map("qr_code") dateActivation DateTime @map("date_activation") dateExpiration DateTime @map("date_expiration") actif Boolean @default(true) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") utilisateur Utilisateur @relation(fields: [utilisateurId], references: [id]) @@map("carte_etudiante") } model Materiel { id Int @id @default(autoincrement()) nom String marque String modele String reference String numeroInventaire String @map("numero_inventaire") numeroSerie String @map("numero_serie") statut String etatGeneral String @map("etat_general") categorieId Int @map("categorie_id") campusId Int @map("campus_id") actif Boolean @default(true) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") categorie CategorieMateriel @relation(fields: [categorieId], references: [id]) campus Campus @relation(fields: [campusId], references: [id]) accessoires MaterielAccessoire[] emprunts Emprunt[] anomalies Anomalie[] historiques Historique[] @@map("materiel") } model Accessoire { id Int @id @default(autoincrement()) nom String description String actif Boolean @default(true) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") materiels MaterielAccessoire[] checklistElements ChecklistElement[] @@map("accessoire") } model MaterielAccessoire { id Int @id @default(autoincrement()) materielId Int @map("materiel_id") accessoireId Int @map("accessoire_id") quantiteAttendue Int @map("quantite_attendue") obligatoire Boolean materiel Materiel @relation(fields: [materielId], references: [id]) accessoire Accessoire @relation(fields: [accessoireId], references: [id]) @@map("materiel_accessoire") } model Emprunt { id Int @id @default(autoincrement()) utilisateurId Int @map("utilisateur_id") materielId Int @map("materiel_id") campusId Int @map("campus_id") sallePretId Int @map("salle_pret_id") posteEmpruntId Int @map("poste_emprunt_id") dateEmprunt DateTime @map("date_emprunt") dateRetourPrevue DateTime @map("date_retour_prevue") dateRetourReelle DateTime? @map("date_retour_reelle") statut String modeIdentificationEmprunt String @map("mode_identification_emprunt") modeIdentificationRetour String? @map("mode_identification_retour") commentaireDepart String? @map("commentaire_depart") commentaireRetour String? @map("commentaire_retour") createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") utilisateur Utilisateur @relation(fields: [utilisateurId], references: [id], onDelete: NoAction, onUpdate: NoAction) materiel Materiel @relation(fields: [materielId], references: [id], onDelete: NoAction, onUpdate: NoAction) campus Campus @relation(fields: [campusId], references: [id], onDelete: NoAction, onUpdate: NoAction) sallePret SallePret @relation(fields: [sallePretId], references: [id], onDelete: NoAction, onUpdate: NoAction) posteEmprunt PosteEmprunt @relation(fields: [posteEmpruntId], references: [id], onDelete: NoAction, onUpdate: NoAction) checklists Checklist[] anomalies Anomalie[] historiques Historique[] @@map("emprunt") } model Checklist { id Int @id @default(autoincrement()) empruntId Int @map("emprunt_id") utilisateurId Int @map("utilisateur_id") type String dateVerification DateTime @map("date_verification") commentaire String? createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") emprunt Emprunt @relation(fields: [empruntId], references: [id], onDelete: NoAction, onUpdate: NoAction) utilisateur Utilisateur @relation(fields: [utilisateurId], references: [id], onDelete: NoAction, onUpdate: NoAction) elements ChecklistElement[] @@map("checklist") } model ChecklistElement { id Int @id @default(autoincrement()) checklistId Int @map("checklist_id") accessoireId Int? @map("accessoire_id") nomElement String @map("nom_element") etat String quantiteConstatee Int @map("quantite_constatee") commentaire String? createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") checklist Checklist @relation(fields: [checklistId], references: [id], onDelete: NoAction, onUpdate: NoAction) accessoire Accessoire? @relation(fields: [accessoireId], references: [id], onDelete: NoAction, onUpdate: NoAction) @@map("checklist_element") } model Anomalie { id Int @id @default(autoincrement()) empruntId Int @map("emprunt_id") materielId Int @map("materiel_id") utilisateurId Int @map("utilisateur_id") traiteeParId Int? @map("traitee_par_id") type String description String statut String detecteeAutomatiquement Boolean @default(true) @map("detectee_automatiquement") observation String? dateDetection DateTime @map("date_detection") dateResolution DateTime? @map("date_resolution") createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") emprunt Emprunt @relation(fields: [empruntId], references: [id], onDelete: NoAction, onUpdate: NoAction) materiel Materiel @relation(fields: [materielId], references: [id], onDelete: NoAction, onUpdate: NoAction) etudiant Utilisateur @relation("AnomalieEtudiant", fields: [utilisateurId], references: [id], onDelete: NoAction, onUpdate: NoAction) traitePar Utilisateur? @relation("AnomalieResponsable", fields: [traiteeParId], references: [id], onDelete: NoAction, onUpdate: NoAction) notifications Notification[] @@map("anomalie") } model Notification { id Int @id @default(autoincrement()) utilisateurId Int @map("utilisateur_id") anomalieId Int? @map("anomalie_id") titre String message String type String lu Boolean @default(false) dateCreation DateTime @default(now()) @map("date_creation") utilisateur Utilisateur @relation(fields: [utilisateurId], references: [id], onDelete: NoAction, onUpdate: NoAction) anomalie Anomalie? @relation(fields: [anomalieId], references: [id], onDelete: NoAction, onUpdate: NoAction) @@map("notification") } model Historique { id Int @id @default(autoincrement()) utilisateurId Int @map("utilisateur_id") empruntId Int? @map("emprunt_id") materielId Int? @map("materiel_id") campusId Int? @map("campus_id") sallePretId Int? @map("salle_pret_id") posteEmpruntId Int? @map("poste_emprunt_id") action String description String dateAction DateTime @map("date_action") createdAt DateTime @default(now()) @map("created_at") utilisateur Utilisateur @relation(fields: [utilisateurId], references: [id], onDelete: NoAction, onUpdate: NoAction) emprunt Emprunt? @relation(fields: [empruntId], references: [id], onDelete: NoAction, onUpdate: NoAction) materiel Materiel? @relation(fields: [materielId], references: [id], onDelete: NoAction, onUpdate: NoAction) campus Campus? @relation(fields: [campusId], references: [id], onDelete: NoAction, onUpdate: NoAction) sallePret SallePret? @relation(fields: [sallePretId], references: [id], onDelete: NoAction, onUpdate: NoAction) posteEmprunt PosteEmprunt? @relation(fields: [posteEmpruntId], references: [id], onDelete: NoAction, onUpdate: NoAction) @@map("historique") }