From d5aa2dcb84aabeab4f4e1583779b54dff72bf3f9 Mon Sep 17 00:00:00 2001 From: Jessie Ragot <jessie.ragot@hotmail.com> Date: Thu, 13 Mar 2025 15:35:33 +0100 Subject: [PATCH] - Modification of the front for inscription, changeover to landscape - Modification of the roles for registration, the registration button is now only for patients, doctors will be registered via the superadmin (currently being implemented) - Addition of the superadmin in the databaseSeeder - Modification to the home page to have the first and last name after the Welcome rather than the email address - Addition of buttons to return to the respective dashboard regardless of role --- .../projetIndu/bootstrap/DatabaseSeeder.java | 8 ++- .../controllers/HomeController.java | 28 +++++++- .../com/projet/projetIndu/entities/Admin.java | 11 ++- src/main/resources/templates/home.html | 13 +++- src/main/resources/templates/register.html | 69 ++++++++++--------- 5 files changed, 90 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/projet/projetIndu/bootstrap/DatabaseSeeder.java b/src/main/java/com/projet/projetIndu/bootstrap/DatabaseSeeder.java index 8397063..63fde56 100644 --- a/src/main/java/com/projet/projetIndu/bootstrap/DatabaseSeeder.java +++ b/src/main/java/com/projet/projetIndu/bootstrap/DatabaseSeeder.java @@ -18,19 +18,21 @@ public class DatabaseSeeder implements CommandLineRunner { private final DoctorRepository doctorRepository; private final PatientRepository patientRepository; + private final AdminRepository adminRepository; private final MedicalFileRepository medicalFileRepository; private final MedicalDocumentRepository medicalDocumentRepository; private final AppointmentRepository appointmentRepository; private final PasswordEncoder passwordEncoder; public DatabaseSeeder(DoctorRepository doctorRepository, - PatientRepository patientRepository, + PatientRepository patientRepository, AdminRepository adminRepository, MedicalFileRepository medicalFileRepository, MedicalDocumentRepository medicalDocumentRepository, AppointmentRepository appointmentRepository, PasswordEncoder passwordEncoder) { this.doctorRepository = doctorRepository; this.patientRepository = patientRepository; + this.adminRepository = adminRepository; this.medicalFileRepository = medicalFileRepository; this.medicalDocumentRepository = medicalDocumentRepository; this.appointmentRepository = appointmentRepository; @@ -48,6 +50,9 @@ public class DatabaseSeeder implements CommandLineRunner { 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)); + Admin admin1 = new Admin("root", "root", "0000000000", "root@example.com", passwordEncoder.encode("root123")); + adminRepository.save(admin1); + MedicalFile file1 = new MedicalFile(patient1, "Arachide", "Ibuprofene"); MedicalFile file2 = new MedicalFile(patient2, "Pollen", "Bisoprolol"); medicalFileRepository.saveAll(List.of(file1, file2)); @@ -72,6 +77,7 @@ public class DatabaseSeeder implements CommandLineRunner { System.out.println("Données insérées :"); System.out.println("Médecins : " + doctorRepository.count()); System.out.println("Patients : " + patientRepository.count()); + System.out.println("Admin: " + adminRepository.count()); System.out.println("Dossiers médicaux : " + medicalFileRepository.count()); System.out.println("Documents médicaux : " + medicalDocumentRepository.count()); System.out.println("Rendez-vous : " + appointmentRepository.count()); diff --git a/src/main/java/com/projet/projetIndu/controllers/HomeController.java b/src/main/java/com/projet/projetIndu/controllers/HomeController.java index b07e68e..360d88d 100644 --- a/src/main/java/com/projet/projetIndu/controllers/HomeController.java +++ b/src/main/java/com/projet/projetIndu/controllers/HomeController.java @@ -1,5 +1,8 @@ package com.projet.projetIndu.controllers; +import com.projet.projetIndu.entities.User; +import com.projet.projetIndu.services.UserService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; @@ -8,19 +11,42 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import java.util.Collection; +import java.util.Optional; @Controller public class HomeController { + private final UserService userService; + + @Autowired + public HomeController(UserService userService) { + this.userService = userService; + } + @GetMapping("/") public String home(Model model) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication != null && authentication.isAuthenticated() && !authentication.getPrincipal().equals("anonymousUser")) { - model.addAttribute("username", authentication.getName()); + String username = authentication.getName(); + model.addAttribute("username", username); + + Optional<User> userOptional = userService.getUserByUsername(username); + if (userOptional.isPresent()) { + User user = userOptional.get(); + model.addAttribute("firstName", user.getFirstName()); + model.addAttribute("lastName", user.getLastName()); + } Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities(); boolean isDoctor = authorities.stream().anyMatch(auth -> auth.getAuthority().equals("DOCTOR")); + boolean isPatient = authorities.stream().anyMatch(auth -> auth.getAuthority().equals("PATIENT")); + boolean isAdmin = authorities.stream().anyMatch(auth -> auth.getAuthority().equals("ADMIN")); + + model.addAttribute("isDoctor", isDoctor); + model.addAttribute("isPatient", isPatient); + model.addAttribute("isAdmin", isAdmin); + } return "home"; diff --git a/src/main/java/com/projet/projetIndu/entities/Admin.java b/src/main/java/com/projet/projetIndu/entities/Admin.java index b1afc5d..aae7124 100644 --- a/src/main/java/com/projet/projetIndu/entities/Admin.java +++ b/src/main/java/com/projet/projetIndu/entities/Admin.java @@ -1,14 +1,21 @@ 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 +@Getter +@Setter +@NoArgsConstructor @DiscriminatorValue("ADMIN") public class Admin extends User { + + public Admin(String firstName, String lastName, String phoneNumber, String email, String password) { + super(firstName, lastName, phoneNumber, email, password); + this.role = Role.ADMIN; + } + } diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index 932d441..4dc1348 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -19,11 +19,20 @@ class="px-6 py-2 bg-green-500 text-white rounded-md hover:bg-green-600">Professionnel de santé</a> </th:block> - <th:block th:if="${username}"> - <span class="text-gray-900 font-semibold">Bienvenue, <b th:text="${username}"></b> !</span> + <th:block th:if="${isPatient}"> + <a href="/patients/dashboard" + class="px-6 py-2 bg-pink-500 text-white rounded-md hover:bg-pink-600">Patient</a> + </th:block> + <th:block th:if="${isAdmin}"> + <a href="/admin/dashboard" + class="px-6 py-2 bg-orange-500 text-white rounded-md hover:bg-orange-600">Admin</a> + </th:block> + <th:block th:if="${firstName != null and lastName != null}"> + <span class="text-gray-900 font-semibold">Bienvenue, <b th:text="${firstName + ' ' + lastName}"></b> !</span> <a href="/logout" class="ml-4 text-red-500 hover:text-red-700">Déconnexion</a> </th:block> + <th:block th:unless="${username}"> <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> diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index 6c93cfd..af3a3e7 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -16,44 +16,47 @@ </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;"> + <div class="card shadow p-4" style="width: 500px; 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> - <div class="mb-3"> - <label for="role" class="form-label">Rôle</label> - <select class="form-control" id="role" name="role" required onchange="toggleFields()"> - <option value="PATIENT">Patient</option> - </select> - </div> - - <!-- Champs spécifiques pour Patient --> - <div id="patientFields"> - <div class="mb-3"> - <label for="dateOfBirth" class="form-label">Date de naissance</label> - <input type="date" class="form-control" id="dateOfBirth" name="dateOfBirth"> + <div class="row"> + <div class="col-md-6 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="address" class="form-label">Adresse</label> - <input type="text" class="form-control" id="address" name="address"> + <div class="col-md-6 mb-3"> + <label for="lastName" class="form-label">Nom</label> + <input type="text" class="form-control" id="lastName" name="lastName" required> + </div> + <div class="col-md-6 mb-3"> + <label for="email" class="form-label">Email</label> + <input type="email" class="form-control" id="email" name="email" required> + </div> + <div class="col-md-6 mb-3"> + <label for="password" class="form-label">Mot de passe</label> + <input type="password" class="form-control" id="password" name="password" required> + </div> + <div class="col-md-12 mb-3"> + <label for="role" class="form-label">Rôle</label> + <select class="form-control" id="role" name="role" required onchange="toggleFields()"> + <option value="PATIENT">Patient</option> + </select> </div> - </div> + <!-- Champs spécifiques pour Patient --> + <div id="patientFields" class="col-md-12"> + <div class="row"> + <div class="col-md-6 mb-3"> + <label for="dateOfBirth" class="form-label">Date de naissance</label> + <input type="date" class="form-control" id="dateOfBirth" name="dateOfBirth"> + </div> + <div class="col-md-6 mb-3"> + <label for="address" class="form-label">Adresse</label> + <input type="text" class="form-control" id="address" name="address"> + </div> + </div> + </div> + </div> <button type="submit" class="btn btn-success w-100">S'inscrire</button> </form> -- GitLab