diff --git a/src/main/java/com/projet/projetIndu/bootstrap/DatabaseSeeder.java b/src/main/java/com/projet/projetIndu/bootstrap/DatabaseSeeder.java
index 122c87f153c787b5527c8e5869a0cb6603a98adf..47d3931b01825338171f698ca18d1c484ec8d2c5 100644
--- a/src/main/java/com/projet/projetIndu/bootstrap/DatabaseSeeder.java
+++ b/src/main/java/com/projet/projetIndu/bootstrap/DatabaseSeeder.java
@@ -1,19 +1,16 @@
 package com.projet.projetIndu.bootstrap;
 
 import com.projet.projetIndu.entities.*;
+import com.projet.projetIndu.repositories.*;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.core.io.ClassPathResource;
+import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Component;
-import org.springframework.boot.CommandLineRunner;
-import com.projet.projetIndu.repositories.DoctorRepository;
-import com.projet.projetIndu.repositories.MedicalFilesRepository;
-import com.projet.projetIndu.repositories.PatientRepository;
-import com.projet.projetIndu.repositories.MedicalDocumentRepository;
-import com.projet.projetIndu.repositories.AppointmentRepository;
 
-import java.time.LocalDateTime;
 import java.io.IOException;
-import java.nio.file.Files;
+import java.io.InputStream;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.List;
 
 @Component
@@ -21,75 +18,78 @@ public class DatabaseSeeder implements CommandLineRunner {
 
     private final DoctorRepository doctorRepository;
     private final PatientRepository patientRepository;
-    private final MedicalFilesRepository medicalFilesRepository;
+    private final MedicalFileRepository medicalFileRepository;
     private final MedicalDocumentRepository medicalDocumentRepository;
-    private final AppointmentRepository appointmentRepository; // Ajout du repository des rendez-vous
+    private final AppointmentRepository appointmentRepository;
+    private final PasswordEncoder passwordEncoder;
 
     public DatabaseSeeder(DoctorRepository doctorRepository,
                           PatientRepository patientRepository,
-                          MedicalFilesRepository medicalFilesRepository,
+                          MedicalFileRepository medicalFileRepository,
                           MedicalDocumentRepository medicalDocumentRepository,
-                          AppointmentRepository appointmentRepository) { // Injection du repository
+                          AppointmentRepository appointmentRepository,
+                          PasswordEncoder passwordEncoder) {
         this.doctorRepository = doctorRepository;
         this.patientRepository = patientRepository;
-        this.medicalFilesRepository = medicalFilesRepository;
+        this.medicalFileRepository = medicalFileRepository;
         this.medicalDocumentRepository = medicalDocumentRepository;
         this.appointmentRepository = appointmentRepository;
+        this.passwordEncoder = passwordEncoder;
     }
 
     @Override
     public void run(String... args) {
-        if (medicalFilesRepository.count() == 0) {
-            Doctor doctor1 = new Doctor("Jean", "Dupont", "Généraliste", "jean.dupont@example.com");
-            Doctor doctor2 = new Doctor("Sophie", "Martin", "Cardiologue", "sophie.martin@example.com");
-
+        if (medicalFileRepository.count() == 0) {
+            Doctor doctor1 = new Doctor("Jean", "Dupont", "0444444444", "jean.dupont@example.com", "Generaliste", passwordEncoder.encode("password123"));
+            Doctor doctor2 = new Doctor("Sophie", "Martin", "0455555555", "sophie.martin@example.com", "Cardiologue", passwordEncoder.encode("password123"));
             doctorRepository.saveAll(List.of(doctor1, doctor2));
 
-            //Patient patient1 = new Patient("Paul", "Durand", LocalDate.of(1990, 5, 15), "0678901234", "paul.durand@example.com", "5 Rue des Lilas", "Pollen", "Paracétamol");
-            //Patient patient2 = new Patient("Alice", "Lemoine", LocalDate.of(1985, 10, 20), "0687654321", "alice.lemoine@example.com", "8 Rue du Lac", "Arachide", "Ibuprofène");
-            Patient patient1 = new Patient("Paul", "Durand", LocalDate.parse("1990-05-15"), "0678901234", "paul.durand@example.com", "5 Rue des Lilas", "Pollen", "Paracétamol");
-            Patient patient2 = new Patient("Alice", "Lemoine", LocalDate.parse("1990-05-15"), "0687654321", "alice.lemoine@example.com", "8 Rue du Lac", "Arachide", "Ibuprofène");
-
+            Patient patient1 = new Patient("Paul", "Durand", LocalDate.parse("1990-05-15"), "0678901234", "paul.durand@example.com", "5 Rue des Lilas", passwordEncoder.encode("test123"));
+            Patient patient2 = new Patient("Alice", "Lemoine", LocalDate.parse("1990-05-15"), "0687654321", "alice.lemoine@example.com", "8 Rue du Lac", passwordEncoder.encode("test123"));
             patientRepository.saveAll(List.of(patient1, patient2));
 
-            MedicalFiles file1 = new MedicalFiles(patient1, doctor1, "Antécédents : Opération de l’appendicite.");
-            MedicalFiles file2 = new MedicalFiles(patient2, doctor2, "Antécédents : Hypertension traitée.");
+            MedicalFile file1 = new MedicalFile(patient1, "Arachide", "Ibuprofene");
+            MedicalFile file2 = new MedicalFile(patient2, "Pollen", "Bisoprolol");
+            medicalFileRepository.saveAll(List.of(file1, file2));
 
-            medicalFilesRepository.saveAll(List.of(file1, file2));
+            patient1.setMedicalFile(file1);
+            patient2.setMedicalFile(file2);
+            patientRepository.saveAll(List.of(patient1, patient2));
 
             addDefaultDocument(file1, "documents/exemple1.pdf", "Rapport Médical.pdf");
             addDefaultDocument(file2, "documents/exemple2.pdf", "Résultat Analyse.pdf");
+            medicalFileRepository.saveAll(List.of(file1, file2));
 
             Appointment appointment1 = new Appointment(patient1, doctor1, LocalDateTime.now().plusDays(2), AppointmentStatus.CONFIRMED, "Consultation de suivi");
             Appointment appointment2 = new Appointment(patient2, doctor2, LocalDateTime.now().plusDays(7), AppointmentStatus.PENDING, "Bilan annuel");
-
             appointmentRepository.saveAll(List.of(appointment1, appointment2));
 
-            System.out.println("Données insérées : ");
+            System.out.println("Données insérées :");
             System.out.println("Médecins : " + doctorRepository.count());
             System.out.println("Patients : " + patientRepository.count());
-            System.out.println("Dossiers médicaux : " + medicalFilesRepository.count());
+            System.out.println("Dossiers médicaux : " + medicalFileRepository.count());
             System.out.println("Documents médicaux : " + medicalDocumentRepository.count());
             System.out.println("Rendez-vous : " + appointmentRepository.count());
         }
     }
 
-
-    private void addDefaultDocument(MedicalFiles medicalFile, String filePath, String fileName) {
+    private void addDefaultDocument(MedicalFile medicalFile, String filePath, String fileName) {
         try {
             ClassPathResource resource = new ClassPathResource(filePath);
-            byte[] fileData = Files.readAllBytes(resource.getFile().toPath());
+            try (InputStream inputStream = resource.getInputStream()) {
+                byte[] fileData = inputStream.readAllBytes();
 
-            MedicalDocument document = new MedicalDocument();
-            document.setFileName(fileName);
-            document.setFileData(fileData);
-            document.setMedicalFile(medicalFile);
+                MedicalDocument document = new MedicalDocument();
+                document.setFileName(fileName);
+                document.setFileData(fileData);
+                document.setMedicalFile(medicalFile);
 
-            medicalDocumentRepository.save(document);
+                medicalFile.getDocumentList().add(document);
+                medicalDocumentRepository.save(document);
+            }
         } catch (IOException e) {
             System.err.println("Erreur lors du chargement du fichier " + filePath);
             e.printStackTrace();
         }
     }
-
 }
diff --git a/src/main/java/com/projet/projetIndu/config/SecurityConfig.java b/src/main/java/com/projet/projetIndu/config/SecurityConfig.java
deleted file mode 100644
index a310d6d4dd10e171ded4a70410d68381c1bfa767..0000000000000000000000000000000000000000
--- a/src/main/java/com/projet/projetIndu/config/SecurityConfig.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.projet.projetIndu.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-
-@Configuration
-public class SecurityConfig {
-
-    @Bean
-    public BCryptPasswordEncoder passwordEncoder() {
-        return new BCryptPasswordEncoder();
-    }
-}
diff --git a/src/main/java/com/projet/projetIndu/controllers/LoginController.java b/src/main/java/com/projet/projetIndu/controllers/LoginController.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e23cc15c7a8e0cdb32104b6cfaa477fbb1fec67
--- /dev/null
+++ b/src/main/java/com/projet/projetIndu/controllers/LoginController.java
@@ -0,0 +1,13 @@
+package com.projet.projetIndu.controllers;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@Controller
+public class LoginController {
+
+    @GetMapping("/login")
+    public String showLoginForm() {
+        return "login"; // Correspond à login.html
+    }
+}
diff --git a/src/main/java/com/projet/projetIndu/controllers/MedicalFilesController.java b/src/main/java/com/projet/projetIndu/controllers/MedicalFileController.java
similarity index 76%
rename from src/main/java/com/projet/projetIndu/controllers/MedicalFilesController.java
rename to src/main/java/com/projet/projetIndu/controllers/MedicalFileController.java
index 1b9c62bd947bcaff4ee5827779413a23f27d26e1..12eeb6749f0b826fbce23b9090dedbce24415543 100644
--- a/src/main/java/com/projet/projetIndu/controllers/MedicalFilesController.java
+++ b/src/main/java/com/projet/projetIndu/controllers/MedicalFileController.java
@@ -1,9 +1,9 @@
 package com.projet.projetIndu.controllers;
 
 import com.projet.projetIndu.entities.MedicalDocument;
-import com.projet.projetIndu.entities.MedicalFiles;
+import com.projet.projetIndu.entities.MedicalFile;
 import com.projet.projetIndu.repositories.MedicalDocumentRepository;
-import com.projet.projetIndu.services.MedicalFilesService;
+import com.projet.projetIndu.services.MedicalFileService;
 import org.springframework.http.*;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -12,25 +12,26 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import java.io.IOException;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Optional;
 
 @Controller
 @RequestMapping("/medical-files")
-public class MedicalFilesController {
+public class MedicalFileController {
 
-    private final MedicalFilesService medicalFilesService;
+    private final MedicalFileService medicalFileService;
     private final MedicalDocumentRepository medicalDocumentRepository;
 
-    public MedicalFilesController(MedicalFilesService medicalFilesService, MedicalDocumentRepository medicalDocumentRepository) {
-        this.medicalFilesService = medicalFilesService;
+    public MedicalFileController(MedicalFileService medicalFileService, MedicalDocumentRepository medicalDocumentRepository) {
+        this.medicalFileService = medicalFileService;
         this.medicalDocumentRepository = medicalDocumentRepository;
     }
 
     // Afficher tous les dossiers médicaux
     @GetMapping
     public String listMedicalFiles(Model model) {
-        List<MedicalFiles> medicalFiles = medicalFilesService.getAllMedicalFiles();
+        List<MedicalFile> medicalFiles = medicalFileService.getAllMedicalFiles();
         model.addAttribute("medicalFiles", medicalFiles);
         return "medical-files";
     }
@@ -38,7 +39,7 @@ public class MedicalFilesController {
     // Afficher un dossier médical spécifique
     @GetMapping("/{id}")
     public String viewMedicalFile(@PathVariable Long id, Model model) {
-        return medicalFilesService.getMedicalFileById(id)
+        return medicalFileService.getMedicalFileById(id)
                 .map(medicalFile -> {
                     model.addAttribute("medicalFile", medicalFile);
                     return "view-medical-file";
@@ -48,23 +49,27 @@ public class MedicalFilesController {
 
     // Créer un dossier médical
     @PostMapping("/create")
-    public String createMedicalFile(@ModelAttribute MedicalFiles medicalFiles) {
-        medicalFilesService.saveMedicalFiles(medicalFiles);
+    public String createMedicalFile(@ModelAttribute MedicalFile medicalFile) {
+        medicalFileService.saveMedicalFiles(medicalFile);
         return "redirect:/medical-files";
     }
 
     // Mettre à jour l'historique médical
     @PostMapping("/{id}/history")
-    public String updateMedicalFileHistory(@PathVariable Long id, @RequestParam String history) {
-        medicalFilesService.updateMedicalFileHistory(id, history);
+    public String updateMedicalFileHistory(@PathVariable Long id,
+                                           @RequestParam String antecedent,
+                                           @RequestParam String notes,
+                                           @RequestParam LocalDate consultationDate) {
+        medicalFileService.updateMedicalFileHistory(id, antecedent, notes, consultationDate);
         return "redirect:/medical-files/" + id;
     }
 
+
     // Ajouter un document à un dossier médical
     @PostMapping("/{id}/documents")
     public String uploadMedicalFileDocument(@PathVariable Long id, @RequestParam("document") MultipartFile document) {
         try {
-            medicalFilesService.uploadMedicalFileDocument(id, document);
+            medicalFileService.uploadMedicalFileDocument(id, document);
         } catch (IOException e) {
             e.printStackTrace();
             return "error";
@@ -111,7 +116,7 @@ public class MedicalFilesController {
     // Supprimer un dossier médical
     @DeleteMapping("/{id}")
     public String deleteMedicalFile(@PathVariable Long id) {
-        medicalFilesService.deleteMedicalFileById(id);
+        medicalFileService.deleteMedicalFileById(id);
         return "redirect:/medical-files";
     }
 }
diff --git a/src/main/java/com/projet/projetIndu/controllers/UserController.java b/src/main/java/com/projet/projetIndu/controllers/UserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..78c30c7bb32a9378c526b2b13e0683f2914a574a
--- /dev/null
+++ b/src/main/java/com/projet/projetIndu/controllers/UserController.java
@@ -0,0 +1,37 @@
+package com.projet.projetIndu.controllers;
+
+import com.projet.projetIndu.dto.UserRegistrationDTO;
+import com.projet.projetIndu.services.UserService;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+
+@Controller
+public class UserController {
+    private final UserService userService;
+
+    public UserController(UserService userService) {
+        this.userService = userService;
+    }
+
+    // Affiche le formulaire d'inscription
+    @GetMapping("/register")
+    public String showRegistrationForm(Model model) {
+        model.addAttribute("userDTO", new UserRegistrationDTO());
+        return "register";
+    }
+
+    // Traite le formulaire d'inscription
+    @PostMapping("/register")
+    public String registerUser(@ModelAttribute("userDTO") UserRegistrationDTO userDTO, Model model) {
+        try {
+            userService.registerUser(userDTO);
+            return "redirect:/login";
+        } catch (IllegalArgumentException e) {
+            model.addAttribute("error", e.getMessage());
+            return "register";
+        }
+    }
+}
diff --git a/src/main/java/com/projet/projetIndu/dto/UserRegistrationDTO.java b/src/main/java/com/projet/projetIndu/dto/UserRegistrationDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..78114498b32bbff49c69a8fb16c0db52747dabb2
--- /dev/null
+++ b/src/main/java/com/projet/projetIndu/dto/UserRegistrationDTO.java
@@ -0,0 +1,21 @@
+package com.projet.projetIndu.dto;
+
+import com.projet.projetIndu.entities.Role;
+import lombok.Getter;
+import lombok.Setter;
+import java.time.LocalDate;
+
+@Getter
+@Setter
+public class UserRegistrationDTO {
+    private String firstName;
+    private String lastName;
+    private String phoneNumber;
+    private String email; //utilisé comme username
+    private String password;
+    private Role role;
+    private String speciality; // Uniquement pour les doctors
+    private LocalDate dateOfBirth; // Uniquement pour les patients
+    private String address; // Uniquement pour les patients
+}
+
diff --git a/src/main/java/com/projet/projetIndu/entities/Admin.java b/src/main/java/com/projet/projetIndu/entities/Admin.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1afc5dbeb0b6a8a36f481f9de9aca6d29a88a66
--- /dev/null
+++ b/src/main/java/com/projet/projetIndu/entities/Admin.java
@@ -0,0 +1,14 @@
+package com.projet.projetIndu.entities;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.DiscriminatorValue;
+import jakarta.persistence.Entity;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Entity
+@DiscriminatorValue("ADMIN")
+public class Admin extends User {
+}
diff --git a/src/main/java/com/projet/projetIndu/entities/Appointment.java b/src/main/java/com/projet/projetIndu/entities/Appointment.java
index db74bfeb5727f407db6f4ae4a22acf967ad5ea3d..5af4c61c08ceb90a19d5f148a61ac29223fcb57c 100644
--- a/src/main/java/com/projet/projetIndu/entities/Appointment.java
+++ b/src/main/java/com/projet/projetIndu/entities/Appointment.java
@@ -1,6 +1,7 @@
 package com.projet.projetIndu.entities;
 
 import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -13,6 +14,7 @@ import java.time.LocalDateTime;
 @Getter
 @Setter
 @NoArgsConstructor
+@AllArgsConstructor
 public class Appointment {
 
     @Id
@@ -28,7 +30,7 @@ public class Appointment {
     private Doctor doctor;
 
     @OneToOne
-    @JoinColumn(name = "invoice_id", nullable = false)
+    @JoinColumn(name = "invoice_id", nullable = true)
     private Invoice invoice;
 
     @DateTimeFormat(pattern = "dd/MM/yyyy HH:mm")
@@ -55,5 +57,4 @@ public class Appointment {
     }
 
 
-
 }
diff --git a/src/main/java/com/projet/projetIndu/entities/Doctor.java b/src/main/java/com/projet/projetIndu/entities/Doctor.java
index 5ac0d61f52caab8281dd5c95418f280639a502d2..cc524e6a6a2b320b75e1d7d8c1c75d3ca20a98a1 100644
--- a/src/main/java/com/projet/projetIndu/entities/Doctor.java
+++ b/src/main/java/com/projet/projetIndu/entities/Doctor.java
@@ -1,25 +1,32 @@
 package com.projet.projetIndu.entities;
 
-import jakarta.persistence.*;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.DiscriminatorValue;
+import jakarta.persistence.Entity;
+import jakarta.persistence.OneToMany;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
-import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
 
 @Entity
-@Table(name = "doctors")
 @Getter
 @Setter
+@DiscriminatorValue("DOCTOR")
 @NoArgsConstructor
 public class Doctor extends User {
     private String speciality;
 
+    @OneToMany(mappedBy = "doctor", cascade = CascadeType.ALL, orphanRemoval = true)
+    private List<Appointment> appointmentList = new ArrayList<>();
 
-    public Doctor(String firstName, String lastName, String phoneNumber, String email, String address, String username, String password, Role role) {
-        super(firstName, lastName, phoneNumber, email, address, username, password, role);
+    public Doctor(String firstName, String lastName, String phoneNumber, String email, String speciality, String password) {
+        super(firstName, lastName, phoneNumber, email, password);
+        this.role = Role.DOCTOR;
         this.speciality = speciality;
     }
 
 
-    }
+}
diff --git a/src/main/java/com/projet/projetIndu/entities/HealthHistorical.java b/src/main/java/com/projet/projetIndu/entities/HealthHistorical.java
index 6ee646eb12c40f220cf10f619b24af42263684bd..9fc91300c0c153919cdd3683f080f37bfc0a2b47 100644
--- a/src/main/java/com/projet/projetIndu/entities/HealthHistorical.java
+++ b/src/main/java/com/projet/projetIndu/entities/HealthHistorical.java
@@ -6,12 +6,13 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 @Entity
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-class HealthHistorical {
+public class HealthHistorical {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
@@ -20,4 +21,8 @@ class HealthHistorical {
     private String notes;
     private LocalDate consultationDate;
 
+    @ManyToOne
+    @JoinColumn(name = "medical_file_id", nullable = false)
+    private MedicalFile medicalFile;
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/projet/projetIndu/entities/MedicalDocument.java b/src/main/java/com/projet/projetIndu/entities/MedicalDocument.java
index 2dba3ee5677ab45a89dd272e59df0f8cbe0b7e5e..fab8f1650b5d1e210af010aab967644ba6c9ed1d 100644
--- a/src/main/java/com/projet/projetIndu/entities/MedicalDocument.java
+++ b/src/main/java/com/projet/projetIndu/entities/MedicalDocument.java
@@ -20,4 +20,8 @@ public class MedicalDocument {
     @Column(columnDefinition = "LONGBLOB")
     private byte[] fileData;
 
+    @ManyToOne
+    @JoinColumn(name = "medical_file_id", nullable = true)
+    private MedicalFile medicalFile;
+
 }
diff --git a/src/main/java/com/projet/projetIndu/entities/MedicalFiles.java b/src/main/java/com/projet/projetIndu/entities/MedicalFile.java
similarity index 61%
rename from src/main/java/com/projet/projetIndu/entities/MedicalFiles.java
rename to src/main/java/com/projet/projetIndu/entities/MedicalFile.java
index ab3cf39b445c5c1aa89ac68c61747e75b7f7c9b3..d83a62f11d3ba9aa8e5924d75352553dbdcf3431 100644
--- a/src/main/java/com/projet/projetIndu/entities/MedicalFiles.java
+++ b/src/main/java/com/projet/projetIndu/entities/MedicalFile.java
@@ -1,6 +1,7 @@
 package com.projet.projetIndu.entities;
 
 import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -14,7 +15,8 @@ import java.util.List;
 @Getter
 @Setter
 @NoArgsConstructor
-public class MedicalFiles {
+@AllArgsConstructor
+public class MedicalFile {
 
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -23,21 +25,25 @@ public class MedicalFiles {
     private String allergy;
     private String treatment;
 
-    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    @OneToMany(mappedBy = "medicalFile", cascade = CascadeType.ALL, orphanRemoval = true)
     private List<HealthHistorical> healthHistoricalList = new ArrayList<>();
 
-    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
+    @OneToOne
     @JoinColumn(name = "patient_id", nullable = false)
     private Patient patient;
 
-    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    @OneToMany(mappedBy = "medicalFile", cascade = CascadeType.ALL, orphanRemoval = true)
     private List<MedicalDocument> documentList = new ArrayList<>();
 
     @Column(nullable = false, updatable = false)
     private LocalDateTime createdAt = LocalDateTime.now();
 
 
-    public MedicalFiles(Patient patient) {
+    public MedicalFile(Patient patient, String allergy, String treatment) {
         this.patient = patient;
+        this.allergy = allergy;
+        this.treatment = treatment;
+        this.healthHistoricalList = new ArrayList<>();
+        this.documentList = new ArrayList<>();
     }
 }
diff --git a/src/main/java/com/projet/projetIndu/entities/Notification.java b/src/main/java/com/projet/projetIndu/entities/Notification.java
index 3076f3a2012911a95de403078a2c3f860c087cb3..46f222f6dae1d13bc3b0876f8b9bd489ff01a963 100644
--- a/src/main/java/com/projet/projetIndu/entities/Notification.java
+++ b/src/main/java/com/projet/projetIndu/entities/Notification.java
@@ -31,4 +31,9 @@ public class Notification {
 
     @Column(nullable = false, updatable = false)
     private LocalDateTime createdAt = LocalDateTime.now();
+
+    @ManyToOne
+    @JoinColumn(name = "user_id", nullable = false)
+    private User user;
+
 }
diff --git a/src/main/java/com/projet/projetIndu/entities/Patient.java b/src/main/java/com/projet/projetIndu/entities/Patient.java
index 8765aef4161baa280fe13098753b62481d6cbf61..047a23746e42ecaea0ffeeaabf901472d0fe22f5 100644
--- a/src/main/java/com/projet/projetIndu/entities/Patient.java
+++ b/src/main/java/com/projet/projetIndu/entities/Patient.java
@@ -4,28 +4,30 @@ import jakarta.persistence.*;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
-import org.springframework.data.domain.Auditable;
 
 import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.Date;
+import java.util.ArrayList;
 import java.util.List;
 
 @Entity
-@Table(name = "patients")
 @Getter
 @Setter
+@DiscriminatorValue("PATIENT")
 @NoArgsConstructor
 public class Patient extends User {
 
-    @Column(nullable = false)
     private LocalDate dateOfBirth;
 
+    @OneToMany(mappedBy = "patient", cascade = CascadeType.ALL)
+    private List<Appointment> appointmentList = new ArrayList<>();
 
-    public Patient(String firstName, String lastName, String phoneNumber, String email, String address, String username, String password, Role role) {
-        super(firstName, lastName, phoneNumber, email, address, username, password, role);
-        this.dateOfBirth = LocalDate.now();
+    @OneToOne(mappedBy = "patient", cascade = CascadeType.ALL)
+    private MedicalFile medicalFile;
 
+    public Patient(String firstName, String lastName, LocalDate dateOfBirth, String phoneNumber, String email, String address, String password) {
+        super(firstName, lastName, phoneNumber, email, address, password);
+        this.role = Role.PATIENT;
+        this.dateOfBirth = dateOfBirth;
     }
 
 
diff --git a/src/main/java/com/projet/projetIndu/entities/Statistic.java b/src/main/java/com/projet/projetIndu/entities/Statistic.java
deleted file mode 100644
index 2dd50fce1eb2c74b7cffd7163c50e12f9c49e835..0000000000000000000000000000000000000000
--- a/src/main/java/com/projet/projetIndu/entities/Statistic.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.projet.projetIndu.entities;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.Date;
-
-@Entity
-@Table(name = "statistics")
-@Getter
-@Setter
-@NoArgsConstructor
-public class Statistic {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    @ManyToOne
-    @JoinColumn(name = "doctor_id", nullable = false)
-    private Doctor doctor;
-
-    @Column(nullable = false)
-    private LocalDate date;
-
-    private int consultationCount;
-    private int patientCount;
-    private double totalIncome;
-
-    @Column(nullable = false, updatable = false)
-    private LocalDateTime createdAt = LocalDateTime.now();
-}
diff --git a/src/main/java/com/projet/projetIndu/entities/User.java b/src/main/java/com/projet/projetIndu/entities/User.java
index 6d0b0f8cc5d67610431ad2644ea87b71dcd833cc..709f0de420efba52e07ace80394d1d2735e68240 100644
--- a/src/main/java/com/projet/projetIndu/entities/User.java
+++ b/src/main/java/com/projet/projetIndu/entities/User.java
@@ -16,7 +16,7 @@ import java.util.List;
 @NoArgsConstructor
 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
 @DiscriminatorColumn(name = "role", discriminatorType = DiscriminatorType.STRING)
-abstract class User {
+public abstract class User {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
@@ -27,34 +27,40 @@ abstract class User {
     private String lastName;
     private String phoneNumber;
     @Column(unique = true, nullable = false)
-    private String email;
+    private String email; // Utilisé comme identifiant
     private String address;
 
-    @Column(nullable = false, unique = true)
-    private String username;
 
     @Column(nullable = false)
     private String password;
 
     @Enumerated(EnumType.STRING)
-    @Column(nullable = false)
-    private Role role;
+    @Column(nullable = false, updatable = false, insertable = false)
+    protected Role role;
 
-    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
     private List<Notification> notificationList = new ArrayList<>();
 
     @Column(nullable = false, updatable = false)
     private LocalDateTime createdAt = LocalDateTime.now();
 
-    protected User(String firstName, String lastName, String phoneNumber, String email, String address, String username, String password, Role role) {
+    protected User(String firstName, String lastName, String phoneNumber, String email, String address, String password) {
         this.firstName = firstName;
         this.lastName = lastName;
         this.phoneNumber = phoneNumber;
         this.email = email;
         this.address = address;
-        this.username = username;
         this.password = password;
-        this.role = role;
     }
 
+
+    protected User(String firstName, String lastName, String phoneNumber, String email, String password) {
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.phoneNumber = phoneNumber;
+        this.email = email;
+        this.password = password;
+    }
+
+
 }
diff --git a/src/main/java/com/projet/projetIndu/repositories/AdminRepository.java b/src/main/java/com/projet/projetIndu/repositories/AdminRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..c170bd69e3740a27b629b74605b27196721d0bde
--- /dev/null
+++ b/src/main/java/com/projet/projetIndu/repositories/AdminRepository.java
@@ -0,0 +1,7 @@
+package com.projet.projetIndu.repositories;
+
+import com.projet.projetIndu.entities.Admin;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface AdminRepository extends JpaRepository<Admin, Long> {
+}
diff --git a/src/main/java/com/projet/projetIndu/repositories/MedicalFileRepository.java b/src/main/java/com/projet/projetIndu/repositories/MedicalFileRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..54f79ccf4eacc1bcce09978871aa887cb2df20e1
--- /dev/null
+++ b/src/main/java/com/projet/projetIndu/repositories/MedicalFileRepository.java
@@ -0,0 +1,8 @@
+package com.projet.projetIndu.repositories;
+
+import com.projet.projetIndu.entities.MedicalFile;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface MedicalFileRepository extends JpaRepository<MedicalFile, Long> {
+
+}
diff --git a/src/main/java/com/projet/projetIndu/repositories/MedicalFilesRepository.java b/src/main/java/com/projet/projetIndu/repositories/MedicalFilesRepository.java
deleted file mode 100644
index 6d6d04f962c65f7d6ba1e5ec7ef3c737f2635db3..0000000000000000000000000000000000000000
--- a/src/main/java/com/projet/projetIndu/repositories/MedicalFilesRepository.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.projet.projetIndu.repositories;
-
-import com.projet.projetIndu.entities.MedicalFiles;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface MedicalFilesRepository extends JpaRepository<MedicalFiles, Long> {
-
-}
diff --git a/src/main/java/com/projet/projetIndu/repositories/StatisticRepository.java b/src/main/java/com/projet/projetIndu/repositories/StatisticRepository.java
deleted file mode 100644
index 23e51eb7da8a15dde3a1aad2f37267e8397c7585..0000000000000000000000000000000000000000
--- a/src/main/java/com/projet/projetIndu/repositories/StatisticRepository.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.projet.projetIndu.repositories;
-
-import com.projet.projetIndu.entities.Statistic;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface StatisticRepository extends JpaRepository<Statistic, Long> {
-}
diff --git a/src/main/java/com/projet/projetIndu/repositories/UserRepository.java b/src/main/java/com/projet/projetIndu/repositories/UserRepository.java
index 4469777bd63b5c7e998b99ff6b15ac938dc0d2d6..b0a4cd35c13138dcee7cf27f74a24e857a5a0b35 100644
--- a/src/main/java/com/projet/projetIndu/repositories/UserRepository.java
+++ b/src/main/java/com/projet/projetIndu/repositories/UserRepository.java
@@ -7,9 +7,6 @@ import java.util.Optional;
 
 public interface UserRepository extends JpaRepository<User,Long> {
 
-    //trouver l'utilisateur avec son username
-    Optional<User> findByUsername(String username);
-
-    //vérifie si le username existe déjà
-    boolean existsByUsername(String username);
+    Optional<User> findByEmail(String email);
+    boolean existsByEmail(String email);
 }
diff --git a/src/main/java/com/projet/projetIndu/security/CustomUserDetailsService.java b/src/main/java/com/projet/projetIndu/security/CustomUserDetailsService.java
new file mode 100644
index 0000000000000000000000000000000000000000..35e1e524e775e656de41371a8554484cc27c1422
--- /dev/null
+++ b/src/main/java/com/projet/projetIndu/security/CustomUserDetailsService.java
@@ -0,0 +1,34 @@
+package com.projet.projetIndu.security;
+
+import com.projet.projetIndu.entities.User;
+import com.projet.projetIndu.repositories.UserRepository;
+import jakarta.transaction.Transactional;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CustomUserDetailsService implements UserDetailsService {
+
+    private final UserRepository userRepository;
+
+    public CustomUserDetailsService(UserRepository userRepository) {
+        this.userRepository = userRepository;
+    }
+
+    @Override
+    @Transactional
+    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
+        User user = userRepository.findByEmail(email)
+                .orElseThrow(() -> new UsernameNotFoundException("Utilisateur non trouvé avec l'email : " + email));
+
+        return org.springframework.security.core.userdetails.User.builder()
+                .username(user.getEmail()) // L'email sert d'identifiant
+                .password(user.getPassword()) // Mot de passe hashé en BDD
+                .roles(user.getRole().name()) // Récupération du rôle
+                .build();
+    }
+
+}
+
diff --git a/src/main/java/com/projet/projetIndu/security/SecurityConfig.java b/src/main/java/com/projet/projetIndu/security/SecurityConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..b40bb41a80957938ad3f708ac00cbc747cf0d0a5
--- /dev/null
+++ b/src/main/java/com/projet/projetIndu/security/SecurityConfig.java
@@ -0,0 +1,52 @@
+package com.projet.projetIndu.security;
+
+import com.projet.projetIndu.repositories.UserRepository;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.web.SecurityFilterChain;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+
+@Configuration
+public class SecurityConfig {
+
+    @Bean
+    public BCryptPasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder();
+    }
+
+
+    @Bean
+    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
+        http
+                .authorizeHttpRequests(auth -> auth
+                .requestMatchers("/admin/**").hasRole("ADMIN") // Accès réservé aux admins
+                .requestMatchers("/doctors/**").hasRole("DOCTOR") // Accès aux médecins
+                .requestMatchers("/patients/**").hasRole("PATIENT") // Accès aux patients
+                .anyRequest().authenticated()
+        )
+                .formLogin(form -> form
+                        .loginPage("/login")
+                        .usernameParameter("email")
+                        .defaultSuccessUrl("/", true)
+                        .permitAll()
+                )
+                .logout(logout -> logout
+                        .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
+                        .logoutSuccessUrl("/login?logout")
+                        .permitAll()
+                );
+
+
+        return http.build();
+    }
+
+    @Bean
+    public UserDetailsService userDetailsService(UserRepository userRepository) {
+        return new CustomUserDetailsService(userRepository);
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/projet/projetIndu/services/MedicalFilesService.java b/src/main/java/com/projet/projetIndu/services/MedicalFileService.java
similarity index 57%
rename from src/main/java/com/projet/projetIndu/services/MedicalFilesService.java
rename to src/main/java/com/projet/projetIndu/services/MedicalFileService.java
index b81b8f6e51a45b64ac00a28bfaacd537ec496b10..e016e43aa52b68cce1801f77899813c88219e6ea 100644
--- a/src/main/java/com/projet/projetIndu/services/MedicalFilesService.java
+++ b/src/main/java/com/projet/projetIndu/services/MedicalFileService.java
@@ -1,59 +1,66 @@
 package com.projet.projetIndu.services;
 
-import com.projet.projetIndu.entities.Doctor;
+import com.projet.projetIndu.entities.HealthHistorical;
 import com.projet.projetIndu.entities.MedicalDocument;
-import com.projet.projetIndu.entities.MedicalFiles;
-import com.projet.projetIndu.entities.Patient;
-import com.projet.projetIndu.repositories.MedicalFilesRepository;
-import jakarta.annotation.PostConstruct;
-import jakarta.persistence.EntityNotFoundException;
+import com.projet.projetIndu.entities.MedicalFile;
+import com.projet.projetIndu.repositories.MedicalFileRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Optional;
 
 @Service
-public class MedicalFilesService {
-    private final MedicalFilesRepository medicalFilesRepository;
-    //private final List<MedicalFiles> medicalFilesList = new ArrayList<>();
+public class MedicalFileService {
+    private final MedicalFileRepository medicalFileRepository;
+    //private final List<MedicalFile> medicalFilesList = new ArrayList<>();
 
     @Autowired
-    public MedicalFilesService(MedicalFilesRepository medicalFilesRepository) {
-        this.medicalFilesRepository = medicalFilesRepository;
+    public MedicalFileService(MedicalFileRepository medicalFileRepository) {
+        this.medicalFileRepository = medicalFileRepository;
     }
 
-    public List<MedicalFiles> getAllMedicalFiles() {
-        return medicalFilesRepository.findAll();
+    public List<MedicalFile> getAllMedicalFiles() {
+        return medicalFileRepository.findAll();
     }
 
-    public Optional<MedicalFiles> getMedicalFileById(Long id) {
-        return medicalFilesRepository.findById(id);
+    public Optional<MedicalFile> getMedicalFileById(Long id) {
+        return medicalFileRepository.findById(id);
     }
 
-    public MedicalFiles saveMedicalFiles(MedicalFiles medicalFiles) {
-        return medicalFilesRepository.save(medicalFiles);
+    public MedicalFile saveMedicalFiles(MedicalFile medicalFile) {
+        return medicalFileRepository.save(medicalFile);
     }
 
     public void deleteMedicalFileById(Long id) {
-        medicalFilesRepository.deleteById(id);
+        medicalFileRepository.deleteById(id);
     }
 
-    public void updateMedicalFileHistory(Long id, String history) {
-        Optional<MedicalFiles> optionalMedicalFile = medicalFilesRepository.findById(id);
+    public void updateMedicalFileHistory(Long id, String antecedent, String notes, LocalDate consultationDate) {
+        Optional<MedicalFile> optionalMedicalFile = medicalFileRepository.findById(id);
         if (optionalMedicalFile.isPresent()) {
-            MedicalFiles medicalFile = optionalMedicalFile.get();
-            medicalFile.setHistory(history); // Mise à jour de l'historique
-            medicalFilesRepository.save(medicalFile);
+            MedicalFile medicalFile = optionalMedicalFile.get();
+
+            HealthHistorical healthHistorical = new HealthHistorical();
+            healthHistorical.setAntecedent(antecedent);
+            healthHistorical.setNotes(notes);
+            healthHistorical.setConsultationDate(consultationDate);
+            healthHistorical.setMedicalFile(medicalFile);
+
+            medicalFile.getHealthHistoricalList().add(healthHistorical);
+
+            medicalFileRepository.save(medicalFile);
         }
     }
 
+
+
     public void uploadMedicalFileDocument(Long medicalFileId, MultipartFile file) throws IOException {
-        MedicalFiles medicalFile = medicalFilesRepository.findById(medicalFileId)
+        MedicalFile medicalFile = medicalFileRepository.findById(medicalFileId)
                 .orElseThrow(() -> new RuntimeException("Dossier médical introuvable"));
 
         MedicalDocument document = new MedicalDocument();
@@ -62,8 +69,8 @@ public class MedicalFilesService {
         document.setFileData(file.getBytes());
         document.setMedicalFile(medicalFile);
 
-        medicalFile.getDocuments().add(document);
-        medicalFilesRepository.save(medicalFile);
+        medicalFile.getDocumentList().add(document);
+        medicalFileRepository.save(medicalFile);
     }
 
 
@@ -85,14 +92,14 @@ public class MedicalFilesService {
 //        Patient patient1 = new Patient(1L, "Pierre", "Martinez", "10/05/1980", "0654789652", "jean.dupont@email.com", "1 rue de Paris", "Pollen", "Aspirine");
 //        Doctor doctor1 = new Doctor(1L, "Jean", "Dupont", "Cardiologue", "jean.dupont@example.com");
 //
-//        medicalFilesList.add(new MedicalFiles(1L, patient1, doctor1, "Aucun antécédent majeur."));
+//        medicalFilesList.add(new MedicalFile(1L, patient1, doctor1, "Aucun antécédent majeur."));
 //    }
 //
-//    public List<MedicalFiles> getAllMedicalFiles() {
+//    public List<MedicalFile> getAllMedicalFiles() {
 //        return medicalFilesList;
 //    }
 
-//    public Optional<MedicalFiles> getMedicalFileById(Long id) {
+//    public Optional<MedicalFile> getMedicalFileById(Long id) {
 //        return medicalFilesList.stream().filter(mf -> mf.getId().equals(id)).findFirst();
 //    }
 
@@ -104,7 +111,7 @@ public class MedicalFilesService {
 //    }
 
     /// Pour le codage en dur (à retirer ensuite avec la BDD)
-//    public List<MedicalFiles> getAllMedicalFiles() {
+//    public List<MedicalFile> getAllMedicalFiles() {
 //        // Récupérer les patients et médecins en dur
 //        Patient patient1 = new Patient(1L, "Pierre", "Martinez", "10/05/1980", "0654789652", "jean.dupont@email.com", "1 rue de Paris", "Pollen", "Aspirine");
 //        Patient patient2 = new Patient(2L, "Marine", "Boz", "19/10/2001", "066666666", "marine.boz@email.com", "10 rue de Marseille", "Péniciline", "Bisoce");
@@ -115,9 +122,9 @@ public class MedicalFilesService {
 //        Doctor doctor3 = new Doctor(3L, "Paul", "Durand", "Généraliste", "paul.durand@example.com");
 //
 //        return Arrays.asList(
-//                new MedicalFiles(1L, patient1, doctor1, "Aucun antécédent majeur."),
-//                new MedicalFiles(2L, patient2, doctor2, "Allergie à la pénicilline."),
-//                new MedicalFiles(3L, patient3, doctor3, "Diabète de type 2.")
+//                new MedicalFile(1L, patient1, doctor1, "Aucun antécédent majeur."),
+//                new MedicalFile(2L, patient2, doctor2, "Allergie à la pénicilline."),
+//                new MedicalFile(3L, patient3, doctor3, "Diabète de type 2.")
 //        );
 //    }
 
@@ -129,13 +136,13 @@ public class MedicalFilesService {
 //                .ifPresent(mf -> mf.setDocuments(document)); // Mise à jour du document
 //    }
 //    // DUR
-//    public void saveMedicalFile(MedicalFiles medicalFile) {
-//        medicalFilesRepository.save(medicalFile); // Persiste en base
+//    public void saveMedicalFile(MedicalFile medicalFile) {
+//        medicalFileRepository.save(medicalFile); // Persiste en base
 //    }
 
 //    ///En dur
-//    public Optional<MedicalFiles> getMedicalFileById(Long id) {
-//        List<MedicalFiles> medicalFilesList = getAllMedicalFiles(); // Récupère les données en dur
+//    public Optional<MedicalFile> getMedicalFileById(Long id) {
+//        List<MedicalFile> medicalFilesList = getAllMedicalFiles(); // Récupère les données en dur
 //        return medicalFilesList.stream()
 //                .filter(medicalFile -> medicalFile.getId().equals(id))
 //                .findFirst();
@@ -143,9 +150,9 @@ public class MedicalFilesService {
 //
 //    //En dur (remplace saveMedicalFiles pour l'instant)
 //    public void updateMedicalFile(Long id, String history, String documents) {
-//        List<MedicalFiles> medicalFilesList = getAllMedicalFiles();
+//        List<MedicalFile> medicalFilesList = getAllMedicalFiles();
 //
-//        for (MedicalFiles file : medicalFilesList) {
+//        for (MedicalFile file : medicalFilesList) {
 //            if (file.getId().equals(id)) {
 //                file.setHistory(history);
 //                file.setDocuments(documents.getBytes());
diff --git a/src/main/java/com/projet/projetIndu/services/StatisticService.java b/src/main/java/com/projet/projetIndu/services/StatisticService.java
deleted file mode 100644
index 3f6b19ad33d3ebfe96e0e28e0253b5f6694f85b1..0000000000000000000000000000000000000000
--- a/src/main/java/com/projet/projetIndu/services/StatisticService.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.projet.projetIndu.services;
-
-import com.projet.projetIndu.entities.Statistic;
-import com.projet.projetIndu.repositories.StatisticRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class StatisticService {
-    private final StatisticRepository statisticRepository;
-
-    @Autowired
-    public StatisticService(StatisticRepository statisticRepository) {
-        this.statisticRepository = statisticRepository;
-    }
-
-    public List<Statistic> getAllStatistics() {
-        return statisticRepository.findAll();
-    }
-
-    public Optional<Statistic> getStatisticById(Long id) {
-        return statisticRepository.findById(id);
-    }
-
-    public Statistic saveStatistic(Statistic statistic) {
-        return statisticRepository.save(statistic);
-    }
-
-    public void deleteStatisticById(Long id) {
-        statisticRepository.deleteById(id);
-    }
-
-}
diff --git a/src/main/java/com/projet/projetIndu/services/UserService.java b/src/main/java/com/projet/projetIndu/services/UserService.java
index f0cf7237d51bffa0efb488745030cb576f8bfbe4..c59a4bb7b9a2b9319c04aa96b9956edbb0690c37 100644
--- a/src/main/java/com/projet/projetIndu/services/UserService.java
+++ b/src/main/java/com/projet/projetIndu/services/UserService.java
@@ -1,7 +1,7 @@
 package com.projet.projetIndu.services;
 
-import com.projet.projetIndu.entities.Role;
-import com.projet.projetIndu.entities.User;
+import com.projet.projetIndu.dto.UserRegistrationDTO;
+import com.projet.projetIndu.entities.*;
 import com.projet.projetIndu.repositories.UserRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -10,13 +10,15 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Optional;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import static com.projet.projetIndu.entities.Role.*;
 
 
 @Service
-public class UserService implements UserDetailsService{
+public class UserService implements UserDetailsService {
     private final UserRepository userRepository;
     private final BCryptPasswordEncoder passwordEncoder;
 
@@ -30,8 +32,8 @@ public class UserService implements UserDetailsService{
         return userRepository.findAll();
     }
 
-    public Optional<User> getUserByUsername(String username) {
-        return userRepository.findByUsername(username);
+    public Optional<User> getUserByUsername(String email) {
+        return userRepository.findByEmail(email);
     }
 
     public Optional<User> getUserById(Long id) {
@@ -46,20 +48,63 @@ public class UserService implements UserDetailsService{
         userRepository.deleteById(id);
     }
 
-    public User registerUser(String username, String password, Role role) {
-        String encodedPassword = passwordEncoder.encode(password);
-        User user = new User(username, encodedPassword, role);
+    public User registerUser(UserRegistrationDTO userDTO) {
+        // Vérifier si un utilisateur avec cet email existe déjà
+        if (userRepository.existsByEmail(userDTO.getEmail())) {
+            throw new IllegalArgumentException("Email already taken");
+        }
+
+        String encodedPassword = passwordEncoder.encode(userDTO.getPassword());
+        User user;
+
+        try {
+            Role role = Role.valueOf(String.valueOf(userDTO.getRole())); // Conversion du String en Role Enum
+
+            switch (role) {
+                case DOCTOR -> {
+                    Doctor doctor = new Doctor();
+                    doctor.setSpeciality(userDTO.getSpeciality());
+                    user = doctor;
+                }
+                case PATIENT -> {
+                    Patient patient = new Patient();
+                    patient.setDateOfBirth(userDTO.getDateOfBirth());
+                    patient.setAddress(userDTO.getAddress());
+                    user = patient;
+                }
+                case ADMIN -> {
+                    user = new Admin();
+                }
+                default -> throw new IllegalArgumentException("Invalid role");
+            }
+        } catch (IllegalArgumentException e) {
+            throw new IllegalArgumentException("Invalid role provided: " + userDTO.getRole());
+        }
+
+        // Remplissage des données utilisateur
+        user.setFirstName(userDTO.getFirstName());
+        user.setLastName(userDTO.getLastName());
+        user.setPhoneNumber(userDTO.getPhoneNumber());
+        user.setEmail(userDTO.getEmail());
+        user.setPassword(encodedPassword);
+
         return userRepository.save(user);
     }
 
+
+
+
     @Override
-    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-        User user = userRepository.findByUsername(username)
+    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
+        User user = userRepository.findByEmail(email)
                 .orElseThrow(() -> new UsernameNotFoundException("User not found"));
+
         return org.springframework.security.core.userdetails.User
-                .withUsername(user.getUsername())
+                .withUsername(user.getEmail())
                 .password(user.getPassword())
-                .roles(user.getRole().name())
+                .authorities(user.getClass().getSimpleName()) // Utilisation de la classe comme rôle
                 .build();
     }
+
 }
+
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 60271139666e855654cd601699e982c74e79c0d7..637d0247258236c716ec851121420aac3f116ff2 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,20 +1,19 @@
 spring.application.name=projetIndu
+
 spring.datasource.url=jdbc:mysql://localhost:3306/projet
 spring.datasource.username=root
 spring.datasource.password=jessie
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
-spring.jpa.hibernate.ddl-auto=update
+spring.jpa.hibernate.ddl-auto=create-drop
 spring.jpa.show-sql=true
-spring.jpa.properties.hibernate.format_sql=true
+
 spring.thymeleaf.prefix=classpath:/templates/
 spring.thymeleaf.suffix=.html
 spring.thymeleaf.cache=false
+
 spring.servlet.multipart.max-file-size=100MB
 spring.servlet.multipart.max-request-size=100MB
 spring.mvc.hiddenmethod.filter.enabled=true
 
-
-
-
-spring.banner.location=banner.txt
\ No newline at end of file
+spring.banner.location=banner.txt
diff --git a/src/main/resources/sqls/create-tables.sql b/src/main/resources/sqls/create-tables.sql
new file mode 100644
index 0000000000000000000000000000000000000000..7325dd15b416384fd1584fce0630b9c7a180815d
--- /dev/null
+++ b/src/main/resources/sqls/create-tables.sql
@@ -0,0 +1,68 @@
+CREATE TABLE users (
+                       id BIGINT AUTO_INCREMENT PRIMARY KEY,
+                       first_name VARCHAR(255) NOT NULL,
+                       last_name VARCHAR(255) NOT NULL,
+                       phone_number VARCHAR(255),
+                       email VARCHAR(255) UNIQUE NOT NULL,
+                       address VARCHAR(255),
+                       password VARCHAR(255) NOT NULL,
+                       role VARCHAR(50) NOT NULL,
+                       created_at DATETIME NOT NULL
+) ENGINE=InnoDB;
+
+CREATE TABLE notifications (
+                               id BIGINT AUTO_INCREMENT PRIMARY KEY,
+                               content TEXT,
+                               type VARCHAR(50) NOT NULL,
+                               status VARCHAR(50) NOT NULL,
+                               created_at DATETIME NOT NULL
+) ENGINE=InnoDB;
+
+CREATE TABLE invoices (
+                          id BIGINT AUTO_INCREMENT PRIMARY KEY,
+                          amount DOUBLE NOT NULL,
+                          issue_date DATETIME NOT NULL,
+                          status VARCHAR(50) NOT NULL,
+                          created_at DATETIME NOT NULL
+) ENGINE=InnoDB;
+
+CREATE TABLE appointments (
+                              id BIGINT AUTO_INCREMENT PRIMARY KEY,
+                              patient_id BIGINT NOT NULL,
+                              doctor_id BIGINT NOT NULL,
+                              invoice_id BIGINT,
+                              date_time DATETIME NOT NULL,
+                              status VARCHAR(50) NOT NULL,
+                              reason TEXT NOT NULL,
+                              created_at DATETIME NOT NULL,
+                              FOREIGN KEY (patient_id) REFERENCES users(id),
+                              FOREIGN KEY (doctor_id) REFERENCES users(id),
+                              FOREIGN KEY (invoice_id) REFERENCES invoices(id)
+) ENGINE=InnoDB;
+
+CREATE TABLE medical_files (
+                               id BIGINT AUTO_INCREMENT PRIMARY KEY,
+                               allergy VARCHAR(255),
+                               treatment VARCHAR(255),
+                               patient_id BIGINT UNIQUE,
+                               created_at DATETIME NOT NULL,
+                               FOREIGN KEY (patient_id) REFERENCES users(id)
+) ENGINE=InnoDB;
+
+CREATE TABLE health_historical (
+                                   id BIGINT AUTO_INCREMENT PRIMARY KEY,
+                                   antecedent VARCHAR(255),
+                                   notes VARCHAR(255),
+                                   consultation_date DATE,
+                                   medical_file_id BIGINT NOT NULL,
+                                   FOREIGN KEY (medical_file_id) REFERENCES medical_files(id)
+) ENGINE=InnoDB;
+
+CREATE TABLE medical_documents (
+                                   id BIGINT AUTO_INCREMENT PRIMARY KEY,
+                                   file_name VARCHAR(255),
+                                   file_type VARCHAR(255),
+                                   file_data LONGBLOB,
+                                   medical_file_id BIGINT NOT NULL,
+                                   FOREIGN KEY (medical_file_id) REFERENCES medical_files(id)
+) ENGINE=InnoDB;
\ No newline at end of file
diff --git a/src/main/resources/sqls/insert-values.sql b/src/main/resources/sqls/insert-values.sql
new file mode 100644
index 0000000000000000000000000000000000000000..a327f5e680a3e602bb0433df309422da0168d51f
--- /dev/null
+++ b/src/main/resources/sqls/insert-values.sql
@@ -0,0 +1,26 @@
+-- Insertion des utilisateurs (médecins et patients)
+INSERT INTO users (first_name, last_name, phone_number, email, address, password, role, created_at) VALUES
+                                                                                                        ('Jean', 'Dupont', '0444444444', 'jean.dupont@example.com', NULL, '$2a$10$x3BWC9e/K6cSNdoc3fsmOemY0NyAU5VTDFxkgkUsqKF1Jgvpu3Zwi', 'DOCTOR', NOW()),
+                                                                                                        ('Sophie', 'Martin', '0455555555', 'sophie.martin@example.com', NULL, '$2a$10$x3BWC9e/K6cSNdoc3fsmOemY0NyAU5VTDFxkgkUsqKF1Jgvpu3Zwi', 'DOCTOR', NOW()),
+                                                                                                        ('Paul', 'Durand', '0678901234', 'paul.durand@example.com', '5 Rue des Lilas', '$2a$10$tVWsBUEczExWqyvK5vfsnOQpaWHA4rmuXB73xuzApNELhIpZqhl0W', 'PATIENT', NOW()),
+                                                                                                        ('Alice', 'Lemoine', '0687654321', 'alice.lemoine@example.com', '8 Rue du Lac', '$2a$10$tVWsBUEczExWqyvK5vfsnOQpaWHA4rmuXB73xuzApNELhIpZqhl0W', 'PATIENT', NOW());
+
+-- Récupérer les IDs des utilisateurs insérés (médecins et patients)
+SET @doctor1Id = (SELECT id FROM users WHERE email = 'jean.dupont@example.com');
+SET @doctor2Id = (SELECT id FROM users WHERE email = 'sophie.martin@example.com');
+SET @patient1Id = (SELECT id FROM users WHERE email = 'paul.durand@example.com');
+SET @patient2Id = (SELECT id FROM users WHERE email = 'alice.lemoine@example.com');
+
+-- Insertion des dossiers médicaux
+INSERT INTO medical_files (patient_id, allergy, treatment, created_at) VALUES
+                                                                           (@patient1Id, 'Arachide', 'Ibuprofene', NOW()),
+                                                                           (@patient2Id, 'Pollen', 'Bisoprolol', NOW());
+
+-- Récupérer les IDs des dossiers médicaux insérés
+SET @file1Id = (SELECT id FROM medical_files WHERE patient_id = @patient1Id);
+SET @file2Id = (SELECT id FROM medical_files WHERE patient_id = @patient2Id);
+
+-- Insertion des rendez-vous
+INSERT INTO appointments (patient_id, doctor_id, invoice_id, date_time, status, reason, created_at) VALUES
+                                                                                                        (@patient1Id, @doctor1Id, NULL, DATE_ADD(NOW(), INTERVAL 2 DAY), 'CONFIRMED', 'Consultation de suivi', NOW()),
+                                                                                                        (@patient2Id, @doctor2Id, NULL, DATE_ADD(NOW(), INTERVAL 7 DAY), 'PENDING', 'Bilan annuel', NOW());
\ No newline at end of file
diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html
index 214562e5f629471781f6c655b108850cdc30efbd..5a592207102ca6fb2034af5c488b23ee0736459d 100644
--- a/src/main/resources/templates/home.html
+++ b/src/main/resources/templates/home.html
@@ -15,8 +15,8 @@
             <h1 class="text-2xl font-semibold text-gray-900">Gestion Dossiers Médicaux</h1>
             <div class="space-x-4">
                 <a href="/doctors/dashboard" class="px-6 py-2 bg-green-500 text-white rounded-md hover:bg-green-600">Professionnel de santé</a>
-                <a href="/login" class="text-blue-500 hover:text-blue-700">Connexion</a>
-                <a href="/register" class="text-blue-500 hover:text-blue-700">Inscription</a>
+                <a th:href="@{/login}" class="text-blue-500 hover:text-blue-700">Connexion</a>
+                <a th:href="@{/register}" class="text-blue-500 hover:text-blue-700">Inscription</a>
             </div>
         </div>
     </div>
diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html
new file mode 100644
index 0000000000000000000000000000000000000000..f2b5c1f4a3e4095a194fd363c82f7e304a970cff
--- /dev/null
+++ b/src/main/resources/templates/login.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <title>Connexion</title>
+    <link rel="stylesheet" th:href="@{/css/styles.css}">
+    <link rel="stylesheet"
+          href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
+</head>
+<body class="bg-light">
+<div class="container d-flex justify-content-center align-items-center vh-100">
+    <div class="card shadow p-4" style="width: 350px; border-radius: 10px;">
+        <h3 class="text-center mb-3">Connexion</h3>
+        <form th:action="@{/login}" method="post">
+            <div class="mb-3">
+                <label for="username" class="form-label">Nom d'utilisateur</label>
+                <input type="text" class="form-control" id="username" name="username" required>
+            </div>
+            <div class="mb-3">
+                <label for="password" class="form-label">Mot de passe</label>
+                <input type="password" class="form-control" id="password" name="password" required>
+            </div>
+            <button type="submit" class="btn btn-primary w-100">Se connecter</button>
+        </form>
+        <div class="text-center mt-3">
+            <a href="#" class="text-decoration-none">Mot de passe oublié ?</a>
+        </div>
+        <div class="text-center mt-3">
+            <a th:href="@{/register}" class="btn btn-outline-secondary w-100">Créer un compte</a>
+        </div>
+    </div>
+</div>
+</body>
+</html>
diff --git a/src/main/resources/templates/medical-files.html b/src/main/resources/templates/medical-files.html
index 9643afef3f8b38c020c27aed66b5b5039c64485e..abb549337a29fac68dd406f91819d8dec727d305 100644
--- a/src/main/resources/templates/medical-files.html
+++ b/src/main/resources/templates/medical-files.html
@@ -23,7 +23,7 @@
         </tr>
         </thead>
         <tbody>
-        <tr th:each="file : ${medicalFiles}">
+        <tr th:each="file : ${medicalFile}">
             <td th:text="${file.id}"></td>
             <td th:text="${file.patient.firstName} + ' ' + ${file.patient.lastName}"></td>
             <td th:text="${file.doctor.firstName} + ' ' + ${file.doctor.lastName}"></td>
diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html
new file mode 100644
index 0000000000000000000000000000000000000000..5dbff8b24e3bd665934389ef8ff4146a63e16954
--- /dev/null
+++ b/src/main/resources/templates/register.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <title>Inscription</title>
+    <link rel="stylesheet" th:href="@{/css/styles.css}">
+    <link rel="stylesheet"
+          href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
+</head>
+<body class="bg-light">
+<div class="container d-flex justify-content-center align-items-center vh-100">
+    <div class="card shadow p-4" style="width: 350px; border-radius: 10px;">
+        <h3 class="text-center mb-3">Inscription</h3>
+        <form th:action="@{/register}" method="post">
+            <div class="mb-3">
+                <label for="firstName" class="form-label">Prénom</label>
+                <input type="text" class="form-control" id="firstName" name="firstName" required>
+            </div>
+            <div class="mb-3">
+                <label for="lastName" class="form-label">Nom</label>
+                <input type="text" class="form-control" id="lastName" name="lastName" required>
+            </div>
+            <div class="mb-3">
+                <label for="email" class="form-label">Email</label>
+                <input type="email" class="form-control" id="email" name="email" required>
+            </div>
+            <div class="mb-3">
+                <label for="password" class="form-label">Mot de passe</label>
+                <input type="password" class="form-control" id="password" name="password" required>
+            </div>
+            <button type="submit" class="btn btn-success w-100">S'inscrire</button>
+        </form>
+        <div class="text-center mt-3">
+            <a th:href="@{/login}" class="btn btn-outline-secondary w-100">J'ai déjà un compte</a>
+        </div>
+    </div>
+</div>
+</body>
+</html>