From 97b57b361d00d4c53b9982614a7528974d65ac0a Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sat, 16 Mar 2024 19:13:57 +0100
Subject: [PATCH 01/23] cleaned all controllers

---
 .../EndPoints/ApplicationsController.java     | 18 +++---
 .../Clyde/EndPoints/CourseController.java     | 34 ++++++-----
 .../Clyde/EndPoints/CurriculumController.java | 35 +++++------
 .../EndPoints/InscriptionController.java      | 54 ++++++++++++-----
 .../Clyde/EndPoints/LoginController.java      |  7 +--
 .../Clyde/EndPoints/MockController.java       | 18 +-----
 .../Clyde/EndPoints/StorageController.java    |  5 +-
 .../Clyde/EndPoints/TokenController.java      | 21 +++++--
 .../Clyde/EndPoints/UserController.java       | 58 ++++++++++++-------
 .../Clyde/Services/AuthenticatorService.java  |  4 +-
 .../Clyde/Services/CourseService.java         |  7 +++
 .../Clyde/Services/CurriculumService.java     | 16 ++---
 .../Clyde/Services/InscriptionService.java    | 11 +++-
 .../Clyde/Services/TeacherCourseService.java  |  3 +
 .../herisson/Clyde/Services/UserService.java  | 12 ++--
 .../Clyde/Tables/InscriptionRequest.java      |  4 +-
 16 files changed, 181 insertions(+), 126 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java
index 77b2f3e..20cd8d4 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java
@@ -30,7 +30,6 @@ public class ApplicationsController {
      */
     @GetMapping("/apps")
     public ResponseEntity<Iterable<Applications>> getAuthorizedApps(@RequestHeader("Authorization") String token){
-
         return new ResponseEntity<>(getAuthorizedApplications(token), HttpStatus.OK);
     }
 
@@ -46,24 +45,29 @@ public class ApplicationsController {
     public ArrayList<Applications> getAuthorizedApplications(String token){
         ArrayList<Applications> authorizedApps = new ArrayList<>();
 
+        //if unAuthed
         authorizedApps.add(Applications.Login);
-        authorizedApps.add(Applications.Profile);
 
 		User user = authServ.getUserFromToken(token);
 		if(user == null)
-			return authorizedApps;
+            return authorizedApps;
+        // if authed
+        authorizedApps.add(Applications.Profile);
 
-		Role posterRole = user.getRole();
+        Role posterRole = user.getRole();
 
-        if (posterRole == Role.Teacher || posterRole == Role.Student || posterRole == Role.Admin){
+        if (!authServ.IsNotIn(new Role[]{Role.Teacher,Role.Student,Role.Admin},token)) {
             authorizedApps.add(Applications.Msg);
             authorizedApps.add(Applications.Forum);
             authorizedApps.add(Applications.Rdv);
         }
 
-        if (posterRole == Role.Teacher || posterRole == Role.Secretary || posterRole == Role.Admin) authorizedApps.add(Applications.ManageCourses);
+        //if Teacher or Secretary or Admin add ManageCourses App
+        if (!authServ.IsNotIn(new Role[]{Role.Teacher,Role.Secretary,Role.Admin},token))
+            authorizedApps.add(Applications.ManageCourses);
 
-        if (posterRole == Role.InscriptionService || posterRole == Role.Admin) authorizedApps.add(Applications.Inscription);
+        if (!authServ.IsNotIn(new Role[]{Role.InscriptionService,Role.Admin},token))
+            authorizedApps.add(Applications.Inscription);
 
         return authorizedApps;
     }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
index 011689f..2a1af6e 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
@@ -9,10 +9,6 @@ import ovh.herisson.Clyde.Services.CourseService;
 import ovh.herisson.Clyde.Services.TeacherCourseService;
 import ovh.herisson.Clyde.Tables.Course;
 import ovh.herisson.Clyde.Tables.Role;
-import ovh.herisson.Clyde.Tables.TeacherCourse;
-import ovh.herisson.Clyde.Tables.User;
-
-import java.util.ArrayList;
 import java.util.Map;
 
 @RestController
@@ -36,13 +32,21 @@ public class CourseController {
         if (authServ.getUserFromToken(token) == null)
             return new UnauthorizedResponse<>(null);
 
-        return new ResponseEntity<>(courseServ.findById(id), HttpStatus.OK);
+        Course foundCourse = courseServ.findById(id);
+
+        if (foundCourse == null)
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+        return new ResponseEntity<>(foundCourse, HttpStatus.OK);
     }
 
 
     @PostMapping("/course")
-    public ResponseEntity<Course> postCourse(@RequestHeader("Authorization") String token, @RequestBody Course course){
-        if (authServ.isNotSecretaryOrAdmin(token))
+    public ResponseEntity<Course> postCourse(@RequestHeader("Authorization") String token,
+                                             @RequestBody Course course)
+    {
+
+        if (authServ.IsNotIn(new Role[]{Role.Secretary,Role.Admin},token))
             return new UnauthorizedResponse<>(null);
 
         return new ResponseEntity<>(courseServ.save(course), HttpStatus.CREATED);
@@ -55,11 +59,15 @@ public class CourseController {
                                               @PathVariable long id)
     {
 
-        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Teacher,Role.Secretary}, token)){
+        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Teacher,Role.Secretary}, token))
             return new UnauthorizedResponse<>(null);
-        }
 
-        return new ResponseEntity<>(courseServ.modifyData(id, updates, authServ.getUserFromToken(token).getRole()), HttpStatus.OK);
+        Course modifiedCourse = courseServ.modifyData(id,updates,authServ.getUserFromToken(token).getRole());
+
+        if (modifiedCourse == null)
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+        return new ResponseEntity<>(modifiedCourse, HttpStatus.OK);
     }
 
     @PostMapping("/course/{id}")
@@ -67,14 +75,14 @@ public class CourseController {
                                                @RequestBody Iterable<Long> teacherIds,
                                                @PathVariable Long id)
     {
+
         if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Secretary}, token))
             return new UnauthorizedResponse<>(null);
 
 
+        if (!teacherCourseServ.saveAll(teacherIds,courseServ.findById(id)))
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 
-        teacherCourseServ.saveAll(teacherIds,courseServ.findById(id));
         return new ResponseEntity<>(HttpStatus.OK);
-
     }
-
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
index 1892d6c..0b0abb8 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
@@ -4,13 +4,12 @@ package ovh.herisson.Clyde.EndPoints;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
+import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 import ovh.herisson.Clyde.Services.AuthenticatorService;
 import ovh.herisson.Clyde.Services.CurriculumCourseService;
 import ovh.herisson.Clyde.Services.CurriculumService;
 import ovh.herisson.Clyde.Tables.Curriculum;
-import ovh.herisson.Clyde.Tables.CurriculumCourse;
 import ovh.herisson.Clyde.Tables.Role;
-import ovh.herisson.Clyde.Tables.User;
 
 import java.util.Map;
 
@@ -32,29 +31,25 @@ public class CurriculumController {
 
     @GetMapping("/curriculum/{id}")
     public ResponseEntity<Curriculum> findById(@PathVariable long id){
-        return new ResponseEntity<>(curriculumServ.findById(id), HttpStatus.OK);
+        Curriculum foundCurriculum = curriculumServ.findById(id);
+
+        if (foundCurriculum == null)
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+        return new ResponseEntity<>(foundCurriculum, HttpStatus.OK);
     }
 
     @GetMapping("/curriculums")
-    public ResponseEntity<Iterable<Map<String, Object>>> findAllindDepth(){
+    public ResponseEntity<Iterable<Map<String, Object>>> findAllIndDepth(){
         return new ResponseEntity<>(curriculumCourseServ.getAllDepthCurriculum(),HttpStatus.OK);
     }
 
-    @GetMapping("/curriculum")
-    public ResponseEntity<Iterable<CurriculumCourse>> findAll(){
-        return new ResponseEntity<>(curriculumCourseServ.findAll(),HttpStatus.OK);
+    @PostMapping("/curriculum")
+    public ResponseEntity<Curriculum> postCurriculum(@RequestHeader("Authorization") String token,@RequestBody Curriculum curriculum){
+
+        if (authServ.IsNotIn(new Role[]{Role.Secretary,Role.Admin},token))
+            return new UnauthorizedResponse<>(null);
+
+        return new ResponseEntity<>(curriculumServ.save(curriculum),HttpStatus.CREATED);
     }
-
-    /**@PostMapping("/curriculum") //todo now
-    public ResponseEntity<String> postCurriculum(@RequestHeader("Authorization") String token,@RequestBody Curriculum curriculum){
-
-        if (!isSecretaryOrAdmin(token)){
-            return new UnauthorizedResponse<>("you're not allowed to post a Curriculum");
-        }
-
-        CurriculumServ.save(Curriculum);
-
-        return new ResponseEntity<>("created !",HttpStatus.CREATED);
-    }**/
-
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
index 36946b5..42d6551 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
@@ -9,14 +9,12 @@ import ovh.herisson.Clyde.Services.InscriptionService;
 import ovh.herisson.Clyde.Tables.InscriptionRequest;
 import ovh.herisson.Clyde.Tables.RequestState;
 import ovh.herisson.Clyde.Tables.Role;
-import ovh.herisson.Clyde.Tables.User;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
 @RestController
 @CrossOrigin(originPatterns = "*", allowCredentials = "true")
-
 public class InscriptionController {
 
 
@@ -32,7 +30,8 @@ public class InscriptionController {
     @GetMapping("/requests/register")
     public ResponseEntity<Iterable<Map<String,Object>>> getAllRequests(@RequestHeader("Authorization") String token){
 
-        if (authServ.isNotSecretaryOrAdmin(token)){return new UnauthorizedResponse<>(null);}
+        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.InscriptionService},token))
+            return new UnauthorizedResponse<>(null);
 
         Iterable<InscriptionRequest> inscriptionRequests = inscriptionServ.getAll();
         ArrayList<Map<String,Object>> toReturn = new ArrayList<>();
@@ -46,41 +45,64 @@ public class InscriptionController {
 
 
     @GetMapping("/request/register/{id}")
-    public ResponseEntity<Map<String,Object>> getById(@PathVariable long id){
-        InscriptionRequest inscriptionRequest = inscriptionServ.getById(id);
-        if (inscriptionRequest == null) {return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);}
+    public ResponseEntity<Map<String,Object>> getById(@RequestHeader("Authorization") String token, @PathVariable long id){
 
-        return new ResponseEntity<>(requestWithoutPassword(inscriptionRequest), HttpStatus.OK);
+        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.InscriptionService},token))
+            return new UnauthorizedResponse<>(null);
+
+        InscriptionRequest foundInscriptionRequest = inscriptionServ.getById(id);
+
+        if (foundInscriptionRequest == null)
+            return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
+
+        return new ResponseEntity<>(requestWithoutPassword(foundInscriptionRequest), HttpStatus.OK);
     }
 
-    @GetMapping("request/user/{id}")
-    public ResponseEntity<InscriptionRequest> getUserInscriptionRequest(@PathVariable long id, @RequestHeader("Authorize") String token){
+    /**
+    @GetMapping("request/user")
+    public ResponseEntity<InscriptionRequest> getUserInscriptionRequest(@RequestHeader("Authorization") String token){
         //todo return l'inscriptionRequest ACTUELLE du user (check si le poster est bien le même que id target ou secretariat)
+
+        if (authServ.IsNotIn(new Role[]{Role.Student,Role.Admin},token))
+            return new UnauthorizedResponse<>(null);
+
+        User poster = authServ.getUserFromToken(token);
+
+        inscriptionServ.getById()
+
+
         return null;
-    }
+    } **/
 
     @PatchMapping("/request/register/{id}")
     public ResponseEntity<InscriptionRequest> changeRequestState(@PathVariable long id,
-                                                                 @RequestHeader("Authorize") String token,
+                                                                 @RequestHeader("Authorization") String token,
                                                                  @RequestBody RequestState requestState)
     {
-        if (authServ.isNotSecretaryOrAdmin(token)) return new UnauthorizedResponse<>(null);
-        inscriptionServ.modifyState(id, requestState);
-        return null;
+
+        if (authServ.IsNotIn(new Role[]{Role.InscriptionService,Role.Admin},token))
+            return new UnauthorizedResponse<>(null);
+
+        if (!inscriptionServ.modifyState(id, requestState))
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+        return new ResponseEntity<>(HttpStatus.OK);
     }
 
     private Map<String, Object> requestWithoutPassword(InscriptionRequest inscriptionRequest) {
         Map<String, Object> toReturn = new HashMap<>();
 
         toReturn.put("id", inscriptionRequest.getId());
-        toReturn.put("firstName", inscriptionRequest.getFirstName());
         toReturn.put("lastName", inscriptionRequest.getLastName());
+        toReturn.put("firstName", inscriptionRequest.getFirstName());
         toReturn.put("address", inscriptionRequest.getAddress());
+        toReturn.put("email",inscriptionRequest.getEmail());
         toReturn.put("birthDate", inscriptionRequest.getBirthDate());
         toReturn.put("country", inscriptionRequest.getCountry());
         toReturn.put("curriculum", inscriptionRequest.getCurriculum());
-        toReturn.put("profilePictureUrl", inscriptionRequest.getProfilePicture());
         toReturn.put("state", inscriptionRequest.getState());
+        toReturn.put("profilePictureUrl", inscriptionRequest.getProfilePicture());
+
         return toReturn;
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java
index 2be125d..6e0b4fa 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java
@@ -1,4 +1,5 @@
 package ovh.herisson.Clyde.EndPoints;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
@@ -7,7 +8,6 @@ import org.springframework.web.bind.annotation.*;
 import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 import ovh.herisson.Clyde.Services.AuthenticatorService;
 import ovh.herisson.Clyde.Tables.InscriptionRequest;
-
 import java.util.Date;
 
 @RestController
@@ -45,8 +45,7 @@ public class LoginController {
     }
 
     @PostMapping("/request/register")
-    public ResponseEntity<String> register(@RequestBody InscriptionRequest inscriptionRequest){
-        authServ.register(inscriptionRequest);
-        return new ResponseEntity<>("Is OK", HttpStatus.CREATED);
+    public ResponseEntity<InscriptionRequest> register(@RequestBody InscriptionRequest inscriptionRequest){
+        return new ResponseEntity<>(authServ.register(inscriptionRequest), HttpStatus.CREATED);
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java
index 1750889..358602b 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java
@@ -6,7 +6,6 @@ import ovh.herisson.Clyde.Repositories.TokenRepository;
 import ovh.herisson.Clyde.Repositories.UserRepository;
 import ovh.herisson.Clyde.Services.*;
 import ovh.herisson.Clyde.Tables.*;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
@@ -51,12 +50,11 @@ public class MockController {
         User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), null,Role.Student,passwordEncoder.encode("student"));
         User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0), null,Role.Secretary,passwordEncoder.encode("secretary"));
         User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), null,Role.Teacher,passwordEncoder.encode("teacher"));
-        User lena = new User("Louille","Lena","inscriptionService@InscriptionService.com","no","yes",new Date(0), null,Role.Teacher,passwordEncoder.encode("inscriptionService"));
-        mockUsers = new ArrayList<>(Arrays.asList(herobrine,joe,meh,joke));
+        User lena = new User("Louille","Lena","inscriptionService@InscriptionService.com","no","yes",new Date(0), null,Role.InscriptionService,passwordEncoder.encode("inscriptionService"));
+        mockUsers = new ArrayList<>(Arrays.asList(herobrine,joe,meh,joke,lena));
 
         userRepo.saveAll(mockUsers);
 
-
         // Course / Curriculum part
 
         Curriculum infoBab1 = new Curriculum(1,"info");
@@ -68,7 +66,7 @@ public class MockController {
         curriculumService.save(psychologyBab1);
 
 
-        Course progra1 = new Course(5,"Programmation et algorithimque 1",joke);
+        Course progra1 = new Course(5,"Programmation et algorithmique 1",joke);
         Course chemistry1 = new Course(12, "Thermochimie",joke);
         Course psycho1 = new Course(21, "rien faire t'as cru c'est psycho",joke);
         Course commun = new Course(2, "cours commun",joke);
@@ -89,16 +87,6 @@ public class MockController {
         CurriculumCourseService.save(new CurriculumCourse(chemistryBab1,commun));
         CurriculumCourseService.save(new CurriculumCourse(chemistryBab1,chemistry1));
 
-
-
-    }
-
-    @DeleteMapping("/mock")
-    public void deleteMock(){
-        for (User user:mockUsers){
-            tokenRepo.deleteAll(tokenRepo.getByUser(user));
-        }
-        userRepo.deleteAll(mockUsers);
     }
 }
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/StorageController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/StorageController.java
index 724ae10..d715087 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/StorageController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/StorageController.java
@@ -22,12 +22,13 @@ public class StorageController {
     @PostMapping("/upload/{fileType}")
     public ResponseEntity<StorageFile> handleFileUpload(@RequestParam("file") MultipartFile file, @PathVariable FileType fileType) {
 
-		StorageFile fileEntry = null;
+		StorageFile fileEntry;
 		try {
 			fileEntry = storageServ.store(file,fileType);
 			
 		} catch(Exception e){
-			e.printStackTrace();
+            e.printStackTrace();
+            return new ResponseEntity<>(null,HttpStatus.BAD_REQUEST);
 		}
 
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/TokenController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/TokenController.java
index ba07fca..1d18881 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/TokenController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/TokenController.java
@@ -1,11 +1,15 @@
 package ovh.herisson.Clyde.EndPoints;
 
-
-
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RestController;
+import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
+import ovh.herisson.Clyde.Services.AuthenticatorService;
 import ovh.herisson.Clyde.Services.TokenService;
+import ovh.herisson.Clyde.Tables.Role;
 import ovh.herisson.Clyde.Tables.Token;
 
 @RestController
@@ -14,13 +18,20 @@ public class TokenController {
 
     private final TokenService tokenServ;
 
-    public TokenController(TokenService tokenServ){
+    private final AuthenticatorService authServ;
+
+    public TokenController(TokenService tokenServ, AuthenticatorService authServ){
         this.tokenServ = tokenServ;
+        this.authServ = authServ;
     }
 
 
     @GetMapping("/tokens")
-    public Iterable<Token> getTokens(){
-        return tokenServ.getAllTokens();
+    public ResponseEntity<Iterable<Token>> getTokens(@RequestHeader("Authorization")String token){
+
+        if (authServ.IsNotIn(new Role[]{Role.Admin},token))
+            return new UnauthorizedResponse<>(null);
+
+        return new ResponseEntity<>(tokenServ.getAllTokens(), HttpStatus.OK);
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index 8437b81..fd6151e 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -1,6 +1,5 @@
 package ovh.herisson.Clyde.EndPoints;
 
-
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -9,8 +8,6 @@ import ovh.herisson.Clyde.Services.AuthenticatorService;
 import ovh.herisson.Clyde.Services.UserService;
 import ovh.herisson.Clyde.Tables.Role;
 import ovh.herisson.Clyde.Tables.User;
-
-import java.security.Key;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
@@ -27,30 +24,33 @@ public class UserController {
         this.authServ = authServ;
     }
 
+    /** returns information about the connected user
+     *
+     * @param token the session token of the user
+     * @return the user information except his password
+     */
     @GetMapping("/user")
-    public ResponseEntity<HashMap<String,Object>> getUser(@RequestHeader("Authorization") String authorization){
+    public ResponseEntity<HashMap<String,Object>> getUser(@RequestHeader("Authorization") String token){
 
-        if (authorization == null) return new UnauthorizedResponse<>(null);
-        User user = authServ.getUserFromToken(authorization);
-        if (user == null) return new UnauthorizedResponse<>(null);
+        User user = authServ.getUserFromToken(token);
+            if (user == null) return new UnauthorizedResponse<>(null);
 
         return new ResponseEntity<>(userWithoutPassword(user), HttpStatus.OK);
     }
 
     @PostMapping("/user")
-    public ResponseEntity<String> postUser(@RequestBody User user,@RequestHeader("Authorization") String authorization){
+    public ResponseEntity<Map<String ,Object>> postUser(@RequestBody User user,@RequestHeader("Authorization") String token){
 
-        if (authServ.isNotSecretaryOrAdmin(authorization))
+        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.InscriptionService,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
-        userService.save(user);
-        return new ResponseEntity<>(String.format("Account created with ID:%s",user.getRegNo()),HttpStatus.CREATED);
+        return new ResponseEntity<>(userWithoutPassword(userService.save(user)),HttpStatus.CREATED);
     }
 
     @GetMapping("/users")
-    public ResponseEntity<Iterable<HashMap<String,Object>>> getAllUsers(@RequestHeader("Authorization") String authorization){
+    public ResponseEntity<Iterable<HashMap<String,Object>>> getAllUsers(@RequestHeader("Authorization") String token){
 
-        if (authServ.isNotSecretaryOrAdmin(authorization))
+        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
         Iterable<User> users = userService.getAll();
@@ -61,24 +61,36 @@ public class UserController {
         }
         return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
     }
-    @PatchMapping("/user")
-    public ResponseEntity<String> patchUser(@RequestBody Map<String,Object> updates, @RequestHeader("Authorization") String authorization) {
 
-        if (authorization == null) return new UnauthorizedResponse<>(null);
+    /** changes the specified user's information
+     *
+     * @param updates the changes to be made
+     * @param token the session token of the user posting the change
+     * @param id the id of the user to change
+     * @return a string clarifying the issue (if there is any)
+     */
+    @PatchMapping("/user/{id}")
+    public ResponseEntity<String> patchUser(@RequestHeader("Authorization") String token,
+                                            @RequestBody Map<String,Object> updates,
+                                            @PathVariable Long id) {
 
-        User poster = authServ.getUserFromToken(authorization);
-        if (poster == null) {return new UnauthorizedResponse<>("bad authorization");}
+        if (token == null) return new UnauthorizedResponse<>(null);
 
-        if (!userService.modifyData(poster, updates, poster))
+        User poster = authServ.getUserFromToken(token);
+        if (poster == null) {return new UnauthorizedResponse<>("bad token");}
+
+        if (!userService.modifyData(id, updates, poster))
             return new UnauthorizedResponse<>("there was an issue with the updates requested");
 
-        return new ResponseEntity<>("data modified", HttpStatus.OK);
+        return new ResponseEntity<>(null, HttpStatus.OK);
     }
 
     @GetMapping("/teachers")
     public ResponseEntity<Iterable<HashMap<String,Object>>> getAllTeachers(@RequestHeader("Authorization") String token){
+
         if (authServ.getUserFromToken(token) == null)
             return new UnauthorizedResponse<>(null);
+
         Iterable<User> teachers = userService.getAllTeachers();
         ArrayList<HashMap<String, Object>> withoutPassword = new ArrayList<>();
 
@@ -98,11 +110,13 @@ public class UserController {
     private HashMap<String,Object> userWithoutPassword(User user){
         HashMap<String,Object> toReturn = new HashMap<>();
         toReturn.put("regNo",user.getRegNo());
-        toReturn.put("firstName",user.getFirstName());
         toReturn.put("lastName",user.getLastName());
+        toReturn.put("firstName",user.getFirstName());
+        toReturn.put("email", user.getEmail());
+        toReturn.put("address",user.getAddress());
         toReturn.put("birthDate",user.getBirthDate());
         toReturn.put("country",user.getCountry());
-        toReturn.put("address",user.getAddress());
+        toReturn.put("profilePictureUrl",user.getProfilePictureUrl());
         toReturn.put("role",user.getRole());
         return toReturn;
     }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
index 63ef3c1..a665096 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
@@ -35,8 +35,8 @@ public class AuthenticatorService {
         return token;
     }
 
-    public void register(InscriptionRequest inscriptionRequest) {
-        inscriptionService.save(inscriptionRequest);
+    public InscriptionRequest register(InscriptionRequest inscriptionRequest) {
+        return inscriptionService.save(inscriptionRequest);
     }
 
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
index 8278bbe..483e865 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
@@ -28,6 +28,9 @@ public class CourseService {
     public Course modifyData(long id, Map<String, Object> updates, Role role) {
         Course target = courseRepo.findById(id);
 
+        if (target == null)
+            return null;
+
         if (role == Role.Teacher){
             for (Map.Entry<String, Object> entry : updates.entrySet()){
                 if (entry.getKey().equals("title")){
@@ -52,4 +55,8 @@ public class CourseService {
         }
         return courseRepo.save(target);
     }
+
+    public void delete(Long id) {
+        courseRepo.deleteById(id);
+    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java
index 6f6d89b..04c6ab2 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java
@@ -1,7 +1,6 @@
 package ovh.herisson.Clyde.Services;
 
 import org.springframework.stereotype.Service;
-import ovh.herisson.Clyde.Repositories.CourseRepository;
 import ovh.herisson.Clyde.Repositories.CurriculumRepository;
 import ovh.herisson.Clyde.Tables.Curriculum;
 
@@ -10,23 +9,18 @@ public class CurriculumService {
 
     private final CurriculumRepository curriculumRepo;
 
-    private final CourseRepository courseRepo;
-
-    public CurriculumService(CurriculumRepository curriculumRepo, CourseRepository courseRepo){
+    public CurriculumService(CurriculumRepository curriculumRepo){
         this.curriculumRepo = curriculumRepo;
-        this.courseRepo = courseRepo;
     }
-
-
-    public void save(Curriculum curriculum){
-        curriculumRepo.save(curriculum);
+    public Curriculum save(Curriculum curriculum){
+        return curriculumRepo.save(curriculum);
     }
 
     public Curriculum findById(long id){
         return curriculumRepo.findById(id);
     }
 
-    public Iterable<Curriculum> findAll(){
-        return curriculumRepo.findAll();
+    public void delete(Long id) {
+        curriculumRepo.deleteById(id);
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
index 6130fe8..31b18a6 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
@@ -14,8 +14,8 @@ public class InscriptionService {
         this.inscriptionRepo = inscriptionRepo;
     }
 
-    public void save(InscriptionRequest inscriptionRequest){
-        inscriptionRepo.save(inscriptionRequest);
+    public InscriptionRequest save(InscriptionRequest inscriptionRequest){
+        return inscriptionRepo.save(inscriptionRequest);
     }
 
     public InscriptionRequest getById(long id){
@@ -26,9 +26,14 @@ public class InscriptionService {
         return inscriptionRepo.findAll();
     }
 
-    public void modifyState(long id, RequestState requestState) {
+    public boolean modifyState(long id, RequestState requestState) {
         InscriptionRequest inscriptionRequest = getById(id);
+
+        if (inscriptionRequest == null)
+            return false;
+
         inscriptionRequest.setState(requestState);
         save(inscriptionRequest);
+        return true;
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java
index 0996adf..83135ea 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java
@@ -22,6 +22,9 @@ public class TeacherCourseService {
 
     public boolean saveAll(Iterable<Long> teacherIds, Course course){
 
+        if (course == null)
+            return false;
+
         ArrayList<Long> addedIds = new ArrayList<>();
         for (Long teacherId : teacherIds){
             User teacher = userRepo.findById((long) teacherId);
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
index a561512..ee45d90 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
@@ -36,7 +36,11 @@ public class UserService {
      * @param target the user to update
      * @return if the changes were done or not
      */
-    public boolean modifyData(User poster, Map<String ,Object> updates, User target){
+    public boolean modifyData(long targetId, Map<String ,Object> updates, User poster){
+
+        User target = userRepo.findById(targetId);
+        if (target == null)
+            return false;
 
         if (poster.getRegNo().equals(target.getRegNo())){
             for (Map.Entry<String, Object> entry : updates.entrySet()){
@@ -80,7 +84,7 @@ public class UserService {
 
                 if ( !entry.getKey().equals("role")) {return false;}
 
-                if (entry.getValue() == Role.Admin){return false;}
+                if (entry.getValue() == Role.Admin) {return false;}
 
                 target.setRole((Role) entry.getValue());
                 userRepo.save(target);
@@ -95,9 +99,9 @@ public class UserService {
         return passwordEncoder.matches(tryingPassword,  user.getPassword());
     }
 
-    public void save(User  user){
+    public User save(User  user){
         user.setPassword(passwordEncoder.encode(user.getPassword()));
-        userRepo.save(user);
+        return userRepo.save(user);
     }
 
     public Iterable<User> getAll(){
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java
index dfbf7ed..bc781be 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java
@@ -1,7 +1,6 @@
 package ovh.herisson.Clyde.Tables;
 
 import jakarta.persistence.*;
-
 import java.util.Date;
 
 
@@ -25,13 +24,14 @@ public class InscriptionRequest {
 
     private String password;
     public InscriptionRequest(){}
-    public InscriptionRequest(String lastName, String firstName, String address, String email, String country, Date birthDate, RequestState state, String profilePicture, String password){
+    public InscriptionRequest(String lastName, String firstName, String address, String email, String country, Date birthDate,Curriculum curriculum, RequestState state, String profilePicture, String password){
         this.lastName = lastName;
         this.firstName = firstName;
         this.address = address;
         this.email = email;
         this.country = country;
         this.birthDate = birthDate;
+        this.curriculum = curriculum;
         this.state = state;
         this.profilePicture = profilePicture;
         this.password = password;

From 382d3c203aedb51ae54d960f4301b534c274cb40 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sat, 16 Mar 2024 20:25:35 +0100
Subject: [PATCH 02/23] cleaned the services

---
 .../EndPoints/ApplicationsController.java     |  6 ++---
 .../Clyde/EndPoints/CourseController.java     | 12 +++++-----
 .../Clyde/EndPoints/CurriculumController.java |  2 +-
 .../EndPoints/InscriptionController.java      |  6 ++---
 .../Clyde/EndPoints/TokenController.java      |  2 +-
 .../Clyde/EndPoints/UserController.java       |  4 ++--
 .../Clyde/Repositories/TokenRepository.java   |  2 --
 .../Clyde/Repositories/UserRepository.java    |  7 ------
 .../Clyde/Services/AuthenticatorService.java  | 13 +---------
 .../Clyde/Services/CourseService.java         | 23 ++++++++++--------
 .../Services/CurriculumCourseService.java     | 21 ++++------------
 .../Clyde/Services/CurriculumService.java     |  6 +----
 .../Clyde/Services/StorageService.java        |  3 +++
 .../Clyde/Services/TeacherCourseService.java  | 12 ++++++----
 .../herisson/Clyde/Services/TokenService.java | 11 +++++----
 .../herisson/Clyde/Services/UserService.java  | 24 ++++++++++++-------
 16 files changed, 67 insertions(+), 87 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java
index 20cd8d4..a708ec1 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java
@@ -56,17 +56,17 @@ public class ApplicationsController {
 
         Role posterRole = user.getRole();
 
-        if (!authServ.IsNotIn(new Role[]{Role.Teacher,Role.Student,Role.Admin},token)) {
+        if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Student,Role.Admin},token)) {
             authorizedApps.add(Applications.Msg);
             authorizedApps.add(Applications.Forum);
             authorizedApps.add(Applications.Rdv);
         }
 
         //if Teacher or Secretary or Admin add ManageCourses App
-        if (!authServ.IsNotIn(new Role[]{Role.Teacher,Role.Secretary,Role.Admin},token))
+        if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Secretary,Role.Admin},token))
             authorizedApps.add(Applications.ManageCourses);
 
-        if (!authServ.IsNotIn(new Role[]{Role.InscriptionService,Role.Admin},token))
+        if (!authServ.isNotIn(new Role[]{Role.InscriptionService,Role.Admin},token))
             authorizedApps.add(Applications.Inscription);
 
         return authorizedApps;
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
index 2a1af6e..ebfa730 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
@@ -46,7 +46,7 @@ public class CourseController {
                                              @RequestBody Course course)
     {
 
-        if (authServ.IsNotIn(new Role[]{Role.Secretary,Role.Admin},token))
+        if (authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token))
             return new UnauthorizedResponse<>(null);
 
         return new ResponseEntity<>(courseServ.save(course), HttpStatus.CREATED);
@@ -59,15 +59,15 @@ public class CourseController {
                                               @PathVariable long id)
     {
 
-        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Teacher,Role.Secretary}, token))
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher,Role.Secretary}, token))
             return new UnauthorizedResponse<>(null);
 
-        Course modifiedCourse = courseServ.modifyData(id,updates,authServ.getUserFromToken(token).getRole());
 
-        if (modifiedCourse == null)
+
+        if (!courseServ.modifyData(id, updates, authServ.getUserFromToken(token).getRole()))
             return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 
-        return new ResponseEntity<>(modifiedCourse, HttpStatus.OK);
+        return new ResponseEntity<>(HttpStatus.OK);
     }
 
     @PostMapping("/course/{id}")
@@ -76,7 +76,7 @@ public class CourseController {
                                                @PathVariable Long id)
     {
 
-        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Secretary}, token))
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary}, token))
             return new UnauthorizedResponse<>(null);
 
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
index 0b0abb8..4cb9504 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
@@ -47,7 +47,7 @@ public class CurriculumController {
     @PostMapping("/curriculum")
     public ResponseEntity<Curriculum> postCurriculum(@RequestHeader("Authorization") String token,@RequestBody Curriculum curriculum){
 
-        if (authServ.IsNotIn(new Role[]{Role.Secretary,Role.Admin},token))
+        if (authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token))
             return new UnauthorizedResponse<>(null);
 
         return new ResponseEntity<>(curriculumServ.save(curriculum),HttpStatus.CREATED);
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
index 42d6551..814c185 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
@@ -30,7 +30,7 @@ public class InscriptionController {
     @GetMapping("/requests/register")
     public ResponseEntity<Iterable<Map<String,Object>>> getAllRequests(@RequestHeader("Authorization") String token){
 
-        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.InscriptionService},token))
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService},token))
             return new UnauthorizedResponse<>(null);
 
         Iterable<InscriptionRequest> inscriptionRequests = inscriptionServ.getAll();
@@ -47,7 +47,7 @@ public class InscriptionController {
     @GetMapping("/request/register/{id}")
     public ResponseEntity<Map<String,Object>> getById(@RequestHeader("Authorization") String token, @PathVariable long id){
 
-        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.InscriptionService},token))
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService},token))
             return new UnauthorizedResponse<>(null);
 
         InscriptionRequest foundInscriptionRequest = inscriptionServ.getById(id);
@@ -80,7 +80,7 @@ public class InscriptionController {
                                                                  @RequestBody RequestState requestState)
     {
 
-        if (authServ.IsNotIn(new Role[]{Role.InscriptionService,Role.Admin},token))
+        if (authServ.isNotIn(new Role[]{Role.InscriptionService,Role.Admin},token))
             return new UnauthorizedResponse<>(null);
 
         if (!inscriptionServ.modifyState(id, requestState))
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/TokenController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/TokenController.java
index 1d18881..6391b11 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/TokenController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/TokenController.java
@@ -29,7 +29,7 @@ public class TokenController {
     @GetMapping("/tokens")
     public ResponseEntity<Iterable<Token>> getTokens(@RequestHeader("Authorization")String token){
 
-        if (authServ.IsNotIn(new Role[]{Role.Admin},token))
+        if (authServ.isNotIn(new Role[]{Role.Admin},token))
             return new UnauthorizedResponse<>(null);
 
         return new ResponseEntity<>(tokenServ.getAllTokens(), HttpStatus.OK);
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index fd6151e..f4782e5 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -41,7 +41,7 @@ public class UserController {
     @PostMapping("/user")
     public ResponseEntity<Map<String ,Object>> postUser(@RequestBody User user,@RequestHeader("Authorization") String token){
 
-        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.InscriptionService,Role.Secretary},token))
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
         return new ResponseEntity<>(userWithoutPassword(userService.save(user)),HttpStatus.CREATED);
@@ -50,7 +50,7 @@ public class UserController {
     @GetMapping("/users")
     public ResponseEntity<Iterable<HashMap<String,Object>>> getAllUsers(@RequestHeader("Authorization") String token){
 
-        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Secretary},token))
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
         Iterable<User> users = userService.getAll();
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/TokenRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/TokenRepository.java
index d3b422a..53bf3aa 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/TokenRepository.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/TokenRepository.java
@@ -10,7 +10,5 @@ public interface TokenRepository extends CrudRepository<Token,Long> {
 
     Token getByToken(String token);
 
-    Iterable<Token> getByUser(User user);
-
     ArrayList <Token> getByUserOrderByExpirationDate(User user);
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserRepository.java
index b2643e0..2df4919 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserRepository.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserRepository.java
@@ -4,19 +4,12 @@ import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import ovh.herisson.Clyde.Tables.User;
 
-import java.util.List;
-
 public interface UserRepository extends CrudRepository<User, Long> {
 
     User findById(long id);
 
     User findByEmail(String email);
 
-    /**
-    @Query(value = "select a.* from Users a ",nativeQuery = true)
-    Iterable<User> findAllUsers();**/
-
     @Query("select u from User u where u.role = ovh.herisson.Clyde.Tables.Role.Teacher")
     Iterable<User> findAllTeachers();
-
 }
\ No newline at end of file
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
index a665096..15ae7eb 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
@@ -39,18 +39,7 @@ public class AuthenticatorService {
         return inscriptionService.save(inscriptionRequest);
     }
 
-
-    public boolean isNotSecretaryOrAdmin(String authorization){
-        if (authorization ==null)
-            return true;
-
-        User poster = getUserFromToken(authorization);
-        if (poster == null) return true;
-
-        return poster.getRole() != Role.Secretary || poster.getRole() != Role.Admin;
-    }
-
-    public boolean IsNotIn(Role[] roles, String token){
+    public boolean isNotIn(Role[] roles, String token){
         if (token == null)
             return true;
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
index 483e865..abfa6ae 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
@@ -5,7 +5,6 @@ import ovh.herisson.Clyde.Repositories.CourseRepository;
 import ovh.herisson.Clyde.Tables.Course;
 import ovh.herisson.Clyde.Tables.Role;
 import ovh.herisson.Clyde.Tables.User;
-
 import java.util.Map;
 
 @Service
@@ -25,21 +24,25 @@ public class CourseService {
         return courseRepo.findById(id);
     }
 
-    public Course modifyData(long id, Map<String, Object> updates, Role role) {
+    public boolean modifyData(long id, Map<String, Object> updates, Role role) {
         Course target = courseRepo.findById(id);
 
         if (target == null)
-            return null;
+            return false;
 
         if (role == Role.Teacher){
             for (Map.Entry<String, Object> entry : updates.entrySet()){
                 if (entry.getKey().equals("title")){
                     target.setTitle((String) entry.getValue());
-                    return courseRepo.save(target);
+                    courseRepo.save(target);
+                    return true;
                 }
             }
         }
 
+        if (role != Role.Secretary)
+            return false;
+
         for (Map.Entry<String ,Object> entry: updates.entrySet()){
             switch (entry.getKey()){
                 case "title":
@@ -49,14 +52,14 @@ public class CourseService {
                     target.setCredits((Integer) entry.getValue());
                     break;
                 case "owner":
-                    target.setOwner((User) entry.getValue()); //todo check if is a teacher !
+                    if (((User) entry.getValue() ).getRole() != Role.Teacher)
+                        break;
+
+                    target.setOwner((User) entry.getValue());
                     break;
             }
         }
-        return courseRepo.save(target);
-    }
-
-    public void delete(Long id) {
-        courseRepo.deleteById(id);
+        courseRepo.save(target);
+        return true;
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
index ccf1226..5e1992d 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
@@ -1,13 +1,10 @@
 package ovh.herisson.Clyde.Services;
 
 import org.springframework.stereotype.Service;
-import ovh.herisson.Clyde.Repositories.CourseRepository;
 import ovh.herisson.Clyde.Repositories.CurriculumCourseRepository;
-import ovh.herisson.Clyde.Repositories.CurriculumRepository;
 import ovh.herisson.Clyde.Tables.Course;
 import ovh.herisson.Clyde.Tables.Curriculum;
 import ovh.herisson.Clyde.Tables.CurriculumCourse;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
@@ -17,27 +14,21 @@ public class CurriculumCourseService {
 
     private final CurriculumCourseRepository curriculumCourseRepo;
 
-    private final CourseRepository courseRepo;
 
-    private final CurriculumRepository curriculumRepo;
-
-    public CurriculumCourseService(CurriculumCourseRepository curriculumCourseRepository, CourseRepository courseRepo, CurriculumRepository curriculumRepo) {
+    public CurriculumCourseService(CurriculumCourseRepository curriculumCourseRepository) {
         this.curriculumCourseRepo = curriculumCourseRepository;
-        this.courseRepo = courseRepo;
-        this.curriculumRepo = curriculumRepo;
     }
 
     public void save(CurriculumCourse curriculumCourse){
         curriculumCourseRepo.save(curriculumCourse);
     }
 
-    public Iterable<CurriculumCourse> findAll(){
-        return curriculumCourseRepo.findAll();
-    }
-
 
     public Map<String, Object> getDepthCurriculum(Curriculum curriculum){
 
+        if (curriculum == null)
+            return null;
+
         HashMap<String ,Object> toReturn = new HashMap<>();
         ArrayList<Course> courses = new ArrayList<>();
         for (Course c: curriculumCourseRepo.findCoursesByCurriculum(curriculum)){
@@ -61,8 +52,4 @@ public class CurriculumCourseService {
         }
         return toReturn;
     }
-
-
-
-
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java
index 04c6ab2..0c9dc42 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java
@@ -15,12 +15,8 @@ public class CurriculumService {
     public Curriculum save(Curriculum curriculum){
         return curriculumRepo.save(curriculum);
     }
-
     public Curriculum findById(long id){
         return curriculumRepo.findById(id);
     }
 
-    public void delete(Long id) {
-        curriculumRepo.deleteById(id);
-    }
-}
+}
\ No newline at end of file
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/StorageService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/StorageService.java
index fb04f68..dd0830c 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/StorageService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/StorageService.java
@@ -35,6 +35,9 @@ public class StorageService {
 
     public StorageFile store(MultipartFile file, FileType fileType) {
 
+        if (file == null || file.getOriginalFilename() == null)
+            return null;
+
         if (file.getOriginalFilename().isEmpty()){return null;}
 
         UUID uuid = UUID.randomUUID();
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java
index 83135ea..84900a8 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java
@@ -22,21 +22,23 @@ public class TeacherCourseService {
 
     public boolean saveAll(Iterable<Long> teacherIds, Course course){
 
-        if (course == null)
+        if (course == null  || teacherIds == null)
             return false;
 
-        ArrayList<Long> addedIds = new ArrayList<>();
+        ArrayList<User> toAdd = new ArrayList<>();
         for (Long teacherId : teacherIds){
             User teacher = userRepo.findById((long) teacherId);
             if ( teacher== null){
                 return false;
             }
-            if (!addedIds.contains(teacherId))
+            if (!toAdd.contains(teacher))
             {
-                teacherCourseRepo.save(new TeacherCourse(teacher,course));
-                addedIds.add(teacherId);
+                toAdd.add(teacher);
             }
         }
+        for (User teacher: toAdd){
+            teacherCourseRepo.save(new TeacherCourse(teacher,course));
+        }
         return true;
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/TokenService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/TokenService.java
index 2f746ce..c20977d 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/TokenService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/TokenService.java
@@ -40,16 +40,19 @@ public class TokenService {
 
     public User getUserFromToken(String token) {
         Token tokenRep = tokenRepo.getByToken(token);
-        if (tokenRep == null) return null;
+        if (tokenRep == null)
+            return null;
+
         return tokenRep.getUser();
     }
 
     public void saveToken(Token token){
         //Si l'utilisateur a déja 5 token delete celui qui devait expirer le plus vite
         ArrayList<Token> tokenList = tokenRepo.getByUserOrderByExpirationDate(token.getUser());
+
         while(tokenList.size() >= 5){
-            tokenRepo.delete(tokenList.get(0));
-            tokenList.remove(tokenList.get(0));
+            tokenRepo.delete(tokenList.getFirst());
+            tokenList.remove(tokenList.getFirst());
         }
         tokenRepo.save(token);
     }
@@ -67,5 +70,5 @@ public class TokenService {
                 tokenRepo.delete(t);
             }
         }
-    };
+    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
index ee45d90..56f3abe 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
@@ -17,8 +17,15 @@ public class UserService {
     }
 
 
+    /** return the user identified by th identifier
+     *
+     * @param identifier can be an email or the RegNo
+     * @return the identified user
+     */
     public User getUser(String identifier){
-        if (identifier == null) return null;
+        if (identifier == null)
+            return null;
+
         try {
             int id = Integer.parseInt(identifier);
             return userRepo.findById(id);
@@ -33,7 +40,7 @@ public class UserService {
      *
      * @param poster the user wanting to modify target's data
      * @param updates the changes to be made
-     * @param target the user to update
+     * @param targetId the id of the user to update
      * @return if the changes were done or not
      */
     public boolean modifyData(long targetId, Map<String ,Object> updates, User poster){
@@ -45,8 +52,6 @@ public class UserService {
         if (poster.getRegNo().equals(target.getRegNo())){
             for (Map.Entry<String, Object> entry : updates.entrySet()){
 
-                if ( entry.getKey().equals("regNo") || entry.getKey().equals("role")) {return false;}
-
                 switch (entry.getKey()){
                     case "firstName":
                         target.setFirstName((String) entry.getValue());
@@ -82,13 +87,14 @@ public class UserService {
         {
             for (Map.Entry<String, Object> entry : updates.entrySet()){
 
-                if ( !entry.getKey().equals("role")) {return false;}
+                if ( entry.getKey().equals("role")) {
 
-                if (entry.getValue() == Role.Admin) {return false;}
+                    if (entry.getValue() == Role.Admin) {return false;}
 
-                target.setRole((Role) entry.getValue());
-                userRepo.save(target);
-                return true;
+                    target.setRole((Role) entry.getValue());
+                    userRepo.save(target);
+                    return true;
+                }
             }
         }
         return false;

From c5d7ce41785be4156a3fbbbdd7a36fc11bc357b8 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sat, 16 Mar 2024 20:31:03 +0100
Subject: [PATCH 03/23] cleaned the Entities

---
 .../Clyde/Tables/InscriptionRequest.java      | 10 +++++++++-
 ...Request.java => ReInscriptionRequest.java} |  8 ++++----
 .../herisson/Clyde/Tables/StorageFile.java    |  1 -
 .../java/ovh/herisson/Clyde/Tables/Token.java |  2 --
 .../java/ovh/herisson/Clyde/Tables/User.java  | 19 ++-----------------
 5 files changed, 15 insertions(+), 25 deletions(-)
 rename backend/src/main/java/ovh/herisson/Clyde/Tables/{ReinscriptionRequest.java => ReInscriptionRequest.java} (88%)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java
index bc781be..b7bfea3 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java
@@ -16,7 +16,7 @@ public class InscriptionRequest {
     private String country;
     private Date birthDate;
 
-    @ManyToOne
+    @ManyToOne(fetch = FetchType.EAGER)
     @JoinColumn(name="Curriculum")
     private Curriculum curriculum;
     private RequestState state;
@@ -112,4 +112,12 @@ public class InscriptionRequest {
     public void setProfilePicture(String profilePicture) {
         this.profilePicture = profilePicture;
     }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/ReinscriptionRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/ReInscriptionRequest.java
similarity index 88%
rename from backend/src/main/java/ovh/herisson/Clyde/Tables/ReinscriptionRequest.java
rename to backend/src/main/java/ovh/herisson/Clyde/Tables/ReInscriptionRequest.java
index 57ad53c..9bd3fba 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/ReinscriptionRequest.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/ReInscriptionRequest.java
@@ -3,7 +3,7 @@ package ovh.herisson.Clyde.Tables;
 import jakarta.persistence.*;
 
 @Entity
-public class ReinscriptionRequest {
+public class ReInscriptionRequest {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private int id;
@@ -21,16 +21,16 @@ public class ReinscriptionRequest {
     //Pour la réinscription on va le mettre a 0
     private boolean type = false;
 
-    public ReinscriptionRequest(){}
+    public ReInscriptionRequest(){}
 
-    public ReinscriptionRequest(User user, Curriculum newCurriculum, RequestState state, boolean type){
+    public ReInscriptionRequest(User user, Curriculum newCurriculum, RequestState state, boolean type){
         this.user = user;
         this.newCurriculum = newCurriculum;
         this.state = state;
         this.type = type;
     }
 
-    public ReinscriptionRequest(User user, Curriculum newCurriculum, RequestState state){
+    public ReInscriptionRequest(User user, Curriculum newCurriculum, RequestState state){
         this.user = user;
         this.newCurriculum = newCurriculum;
         this.state = state;
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/StorageFile.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/StorageFile.java
index afa7985..800d99a 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/StorageFile.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/StorageFile.java
@@ -24,7 +24,6 @@ public class StorageFile {
 
     public StorageFile(){}
 
-
     public void setId(Long id) {
         this.id = id;
     }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Token.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Token.java
index 8aa4c0e..29ef906 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Token.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Token.java
@@ -1,8 +1,6 @@
 package ovh.herisson.Clyde.Tables;
 
 import jakarta.persistence.*;
-import org.springframework.scheduling.annotation.Scheduled;
-import ovh.herisson.Clyde.Repositories.TokenRepository;
 
 import java.util.Date;
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/User.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/User.java
index 1f6aa3b..de958df 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/User.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/User.java
@@ -1,11 +1,8 @@
 package ovh.herisson.Clyde.Tables;
 
 import jakarta.persistence.*;
-
 import java.util.Date;
 
-//Classe représentant un utilisateur l'attribut password demande surement un peu de rafinement niveau sécurité
-//et l'attribut tokenApi doit encore être ajouté vu qu'il faut en discuter
 
 @Entity
 @Table(name = "Users")
@@ -37,18 +34,6 @@ public class User {
         this.password = password;
     }
 
-
-    /** Constructor for the first registration request from a student (can't specify a Role)
-     *
-     * @param lastName
-     * @param firstName
-     * @param email
-     * @param address
-     * @param country
-     * @param birthDate
-     * @param profilePictureUrl
-     * @param password
-     */
     public User(String lastName, String firstName, String email, String address,
                 String country, Date birthDate, String profilePictureUrl, String password)
     {
@@ -95,8 +80,8 @@ public class User {
         return address;
     }
 
-    public void setAddress(String adress) {
-        this.address = adress;
+    public void setAddress(String address) {
+        this.address = address;
     }
 
     public String getCountry() {

From 474a8d3f31f1b7da6642ce6f4cf55d3875c75e58 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 02:00:42 +0100
Subject: [PATCH 04/23] added POST /curriculum/{id} endopoint to post courses

---
 .../Clyde/EndPoints/CurriculumController.java | 19 ++++++++-
 .../Services/CurriculumCourseService.java     | 42 ++++++++++++++++---
 2 files changed, 54 insertions(+), 7 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
index 4cb9504..7a1bfe4 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
@@ -30,13 +30,13 @@ public class CurriculumController {
     }
 
     @GetMapping("/curriculum/{id}")
-    public ResponseEntity<Curriculum> findById(@PathVariable long id){
+    public ResponseEntity<Map<String,Object>> findById(@PathVariable long id){
         Curriculum foundCurriculum = curriculumServ.findById(id);
 
         if (foundCurriculum == null)
             return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 
-        return new ResponseEntity<>(foundCurriculum, HttpStatus.OK);
+        return new ResponseEntity<>(curriculumCourseServ.getDepthCurriculum(foundCurriculum), HttpStatus.OK);
     }
 
     @GetMapping("/curriculums")
@@ -52,4 +52,19 @@ public class CurriculumController {
 
         return new ResponseEntity<>(curriculumServ.save(curriculum),HttpStatus.CREATED);
     }
+
+    @PostMapping("/curriculum/{id}")
+    public ResponseEntity<String> postCoursesToCurriculum(@RequestHeader("Authorization") String token,
+                                                          @RequestBody Iterable<Long> coursesIds,
+                                                          @PathVariable long id)
+    {
+
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
+            return new UnauthorizedResponse<>(null);
+
+        if (!curriculumCourseServ.saveAll(coursesIds, curriculumServ.findById(id)))
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
index 5e1992d..0173a05 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
@@ -1,10 +1,10 @@
 package ovh.herisson.Clyde.Services;
 
 import org.springframework.stereotype.Service;
+import ovh.herisson.Clyde.Repositories.CourseRepository;
 import ovh.herisson.Clyde.Repositories.CurriculumCourseRepository;
-import ovh.herisson.Clyde.Tables.Course;
-import ovh.herisson.Clyde.Tables.Curriculum;
-import ovh.herisson.Clyde.Tables.CurriculumCourse;
+import ovh.herisson.Clyde.Tables.*;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
@@ -14,9 +14,11 @@ public class CurriculumCourseService {
 
     private final CurriculumCourseRepository curriculumCourseRepo;
 
+    private final CourseRepository courseRepo;
 
-    public CurriculumCourseService(CurriculumCourseRepository curriculumCourseRepository) {
+    public CurriculumCourseService(CurriculumCourseRepository curriculumCourseRepository, CourseRepository courseRepo) {
         this.curriculumCourseRepo = curriculumCourseRepository;
+        this.courseRepo = courseRepo;
     }
 
     public void save(CurriculumCourse curriculumCourse){
@@ -31,7 +33,9 @@ public class CurriculumCourseService {
 
         HashMap<String ,Object> toReturn = new HashMap<>();
         ArrayList<Course> courses = new ArrayList<>();
-        for (Course c: curriculumCourseRepo.findCoursesByCurriculum(curriculum)){
+        Iterable<Course> foundCourses = curriculumCourseRepo.findCoursesByCurriculum(curriculum);
+
+        for (Course c: foundCourses){
             courses.add(c);
         }
         toReturn.put("courses",courses);
@@ -52,4 +56,32 @@ public class CurriculumCourseService {
         }
         return toReturn;
     }
+
+    /** tries to add all courses to the curriculum
+     *
+     * @param coursesIds the ids of the courses to be added
+     * @param curriculum the curriculum to add the courses to
+     * @return if the changes were made
+     */
+    public boolean saveAll(Iterable<Long> coursesIds, Curriculum curriculum) {
+
+        if (curriculum == null || coursesIds == null)
+            return false;
+
+        ArrayList<Course> toAdd = new ArrayList<>();
+        for (Long courseId : coursesIds){
+            Course course = courseRepo.findById((long) courseId);
+            if (course == null)
+                return false;
+
+            if (!toAdd.contains(course))
+                toAdd.add(course);
+        }
+
+        for (Course course : toAdd){
+            curriculumCourseRepo.save(new CurriculumCourse(curriculum,course));
+        }
+        return true;
+
+    }
 }

From 6e6bd285afb6a9c55795aee454ce470a666b220a Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 02:15:08 +0100
Subject: [PATCH 05/23] added security to the post of course and GET /courses

---
 .../Clyde/EndPoints/CourseController.java         | 15 ++++++++++++++-
 .../herisson/Clyde/Services/CourseService.java    |  8 ++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
index ebfa730..60e7e1e 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
@@ -40,6 +40,15 @@ public class CourseController {
         return new ResponseEntity<>(foundCourse, HttpStatus.OK);
     }
 
+    @GetMapping("/courses")
+    public ResponseEntity<Iterable<Course>> getAllCourses(@RequestHeader("Authorization") String token){
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
+            return new UnauthorizedResponse<>(null);
+
+
+        return new ResponseEntity<>(courseServ.findAll(),HttpStatus.OK);
+    }
+
 
     @PostMapping("/course")
     public ResponseEntity<Course> postCourse(@RequestHeader("Authorization") String token,
@@ -49,7 +58,11 @@ public class CourseController {
         if (authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token))
             return new UnauthorizedResponse<>(null);
 
-        return new ResponseEntity<>(courseServ.save(course), HttpStatus.CREATED);
+        Course createdCourse = courseServ.save(course);
+        if (createdCourse == null)
+            return new ResponseEntity<>(null,HttpStatus.BAD_REQUEST);
+
+        return new ResponseEntity<>(createdCourse, HttpStatus.CREATED);
     }
 
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
index abfa6ae..bdb9ae8 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
@@ -17,6 +17,8 @@ public class CourseService {
     }
 
     public Course save(Course course){
+        if (course.getOwner().getRole() != Role.Teacher)
+            return null;
         return courseRepo.save(course);
     }
 
@@ -24,6 +26,11 @@ public class CourseService {
         return courseRepo.findById(id);
     }
 
+
+    public Iterable<Course> findAll() {
+        return courseRepo.findAll();
+    }
+
     public boolean modifyData(long id, Map<String, Object> updates, Role role) {
         Course target = courseRepo.findById(id);
 
@@ -62,4 +69,5 @@ public class CourseService {
         courseRepo.save(target);
         return true;
     }
+
 }

From 4cf2ac1aa8c0bf8ecfd540653519b3d1c4f0205b Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 02:34:00 +0100
Subject: [PATCH 06/23] fixed an issue with the getting of curriculums

---
 .../Clyde/Services/CurriculumCourseService.java       | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
index 0173a05..a32e9d6 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
@@ -3,6 +3,7 @@ package ovh.herisson.Clyde.Services;
 import org.springframework.stereotype.Service;
 import ovh.herisson.Clyde.Repositories.CourseRepository;
 import ovh.herisson.Clyde.Repositories.CurriculumCourseRepository;
+import ovh.herisson.Clyde.Repositories.CurriculumRepository;
 import ovh.herisson.Clyde.Tables.*;
 
 import java.util.ArrayList;
@@ -16,9 +17,12 @@ public class CurriculumCourseService {
 
     private final CourseRepository courseRepo;
 
-    public CurriculumCourseService(CurriculumCourseRepository curriculumCourseRepository, CourseRepository courseRepo) {
+    private final CurriculumRepository curriculumRepo;
+
+    public CurriculumCourseService(CurriculumCourseRepository curriculumCourseRepository, CourseRepository courseRepo, CurriculumRepository curriculumRepo) {
         this.curriculumCourseRepo = curriculumCourseRepository;
         this.courseRepo = courseRepo;
+        this.curriculumRepo = curriculumRepo;
     }
 
     public void save(CurriculumCourse curriculumCourse){
@@ -51,9 +55,11 @@ public class CurriculumCourseService {
 
         ArrayList<Map<String,Object>> toReturn = new ArrayList<>();
 
-        for (Curriculum curriculum : curriculumCourseRepo.findDistinctCurriculums()){
+        for (Curriculum curriculum : curriculumRepo.findAll()){
             toReturn.add(getDepthCurriculum(curriculum));
         }
+
+
         return toReturn;
     }
 
@@ -70,6 +76,7 @@ public class CurriculumCourseService {
 
         ArrayList<Course> toAdd = new ArrayList<>();
         for (Long courseId : coursesIds){
+
             Course course = courseRepo.findById((long) courseId);
             if (course == null)
                 return false;

From 1d793cef4eae3b62fda3530be8ddf22fad9b3dbb Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 02:40:05 +0100
Subject: [PATCH 07/23] moved UserWithouPaswword to authenticatorService

---
 .../Clyde/EndPoints/UserController.java       | 28 +++----------------
 .../Clyde/Services/AuthenticatorService.java  | 21 ++++++++++++++
 2 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index f4782e5..3f68141 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -35,7 +35,7 @@ public class UserController {
         User user = authServ.getUserFromToken(token);
             if (user == null) return new UnauthorizedResponse<>(null);
 
-        return new ResponseEntity<>(userWithoutPassword(user), HttpStatus.OK);
+        return new ResponseEntity<>(authServ.userWithoutPassword(user), HttpStatus.OK);
     }
 
     @PostMapping("/user")
@@ -44,7 +44,7 @@ public class UserController {
         if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
-        return new ResponseEntity<>(userWithoutPassword(userService.save(user)),HttpStatus.CREATED);
+        return new ResponseEntity<>(authServ.userWithoutPassword(userService.save(user)),HttpStatus.CREATED);
     }
 
     @GetMapping("/users")
@@ -57,7 +57,7 @@ public class UserController {
         ArrayList<HashMap<String, Object>> withoutPassword = new ArrayList<>();
 
         for (User u :users){
-            withoutPassword.add(userWithoutPassword(u));
+            withoutPassword.add(authServ.userWithoutPassword(u));
         }
         return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
     }
@@ -95,30 +95,10 @@ public class UserController {
         ArrayList<HashMap<String, Object>> withoutPassword = new ArrayList<>();
 
         for (User t: teachers){
-            withoutPassword.add(userWithoutPassword(t));
+            withoutPassword.add(authServ.userWithoutPassword(t));
         }
 
         return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
     }
-
-
-
-        /** return user's data except password
-         * @param user the user to return
-         * @return all the user data without the password
-         */
-    private HashMap<String,Object> userWithoutPassword(User user){
-        HashMap<String,Object> toReturn = new HashMap<>();
-        toReturn.put("regNo",user.getRegNo());
-        toReturn.put("lastName",user.getLastName());
-        toReturn.put("firstName",user.getFirstName());
-        toReturn.put("email", user.getEmail());
-        toReturn.put("address",user.getAddress());
-        toReturn.put("birthDate",user.getBirthDate());
-        toReturn.put("country",user.getCountry());
-        toReturn.put("profilePictureUrl",user.getProfilePictureUrl());
-        toReturn.put("role",user.getRole());
-        return toReturn;
-    }
 }
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
index 15ae7eb..cbd0a6d 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
@@ -7,6 +7,7 @@ import ovh.herisson.Clyde.Tables.Token;
 import ovh.herisson.Clyde.Tables.User;
 
 import java.util.Date;
+import java.util.HashMap;
 
 @Service
 public class AuthenticatorService {
@@ -52,5 +53,25 @@ public class AuthenticatorService {
         }
         return true;
     }
+
+
+
+    /** return user's data except password
+     * @param user the user to return
+     * @return all the user data without the password
+     */
+    public HashMap<String,Object> userWithoutPassword(User user){
+        HashMap<String,Object> toReturn = new HashMap<>();
+        toReturn.put("regNo",user.getRegNo());
+        toReturn.put("lastName",user.getLastName());
+        toReturn.put("firstName",user.getFirstName());
+        toReturn.put("email", user.getEmail());
+        toReturn.put("address",user.getAddress());
+        toReturn.put("birthDate",user.getBirthDate());
+        toReturn.put("country",user.getCountry());
+        toReturn.put("profilePictureUrl",user.getProfilePictureUrl());
+        toReturn.put("role",user.getRole());
+        return toReturn;
+    }
 }
 

From a70b05a0ef240cc42b36ab52f367672c9fc248f4 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 02:45:49 +0100
Subject: [PATCH 08/23] protected course'owner password

---
 .../Clyde/EndPoints/CourseController.java       | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
index ebfa730..c86b46e 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
@@ -9,6 +9,8 @@ import ovh.herisson.Clyde.Services.CourseService;
 import ovh.herisson.Clyde.Services.TeacherCourseService;
 import ovh.herisson.Clyde.Tables.Course;
 import ovh.herisson.Clyde.Tables.Role;
+
+import java.util.HashMap;
 import java.util.Map;
 
 @RestController
@@ -28,7 +30,7 @@ public class CourseController {
     }
 
     @GetMapping("/course/{id}")
-    public ResponseEntity<Course> getCourse(@RequestHeader("Authorization") String token, @PathVariable long id){
+    public ResponseEntity<HashMap<String,Object>> getCourse(@RequestHeader("Authorization") String token, @PathVariable long id){
         if (authServ.getUserFromToken(token) == null)
             return new UnauthorizedResponse<>(null);
 
@@ -37,7 +39,7 @@ public class CourseController {
         if (foundCourse == null)
             return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 
-        return new ResponseEntity<>(foundCourse, HttpStatus.OK);
+        return new ResponseEntity<>(courseWithoutPassword(foundCourse), HttpStatus.OK);
     }
 
 
@@ -85,4 +87,15 @@ public class CourseController {
 
         return new ResponseEntity<>(HttpStatus.OK);
     }
+
+
+
+    private HashMap<String,Object> courseWithoutPassword(Course course){
+        HashMap<String ,Object> toReturn = new HashMap<>();
+
+        toReturn.put("courseId",course.getCourseID());
+        toReturn.put("credits",course.getCredits());
+        toReturn.put("title", course.getTitle());
+        toReturn.put("owner", authServ.userWithoutPassword(course.getOwner()));
+    }
 }

From f2507ddcdd6b05d34b5e7f30615b80a4ad8e5c41 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 02:46:33 +0100
Subject: [PATCH 09/23] forgot the return statement

---
 .../main/java/ovh/herisson/Clyde/EndPoints/CourseController.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
index c86b46e..05c9d96 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
@@ -97,5 +97,6 @@ public class CourseController {
         toReturn.put("credits",course.getCredits());
         toReturn.put("title", course.getTitle());
         toReturn.put("owner", authServ.userWithoutPassword(course.getOwner()));
+        return toReturn;
     }
 }

From f7df234312ebed12e03d100d9578ba08cd356042 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 03:06:19 +0100
Subject: [PATCH 10/23] moved portective method to Static ProtectiveService

---
 .../Clyde/EndPoints/CourseController.java     | 30 +++++++--------
 .../Clyde/EndPoints/UserController.java       |  9 +++--
 .../Clyde/Services/AuthenticatorService.java  | 25 +-----------
 .../Services/CurriculumCourseService.java     |  5 +--
 .../Clyde/Services/ProtectionService.java     | 38 +++++++++++++++++++
 5 files changed, 59 insertions(+), 48 deletions(-)
 create mode 100644 backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
index a7a9719..82e66da 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
@@ -6,10 +6,12 @@ import org.springframework.web.bind.annotation.*;
 import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 import ovh.herisson.Clyde.Services.AuthenticatorService;
 import ovh.herisson.Clyde.Services.CourseService;
+import ovh.herisson.Clyde.Services.ProtectionService;
 import ovh.herisson.Clyde.Services.TeacherCourseService;
 import ovh.herisson.Clyde.Tables.Course;
 import ovh.herisson.Clyde.Tables.Role;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -39,21 +41,27 @@ public class CourseController {
         if (foundCourse == null)
             return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 
-        return new ResponseEntity<>(courseWithoutPassword(foundCourse), HttpStatus.OK);
+        return new ResponseEntity<>(ProtectionService.courseWithoutPassword(foundCourse), HttpStatus.OK);
     }
 
     @GetMapping("/courses")
-    public ResponseEntity<Iterable<Course>> getAllCourses(@RequestHeader("Authorization") String token){
+    public ResponseEntity<Iterable<HashMap<String,Object>>> getAllCourses(@RequestHeader("Authorization") String token){
         if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
+        Iterable<Course> courses = courseServ.findAll();
+        ArrayList<HashMap<String,Object>> coursesWithoutPassword = new ArrayList<>();
 
-        return new ResponseEntity<>(courseServ.findAll(),HttpStatus.OK);
+        for (Course course: courses){
+            coursesWithoutPassword.add(ProtectionService.courseWithoutPassword(course));
+        }
+
+        return new ResponseEntity<>(coursesWithoutPassword,HttpStatus.OK);
     }
 
 
     @PostMapping("/course")
-    public ResponseEntity<Course> postCourse(@RequestHeader("Authorization") String token,
+    public ResponseEntity<Map<String ,Object>> postCourse(@RequestHeader("Authorization") String token,
                                              @RequestBody Course course)
     {
 
@@ -64,7 +72,7 @@ public class CourseController {
         if (createdCourse == null)
             return new ResponseEntity<>(null,HttpStatus.BAD_REQUEST);
 
-        return new ResponseEntity<>(createdCourse, HttpStatus.CREATED);
+        return new ResponseEntity<>(ProtectionService.courseWithoutPassword(createdCourse), HttpStatus.CREATED);
     }
 
 
@@ -100,16 +108,4 @@ public class CourseController {
 
         return new ResponseEntity<>(HttpStatus.OK);
     }
-
-
-
-    private HashMap<String,Object> courseWithoutPassword(Course course){
-        HashMap<String ,Object> toReturn = new HashMap<>();
-
-        toReturn.put("courseId",course.getCourseID());
-        toReturn.put("credits",course.getCredits());
-        toReturn.put("title", course.getTitle());
-        toReturn.put("owner", authServ.userWithoutPassword(course.getOwner()));
-        return toReturn;
-    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index 3f68141..c449a27 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -5,6 +5,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 import ovh.herisson.Clyde.Services.AuthenticatorService;
+import ovh.herisson.Clyde.Services.ProtectionService;
 import ovh.herisson.Clyde.Services.UserService;
 import ovh.herisson.Clyde.Tables.Role;
 import ovh.herisson.Clyde.Tables.User;
@@ -35,7 +36,7 @@ public class UserController {
         User user = authServ.getUserFromToken(token);
             if (user == null) return new UnauthorizedResponse<>(null);
 
-        return new ResponseEntity<>(authServ.userWithoutPassword(user), HttpStatus.OK);
+        return new ResponseEntity<>(ProtectionService.userWithoutPassword(user), HttpStatus.OK);
     }
 
     @PostMapping("/user")
@@ -44,7 +45,7 @@ public class UserController {
         if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
-        return new ResponseEntity<>(authServ.userWithoutPassword(userService.save(user)),HttpStatus.CREATED);
+        return new ResponseEntity<>(ProtectionService.userWithoutPassword(userService.save(user)),HttpStatus.CREATED);
     }
 
     @GetMapping("/users")
@@ -57,7 +58,7 @@ public class UserController {
         ArrayList<HashMap<String, Object>> withoutPassword = new ArrayList<>();
 
         for (User u :users){
-            withoutPassword.add(authServ.userWithoutPassword(u));
+            withoutPassword.add(ProtectionService.userWithoutPassword(u));
         }
         return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
     }
@@ -95,7 +96,7 @@ public class UserController {
         ArrayList<HashMap<String, Object>> withoutPassword = new ArrayList<>();
 
         for (User t: teachers){
-            withoutPassword.add(authServ.userWithoutPassword(t));
+            withoutPassword.add(ProtectionService.userWithoutPassword(t));
         }
 
         return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
index cbd0a6d..a73182a 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
@@ -1,10 +1,7 @@
 package ovh.herisson.Clyde.Services;
 
 import org.springframework.stereotype.Service;
-import ovh.herisson.Clyde.Tables.InscriptionRequest;
-import ovh.herisson.Clyde.Tables.Role;
-import ovh.herisson.Clyde.Tables.Token;
-import ovh.herisson.Clyde.Tables.User;
+import ovh.herisson.Clyde.Tables.*;
 
 import java.util.Date;
 import java.util.HashMap;
@@ -53,25 +50,5 @@ public class AuthenticatorService {
         }
         return true;
     }
-
-
-
-    /** return user's data except password
-     * @param user the user to return
-     * @return all the user data without the password
-     */
-    public HashMap<String,Object> userWithoutPassword(User user){
-        HashMap<String,Object> toReturn = new HashMap<>();
-        toReturn.put("regNo",user.getRegNo());
-        toReturn.put("lastName",user.getLastName());
-        toReturn.put("firstName",user.getFirstName());
-        toReturn.put("email", user.getEmail());
-        toReturn.put("address",user.getAddress());
-        toReturn.put("birthDate",user.getBirthDate());
-        toReturn.put("country",user.getCountry());
-        toReturn.put("profilePictureUrl",user.getProfilePictureUrl());
-        toReturn.put("role",user.getRole());
-        return toReturn;
-    }
 }
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
index a32e9d6..19549d0 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumCourseService.java
@@ -36,11 +36,11 @@ public class CurriculumCourseService {
             return null;
 
         HashMap<String ,Object> toReturn = new HashMap<>();
-        ArrayList<Course> courses = new ArrayList<>();
+        ArrayList<Map<String ,Object>> courses = new ArrayList<>();
         Iterable<Course> foundCourses = curriculumCourseRepo.findCoursesByCurriculum(curriculum);
 
         for (Course c: foundCourses){
-            courses.add(c);
+            courses.add(ProtectionService.courseWithoutPassword(c));
         }
         toReturn.put("courses",courses);
         toReturn.put("curriculumId", curriculum.getCurriculumId());
@@ -89,6 +89,5 @@ public class CurriculumCourseService {
             curriculumCourseRepo.save(new CurriculumCourse(curriculum,course));
         }
         return true;
-
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
new file mode 100644
index 0000000..8c778e1
--- /dev/null
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
@@ -0,0 +1,38 @@
+package ovh.herisson.Clyde.Services;
+
+import ovh.herisson.Clyde.Tables.Course;
+import ovh.herisson.Clyde.Tables.User;
+
+import java.util.HashMap;
+
+public class ProtectionService {
+
+    /** return user's data except password
+     * @param user the user to return
+     * @return all the user data without the password
+     */
+    public static HashMap<String,Object> userWithoutPassword(User user){
+        HashMap<String,Object> toReturn = new HashMap<>();
+        toReturn.put("regNo",user.getRegNo());
+        toReturn.put("lastName",user.getLastName());
+        toReturn.put("firstName",user.getFirstName());
+        toReturn.put("email", user.getEmail());
+        toReturn.put("address",user.getAddress());
+        toReturn.put("birthDate",user.getBirthDate());
+        toReturn.put("country",user.getCountry());
+        toReturn.put("profilePictureUrl",user.getProfilePictureUrl());
+        toReturn.put("role",user.getRole());
+        return toReturn;
+    }
+    public static HashMap<String,Object> courseWithoutPassword(Course course){
+        HashMap<String ,Object> toReturn = new HashMap<>();
+
+        toReturn.put("courseId",course.getCourseID());
+        toReturn.put("credits",course.getCredits());
+        toReturn.put("title", course.getTitle());
+        toReturn.put("owner", userWithoutPassword(course.getOwner()));
+        return toReturn;
+    }
+
+}
+

From cf2deb983deae06caacb50243812e92bcbd0533e Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 12:13:03 +0100
Subject: [PATCH 11/23] added security to assistant posting and Get
 courses/owned for owners

---
 .../Clyde/EndPoints/CourseController.java     | 25 ++++++++++++-----
 .../Clyde/EndPoints/UserController.java       | 14 ++--------
 .../Clyde/Repositories/CourseRepository.java  |  7 +++++
 .../Repositories/TeacherCourseRepository.java |  6 +++++
 .../Clyde/Services/CourseService.java         |  7 +++++
 .../Clyde/Services/ProtectionService.java     | 27 +++++++++++++++++++
 .../Clyde/Services/TeacherCourseService.java  | 11 +++++++-
 7 files changed, 77 insertions(+), 20 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
index 82e66da..f3e93d4 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
@@ -10,8 +10,8 @@ import ovh.herisson.Clyde.Services.ProtectionService;
 import ovh.herisson.Clyde.Services.TeacherCourseService;
 import ovh.herisson.Clyde.Tables.Course;
 import ovh.herisson.Clyde.Tables.Role;
+import ovh.herisson.Clyde.Tables.User;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -49,14 +49,25 @@ public class CourseController {
         if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
-        Iterable<Course> courses = courseServ.findAll();
-        ArrayList<HashMap<String,Object>> coursesWithoutPassword = new ArrayList<>();
+        return new ResponseEntity<>(ProtectionService.coursesWithoutPasswords(courseServ.findAll()),HttpStatus.OK);
+    }
 
-        for (Course course: courses){
-            coursesWithoutPassword.add(ProtectionService.courseWithoutPassword(course));
-        }
+    @GetMapping("/courses/owned")
+    public ResponseEntity<Iterable<HashMap<String ,Object>>> getOwnedCourses(@RequestHeader("Authorization") String token){
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token))
+            return new UnauthorizedResponse<>(null);
 
-        return new ResponseEntity<>(coursesWithoutPassword,HttpStatus.OK);
+        return new ResponseEntity<>(ProtectionService.coursesWithoutPasswords(courseServ.findOwnedCourses(authServ.getUserFromToken(token))),HttpStatus.OK);
+    }
+
+    @GetMapping("/course/{id}/assistants")
+    public ResponseEntity<Iterable<HashMap<String,Object>>> getCourseAssistants(@RequestHeader("Authorization")String token, @PathVariable long id){
+        if (authServ.getUserFromToken(token) == null)
+            return new UnauthorizedResponse<>(null);
+
+        Iterable<User> assistants = teacherCourseServ.findCourseAssistants(courseServ.findById(id));
+
+        return new ResponseEntity<>(ProtectionService.usersWithoutPasswords(assistants),HttpStatus.OK);
     }
 
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index c449a27..bcc866f 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -9,7 +9,6 @@ import ovh.herisson.Clyde.Services.ProtectionService;
 import ovh.herisson.Clyde.Services.UserService;
 import ovh.herisson.Clyde.Tables.Role;
 import ovh.herisson.Clyde.Tables.User;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -55,12 +54,8 @@ public class UserController {
             return new UnauthorizedResponse<>(null);
 
         Iterable<User> users = userService.getAll();
-        ArrayList<HashMap<String, Object>> withoutPassword = new ArrayList<>();
 
-        for (User u :users){
-            withoutPassword.add(ProtectionService.userWithoutPassword(u));
-        }
-        return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
+        return new ResponseEntity<>(ProtectionService.usersWithoutPasswords(users), HttpStatus.OK);
     }
 
     /** changes the specified user's information
@@ -93,13 +88,8 @@ public class UserController {
             return new UnauthorizedResponse<>(null);
 
         Iterable<User> teachers = userService.getAllTeachers();
-        ArrayList<HashMap<String, Object>> withoutPassword = new ArrayList<>();
 
-        for (User t: teachers){
-            withoutPassword.add(ProtectionService.userWithoutPassword(t));
-        }
-
-        return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
+        return new ResponseEntity<>(ProtectionService.usersWithoutPasswords(teachers), HttpStatus.OK);
     }
 }
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/CourseRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/CourseRepository.java
index 671a995..aa7564a 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/CourseRepository.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/CourseRepository.java
@@ -1,8 +1,15 @@
 package ovh.herisson.Clyde.Repositories;
 
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import ovh.herisson.Clyde.Tables.Course;
+import ovh.herisson.Clyde.Tables.User;
 
 public interface CourseRepository extends CrudRepository<Course,Long> {
     Course findById(long id);
+
+
+    @Query("select c from Course c where c.owner = ?1")
+    Iterable<Course> findAllOwnedCoures(User teacher);
+
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/TeacherCourseRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/TeacherCourseRepository.java
index ffe654a..3dbb7ff 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/TeacherCourseRepository.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/TeacherCourseRepository.java
@@ -1,8 +1,14 @@
 package ovh.herisson.Clyde.Repositories;
 
 
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
+import ovh.herisson.Clyde.Tables.Course;
 import ovh.herisson.Clyde.Tables.TeacherCourse;
+import ovh.herisson.Clyde.Tables.User;
 
 public interface TeacherCourseRepository extends CrudRepository<TeacherCourse, Long> {
+
+    @Query("select tc.user from TeacherCourse tc where tc.course = ?1")
+    Iterable<User> findAllAssistantOfCourse(Course course);
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
index bdb9ae8..b5dd906 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
@@ -31,6 +31,13 @@ public class CourseService {
         return courseRepo.findAll();
     }
 
+
+    public Iterable<Course> findOwnedCourses(User userFromToken) {
+        return courseRepo.findAllOwnedCoures(userFromToken);
+    }
+
+
+
     public boolean modifyData(long id, Map<String, Object> updates, Role role) {
         Course target = courseRepo.findById(id);
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
index 8c778e1..7f2bea8 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
@@ -3,6 +3,7 @@ package ovh.herisson.Clyde.Services;
 import ovh.herisson.Clyde.Tables.Course;
 import ovh.herisson.Clyde.Tables.User;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 
 public class ProtectionService {
@@ -13,6 +14,7 @@ public class ProtectionService {
      */
     public static HashMap<String,Object> userWithoutPassword(User user){
         HashMap<String,Object> toReturn = new HashMap<>();
+
         toReturn.put("regNo",user.getRegNo());
         toReturn.put("lastName",user.getLastName());
         toReturn.put("firstName",user.getFirstName());
@@ -24,6 +26,19 @@ public class ProtectionService {
         toReturn.put("role",user.getRole());
         return toReturn;
     }
+
+    public static Iterable<HashMap<String ,Object>>usersWithoutPasswords(Iterable<User> users){
+        ArrayList<HashMap<String,Object>> toReturn = new ArrayList<>();
+
+        for (User u : users){
+            toReturn.add(userWithoutPassword(u));
+        }
+
+        return toReturn;
+    }
+
+
+
     public static HashMap<String,Object> courseWithoutPassword(Course course){
         HashMap<String ,Object> toReturn = new HashMap<>();
 
@@ -34,5 +49,17 @@ public class ProtectionService {
         return toReturn;
     }
 
+    public static Iterable<HashMap<String ,Object>> coursesWithoutPasswords(Iterable<Course> courses){
+        ArrayList<HashMap<String,Object>> toReturn = new ArrayList<>();
+
+        for (Course course: courses){
+            toReturn.add(ProtectionService.courseWithoutPassword(course));
+        }
+
+        return toReturn;
+
+    }
+
+
 }
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java
index 84900a8..dee3a7b 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/TeacherCourseService.java
@@ -4,6 +4,7 @@ import org.springframework.stereotype.Controller;
 import ovh.herisson.Clyde.Repositories.TeacherCourseRepository;
 import ovh.herisson.Clyde.Repositories.UserRepository;
 import ovh.herisson.Clyde.Tables.Course;
+import ovh.herisson.Clyde.Tables.Role;
 import ovh.herisson.Clyde.Tables.TeacherCourse;
 import ovh.herisson.Clyde.Tables.User;
 
@@ -20,6 +21,13 @@ public class TeacherCourseService {
         this.userRepo = userRepo;
     }
 
+    public Iterable<User> findCourseAssistants(Course course) {
+        if (course == null)
+            return null;
+        return teacherCourseRepo.findAllAssistantOfCourse(course);
+    }
+
+
     public boolean saveAll(Iterable<Long> teacherIds, Course course){
 
         if (course == null  || teacherIds == null)
@@ -31,7 +39,7 @@ public class TeacherCourseService {
             if ( teacher== null){
                 return false;
             }
-            if (!toAdd.contains(teacher))
+            if (!toAdd.contains(teacher) && teacher.getRole() == Role.Teacher)
             {
                 toAdd.add(teacher);
             }
@@ -41,4 +49,5 @@ public class TeacherCourseService {
         }
         return true;
     }
+
 }

From ea46dd664cd3ea193dfd754c5e6a6199fa84b79e Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 16:02:30 +0100
Subject: [PATCH 12/23] added a todo to send an email for every state
 changement of request

---
 .../Clyde/EndPoints/InscriptionController.java   | 16 ----------------
 .../Clyde/Services/InscriptionService.java       | 10 ++++++++++
 2 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
index 814c185..1c273ba 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
@@ -58,22 +58,6 @@ public class InscriptionController {
         return new ResponseEntity<>(requestWithoutPassword(foundInscriptionRequest), HttpStatus.OK);
     }
 
-    /**
-    @GetMapping("request/user")
-    public ResponseEntity<InscriptionRequest> getUserInscriptionRequest(@RequestHeader("Authorization") String token){
-        //todo return l'inscriptionRequest ACTUELLE du user (check si le poster est bien le même que id target ou secretariat)
-
-        if (authServ.IsNotIn(new Role[]{Role.Student,Role.Admin},token))
-            return new UnauthorizedResponse<>(null);
-
-        User poster = authServ.getUserFromToken(token);
-
-        inscriptionServ.getById()
-
-
-        return null;
-    } **/
-
     @PatchMapping("/request/register/{id}")
     public ResponseEntity<InscriptionRequest> changeRequestState(@PathVariable long id,
                                                                  @RequestHeader("Authorization") String token,
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
index 31b18a6..4712f8f 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
@@ -32,6 +32,16 @@ public class InscriptionService {
         if (inscriptionRequest == null)
             return false;
 
+        // if th state is the same we don't send an email
+        if (requestState == inscriptionRequest.getState())
+            return false;
+
+        /** todo send an email to tell the poster of the inscriptionRequest (inscriptionRequest.getEmail())
+         *  to notify them that the state of their request changed
+         *  FooEmailFormat toSend = (String.format("Your request state changed from %s to %s"),
+         *                                              inscriptionRequest.getState(), requestState)
+         * FooEmailSender.send(toSend, inscriptionRequest.getEmail())
+         */
         inscriptionRequest.setState(requestState);
         save(inscriptionRequest);
         return true;

From 37f8a3ac4e9170b7ec3a605bf2d0c57596de5903 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 16:25:00 +0100
Subject: [PATCH 13/23] removed an unused variable

---
 .../ovh/herisson/Clyde/EndPoints/ApplicationsController.java    | 2 --
 1 file changed, 2 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java
index a708ec1..f09e92e 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ApplicationsController.java
@@ -54,8 +54,6 @@ public class ApplicationsController {
         // if authed
         authorizedApps.add(Applications.Profile);
 
-        Role posterRole = user.getRole();
-
         if (!authServ.isNotIn(new Role[]{Role.Teacher,Role.Student,Role.Admin},token)) {
             authorizedApps.add(Applications.Msg);
             authorizedApps.add(Applications.Forum);

From 76f5a39a8f91c47448182f447374d96d4e1ff6b7 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 16:26:30 +0100
Subject: [PATCH 14/23] GET /users doesn't return Admins if the poster isn't an
 admin

---
 .../ovh/herisson/Clyde/EndPoints/UserController.java | 12 +++++++++++-
 .../herisson/Clyde/Repositories/UserRepository.java  |  5 +++++
 .../ovh/herisson/Clyde/Services/UserService.java     |  4 ++++
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index aee09b6..2ace404 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -9,6 +9,8 @@ import ovh.herisson.Clyde.Services.ProtectionService;
 import ovh.herisson.Clyde.Services.UserService;
 import ovh.herisson.Clyde.Tables.Role;
 import ovh.herisson.Clyde.Tables.User;
+
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -53,7 +55,15 @@ public class UserController {
         if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
-        Iterable<User> users = userService.getAll();
+        Role posterRole = authServ.getUserFromToken(token).getRole();
+
+        Iterable<User> users = new ArrayList<>();
+
+        if (posterRole == Role.Admin)
+            users = userService.getAll();
+
+        else if (posterRole == Role.Secretary)
+            users = userService.getAllExceptAdmins();
 
         return new ResponseEntity<>(ProtectionService.usersWithoutPasswords(users), HttpStatus.OK);
     }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserRepository.java
index a275948..413f090 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserRepository.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserRepository.java
@@ -10,9 +10,14 @@ public interface UserRepository extends CrudRepository<User, Long> {
 
     User findByEmail(String email);
 
+
+
     @Query("select u from User u where u.role = ovh.herisson.Clyde.Tables.Role.Teacher")
     Iterable<User> findAllTeachers();
 
     @Query("select u from User u where u.role = ovh.herisson.Clyde.Tables.Role.Student")
     Iterable<User> findAllStudents();
+
+    @Query("select u from User u where u.role <> ovh.herisson.Clyde.Tables.Role.Admin")
+    Iterable<User> findAllExceptAdmins();
 }
\ No newline at end of file
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
index 52078dc..3d30a89 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
@@ -114,6 +114,10 @@ public class UserService {
         return userRepo.findAll();
     }
 
+    public Iterable<User> getAllExceptAdmins(){
+        return userRepo.findAllExceptAdmins();
+    }
+
 
     public Iterable<User> getAllTeachers (){return userRepo.findAllTeachers();}
 

From ea4a0745e0fbc4a835f80361df74ddc9dd035af3 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 17:15:33 +0100
Subject: [PATCH 15/23] creation of the user when request accepted

---
 .../EndPoints/InscriptionController.java      |  2 +-
 .../Clyde/EndPoints/LoginController.java      |  2 +-
 .../UserCurriculumRepository.java             |  7 +++
 .../Clyde/Services/AuthenticatorService.java  |  2 -
 .../Clyde/Services/InscriptionService.java    | 61 ++++++++++++++++---
 .../Clyde/Tables/InscriptionRequest.java      | 16 +++--
 6 files changed, 67 insertions(+), 23 deletions(-)
 create mode 100644 backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
index 1c273ba..6c71fd3 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
@@ -83,7 +83,7 @@ public class InscriptionController {
         toReturn.put("email",inscriptionRequest.getEmail());
         toReturn.put("birthDate", inscriptionRequest.getBirthDate());
         toReturn.put("country", inscriptionRequest.getCountry());
-        toReturn.put("curriculum", inscriptionRequest.getCurriculum());
+        toReturn.put("curriculum", inscriptionRequest.getCurriculumId());
         toReturn.put("state", inscriptionRequest.getState());
         toReturn.put("profilePictureUrl", inscriptionRequest.getProfilePicture());
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java
index 6e0b4fa..9367484 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java
@@ -44,7 +44,7 @@ public class LoginController {
         return ResponseEntity.ok().headers(responseHeaders).build();
     }
 
-    @PostMapping("/request/register")
+    @PostMapping("/register")
     public ResponseEntity<InscriptionRequest> register(@RequestBody InscriptionRequest inscriptionRequest){
         return new ResponseEntity<>(authServ.register(inscriptionRequest), HttpStatus.CREATED);
     }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java
new file mode 100644
index 0000000..93cb10f
--- /dev/null
+++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java
@@ -0,0 +1,7 @@
+package ovh.herisson.Clyde.Repositories;
+
+import org.springframework.data.repository.CrudRepository;
+import ovh.herisson.Clyde.Tables.UserCurriculum;
+
+public interface UserCurriculumRepository extends CrudRepository<UserCurriculum, Long> {
+}
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
index a73182a..fc29fb6 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
@@ -2,9 +2,7 @@ package ovh.herisson.Clyde.Services;
 
 import org.springframework.stereotype.Service;
 import ovh.herisson.Clyde.Tables.*;
-
 import java.util.Date;
-import java.util.HashMap;
 
 @Service
 public class AuthenticatorService {
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
index 4712f8f..7ae6e74 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
@@ -1,20 +1,39 @@
 package ovh.herisson.Clyde.Services;
 
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
+import ovh.herisson.Clyde.Repositories.CurriculumRepository;
 import ovh.herisson.Clyde.Repositories.InscriptionRepository;
+import ovh.herisson.Clyde.Repositories.UserCurriculumRepository;
+import ovh.herisson.Clyde.Repositories.UserRepository;
 import ovh.herisson.Clyde.Tables.InscriptionRequest;
 import ovh.herisson.Clyde.Tables.RequestState;
+import ovh.herisson.Clyde.Tables.User;
+import ovh.herisson.Clyde.Tables.UserCurriculum;
 
 @Service
 public class InscriptionService {
 
-    InscriptionRepository inscriptionRepo;
+    private final InscriptionRepository inscriptionRepo;
 
-    public InscriptionService(InscriptionRepository inscriptionRepo){
+    private final UserRepository userRepo;
+
+    private final UserCurriculumRepository userCurriculumRepo;
+
+    private final CurriculumRepository curriculumRepo;
+
+    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+
+
+    public InscriptionService(InscriptionRepository inscriptionRepo, UserRepository userRepo, UserCurriculumRepository userCurriculumRepo, CurriculumRepository curriculumRepo){
         this.inscriptionRepo = inscriptionRepo;
+        this.userRepo = userRepo;
+        this.userCurriculumRepo = userCurriculumRepo;
+        this.curriculumRepo = curriculumRepo;
     }
 
     public InscriptionRequest save(InscriptionRequest inscriptionRequest){
+        inscriptionRequest.setPassword(passwordEncoder.encode(inscriptionRequest.getPassword()));
         return inscriptionRepo.save(inscriptionRequest);
     }
 
@@ -27,23 +46,45 @@ public class InscriptionService {
     }
 
     public boolean modifyState(long id, RequestState requestState) {
-        InscriptionRequest inscriptionRequest = getById(id);
+        InscriptionRequest inscrRequest = getById(id);
 
-        if (inscriptionRequest == null)
+        if (inscrRequest == null)
             return false;
 
         // if th state is the same we don't send an email
-        if (requestState == inscriptionRequest.getState())
+        if (requestState == inscrRequest.getState())
             return false;
 
-        /** todo send an email to tell the poster of the inscriptionRequest (inscriptionRequest.getEmail())
+        /** todo send an email to tell the poster of the inscrRequest (inscrRequest.getEmail())
          *  to notify them that the state of their request changed
          *  FooEmailFormat toSend = (String.format("Your request state changed from %s to %s"),
-         *                                              inscriptionRequest.getState(), requestState)
-         * FooEmailSender.send(toSend, inscriptionRequest.getEmail())
+         *                                              inscrRequest.getState(), requestState)
+         * FooEmailSender.send(toSend, inscrRequest.getEmail())
          */
-        inscriptionRequest.setState(requestState);
-        save(inscriptionRequest);
+
+
+        //saves the user from the request if accepted
+        if (requestState == RequestState.Accepted)
+        {
+            if (curriculumRepo.findById(inscrRequest.getCurriculumId()) == null)
+                return false;
+
+            User userFromRequest = new User(
+                    inscrRequest.getLastName(),
+                    inscrRequest.getFirstName(),
+                    inscrRequest.getEmail(),
+                    inscrRequest.getAddress(),
+                    inscrRequest.getCountry(),
+                    inscrRequest.getBirthDate(),
+                    inscrRequest.getProfilePicture(),
+                    inscrRequest.getPassword()
+            );
+
+            userRepo.save(userFromRequest);
+            userCurriculumRepo.save(new UserCurriculum(userFromRequest, curriculumRepo.findById(inscrRequest.getCurriculumId())));
+        }
+        inscrRequest.setState(requestState);
+        save(inscrRequest);
         return true;
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java
index b7bfea3..18e20d0 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java
@@ -16,22 +16,20 @@ public class InscriptionRequest {
     private String country;
     private Date birthDate;
 
-    @ManyToOne(fetch = FetchType.EAGER)
-    @JoinColumn(name="Curriculum")
-    private Curriculum curriculum;
+    private Long curriculumId;
     private RequestState state;
     private String profilePicture;
 
     private String password;
     public InscriptionRequest(){}
-    public InscriptionRequest(String lastName, String firstName, String address, String email, String country, Date birthDate,Curriculum curriculum, RequestState state, String profilePicture, String password){
+    public InscriptionRequest(String lastName, String firstName, String address, String email, String country, Date birthDate,Long curriculumId, RequestState state, String profilePicture, String password){
         this.lastName = lastName;
         this.firstName = firstName;
         this.address = address;
         this.email = email;
         this.country = country;
         this.birthDate = birthDate;
-        this.curriculum = curriculum;
+        this.curriculumId = curriculumId;
         this.state = state;
         this.profilePicture = profilePicture;
         this.password = password;
@@ -89,12 +87,12 @@ public class InscriptionRequest {
         this.birthDate = birthDate;
     }
 
-    public Curriculum getCurriculum() {
-        return curriculum;
+    public long getCurriculumId() {
+        return curriculumId;
     }
 
-    public void setCurriculum(Curriculum curriculum) {
-        this.curriculum = curriculum;
+    public void setCurriculumId(long curriculum) {
+        this.curriculumId = curriculum;
     }
 
     public RequestState getState() {

From 345599888d790da0fda4d7128434e1ed410deb17 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 21:48:58 +0100
Subject: [PATCH 16/23] added GET /user/{id}

---
 .../ovh/herisson/Clyde/EndPoints/UserController.java   | 10 ++++++++++
 .../java/ovh/herisson/Clyde/Services/UserService.java  |  4 ++++
 2 files changed, 14 insertions(+)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index 2ace404..4be3443 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -40,6 +40,16 @@ public class UserController {
         return new ResponseEntity<>(ProtectionService.userWithoutPassword(user), HttpStatus.OK);
     }
 
+
+    @GetMapping("/user/{id}")
+    public ResponseEntity<HashMap<String ,Object>> getUserById(@RequestHeader("Authorization") String token, @PathVariable Long id){
+
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary,Role.InscriptionService},token))
+            return new UnauthorizedResponse<>(null);
+
+        return new ResponseEntity<>(ProtectionService.userWithoutPassword(userService.getUserById(id)), HttpStatus.OK);
+    }
+
     @PostMapping("/user")
     public ResponseEntity<Map<String ,Object>> postUser(@RequestBody User user,@RequestHeader("Authorization") String token){
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
index 3d30a89..b4409e9 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
@@ -122,4 +122,8 @@ public class UserService {
     public Iterable<User> getAllTeachers (){return userRepo.findAllTeachers();}
 
     public Iterable<User> getAllStudents(){return userRepo.findAllStudents();}
+
+    public User getUserById(long id) {
+        return userRepo.findById(id);
+    }
 }
\ No newline at end of file

From 2fb6aef67c8e77c83eb4926c4418112c84c924f7 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Sun, 17 Mar 2024 21:48:58 +0100
Subject: [PATCH 17/23] added GET /user/{id}

---
 .../ovh/herisson/Clyde/EndPoints/UserController.java   | 10 ++++++++++
 .../java/ovh/herisson/Clyde/Services/UserService.java  |  4 ++++
 2 files changed, 14 insertions(+)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index 2ace404..4be3443 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -40,6 +40,16 @@ public class UserController {
         return new ResponseEntity<>(ProtectionService.userWithoutPassword(user), HttpStatus.OK);
     }
 
+
+    @GetMapping("/user/{id}")
+    public ResponseEntity<HashMap<String ,Object>> getUserById(@RequestHeader("Authorization") String token, @PathVariable Long id){
+
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary,Role.InscriptionService},token))
+            return new UnauthorizedResponse<>(null);
+
+        return new ResponseEntity<>(ProtectionService.userWithoutPassword(userService.getUserById(id)), HttpStatus.OK);
+    }
+
     @PostMapping("/user")
     public ResponseEntity<Map<String ,Object>> postUser(@RequestBody User user,@RequestHeader("Authorization") String token){
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
index 3d30a89..b4409e9 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
@@ -122,4 +122,8 @@ public class UserService {
     public Iterable<User> getAllTeachers (){return userRepo.findAllTeachers();}
 
     public Iterable<User> getAllStudents(){return userRepo.findAllStudents();}
+
+    public User getUserById(long id) {
+        return userRepo.findById(id);
+    }
 }
\ No newline at end of file

From f484fb095e58129cab610caacf287953e7f591c8 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Mon, 18 Mar 2024 00:14:26 +0100
Subject: [PATCH 18/23] added protection for inscription requests

---
 .../EndPoints/InscriptionController.java      | 31 +++----------------
 .../Clyde/EndPoints/LoginController.java      |  9 ++++--
 .../Clyde/EndPoints/UserController.java       |  9 ++++++
 .../Clyde/Services/ProtectionService.java     | 29 +++++++++++++++++
 4 files changed, 50 insertions(+), 28 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
index 6c71fd3..37312d3 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
@@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.*;
 import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 import ovh.herisson.Clyde.Services.AuthenticatorService;
 import ovh.herisson.Clyde.Services.InscriptionService;
+import ovh.herisson.Clyde.Services.ProtectionService;
 import ovh.herisson.Clyde.Tables.InscriptionRequest;
 import ovh.herisson.Clyde.Tables.RequestState;
 import ovh.herisson.Clyde.Tables.Role;
@@ -34,13 +35,8 @@ public class InscriptionController {
             return new UnauthorizedResponse<>(null);
 
         Iterable<InscriptionRequest> inscriptionRequests = inscriptionServ.getAll();
-        ArrayList<Map<String,Object>> toReturn = new ArrayList<>();
 
-        for (InscriptionRequest i:inscriptionRequests){
-            toReturn.add(requestWithoutPassword(i));
-        }
-
-        return new ResponseEntity<>(toReturn, HttpStatus.OK);
+        return new ResponseEntity<>(ProtectionService.requestsWithoutPasswords(inscriptionRequests), HttpStatus.OK);
     }
 
 
@@ -55,38 +51,21 @@ public class InscriptionController {
         if (foundInscriptionRequest == null)
             return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
 
-        return new ResponseEntity<>(requestWithoutPassword(foundInscriptionRequest), HttpStatus.OK);
+        return new ResponseEntity<>(ProtectionService.requestWithoutPassword(foundInscriptionRequest), HttpStatus.OK);
     }
 
     @PatchMapping("/request/register/{id}")
     public ResponseEntity<InscriptionRequest> changeRequestState(@PathVariable long id,
                                                                  @RequestHeader("Authorization") String token,
-                                                                 @RequestBody RequestState requestState)
+                                                                 @RequestBody RequestState state)
     {
 
         if (authServ.isNotIn(new Role[]{Role.InscriptionService,Role.Admin},token))
             return new UnauthorizedResponse<>(null);
 
-        if (!inscriptionServ.modifyState(id, requestState))
+        if (!inscriptionServ.modifyState(id, state))
             return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 
         return new ResponseEntity<>(HttpStatus.OK);
     }
-
-    private Map<String, Object> requestWithoutPassword(InscriptionRequest inscriptionRequest) {
-        Map<String, Object> toReturn = new HashMap<>();
-
-        toReturn.put("id", inscriptionRequest.getId());
-        toReturn.put("lastName", inscriptionRequest.getLastName());
-        toReturn.put("firstName", inscriptionRequest.getFirstName());
-        toReturn.put("address", inscriptionRequest.getAddress());
-        toReturn.put("email",inscriptionRequest.getEmail());
-        toReturn.put("birthDate", inscriptionRequest.getBirthDate());
-        toReturn.put("country", inscriptionRequest.getCountry());
-        toReturn.put("curriculum", inscriptionRequest.getCurriculumId());
-        toReturn.put("state", inscriptionRequest.getState());
-        toReturn.put("profilePictureUrl", inscriptionRequest.getProfilePicture());
-
-        return toReturn;
-    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java
index 9367484..ef3c559 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java
@@ -7,8 +7,10 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 import ovh.herisson.Clyde.Services.AuthenticatorService;
+import ovh.herisson.Clyde.Services.ProtectionService;
 import ovh.herisson.Clyde.Tables.InscriptionRequest;
 import java.util.Date;
+import java.util.Map;
 
 @RestController
 @CrossOrigin(originPatterns = "*", allowCredentials = "true")
@@ -45,7 +47,10 @@ public class LoginController {
     }
 
     @PostMapping("/register")
-    public ResponseEntity<InscriptionRequest> register(@RequestBody InscriptionRequest inscriptionRequest){
-        return new ResponseEntity<>(authServ.register(inscriptionRequest), HttpStatus.CREATED);
+    public ResponseEntity<Map<String,Object>> register(@RequestBody InscriptionRequest inscriptionRequest){
+
+        InscriptionRequest returnedInscriptionRequest = authServ.register(inscriptionRequest);
+
+        return new ResponseEntity<>(ProtectionService.requestWithoutPassword(returnedInscriptionRequest), HttpStatus.CREATED);
     }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index 4be3443..859bf54 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -121,4 +121,13 @@ public class UserController {
 
         return new ResponseEntity<>(ProtectionService.usersWithoutPasswords(students), HttpStatus.OK);
     }
+
+    @DeleteMapping("/user/{id}")
+    public ResponseEntity<String> deleteStudent(@RequestHeader("Authorization") String token, @PathVariable Long id){
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
+            return new UnauthorizedResponse<>(null);
+
+        userService.delete(userService.getUserById(id));
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
index 7f2bea8..6c300ba 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
@@ -1,10 +1,12 @@
 package ovh.herisson.Clyde.Services;
 
 import ovh.herisson.Clyde.Tables.Course;
+import ovh.herisson.Clyde.Tables.InscriptionRequest;
 import ovh.herisson.Clyde.Tables.User;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 public class ProtectionService {
 
@@ -61,5 +63,32 @@ public class ProtectionService {
     }
 
 
+    public static Map<String, Object> requestWithoutPassword(InscriptionRequest inscriptionRequest) {
+        Map<String, Object> toReturn = new HashMap<>();
+
+        toReturn.put("id", inscriptionRequest.getId());
+        toReturn.put("lastName", inscriptionRequest.getLastName());
+        toReturn.put("firstName", inscriptionRequest.getFirstName());
+        toReturn.put("address", inscriptionRequest.getAddress());
+        toReturn.put("email",inscriptionRequest.getEmail());
+        toReturn.put("birthDate", inscriptionRequest.getBirthDate());
+        toReturn.put("country", inscriptionRequest.getCountry());
+        toReturn.put("curriculum", inscriptionRequest.getCurriculumId());
+        toReturn.put("state", inscriptionRequest.getState());
+        toReturn.put("profilePictureUrl", inscriptionRequest.getProfilePicture());
+
+        return toReturn;
+    }
+
+    public static Iterable<Map<String ,Object>> requestsWithoutPasswords(Iterable<InscriptionRequest> inscriptionRequests){
+
+        ArrayList<Map<String,Object>> toReturn = new ArrayList<>();
+
+        for (InscriptionRequest i:inscriptionRequests){
+            toReturn.add(requestWithoutPassword(i));
+        }
+        return toReturn;
+    }
+
 }
 

From a80fb2b2971c5ba675041fc0217e4b6d41073a56 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Mon, 18 Mar 2024 00:14:48 +0100
Subject: [PATCH 19/23] added DELETE user and prepared tables for cascade
 deletion

---
 .../ovh/herisson/Clyde/Services/AuthenticatorService.java    | 1 +
 .../main/java/ovh/herisson/Clyde/Services/UserService.java   | 4 ++++
 .../java/ovh/herisson/Clyde/Tables/CurriculumCourse.java     | 4 ++++
 .../java/ovh/herisson/Clyde/Tables/ReInscriptionRequest.java | 4 ++++
 .../main/java/ovh/herisson/Clyde/Tables/TeacherCourse.java   | 4 ++++
 backend/src/main/java/ovh/herisson/Clyde/Tables/Token.java   | 3 +++
 .../main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java  | 5 ++++-
 7 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
index fc29fb6..25c127f 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/AuthenticatorService.java
@@ -32,6 +32,7 @@ public class AuthenticatorService {
     }
 
     public InscriptionRequest register(InscriptionRequest inscriptionRequest) {
+        inscriptionRequest.setState(RequestState.Pending);
         return inscriptionService.save(inscriptionRequest);
     }
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
index b4409e9..6a7685b 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java
@@ -126,4 +126,8 @@ public class UserService {
     public User getUserById(long id) {
         return userRepo.findById(id);
     }
+
+    public void delete(User user) {
+        userRepo.delete(user);
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/CurriculumCourse.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/CurriculumCourse.java
index 8202e8d..0b660eb 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/CurriculumCourse.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/CurriculumCourse.java
@@ -1,6 +1,8 @@
 package ovh.herisson.Clyde.Tables;
 
 import jakarta.persistence.*;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
 
 @Entity
 public class CurriculumCourse {
@@ -10,9 +12,11 @@ public class CurriculumCourse {
 
     @ManyToOne(fetch = FetchType.EAGER)
     @JoinColumn(name = "Curriculum")
+    @OnDelete(action = OnDeleteAction.CASCADE)
     private Curriculum curriculum;
 
     @ManyToOne(fetch = FetchType.EAGER)
+    @OnDelete(action = OnDeleteAction.CASCADE)
     @JoinColumn(name = "Course")
     private Course course;
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/ReInscriptionRequest.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/ReInscriptionRequest.java
index 9bd3fba..b96ed42 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/ReInscriptionRequest.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/ReInscriptionRequest.java
@@ -1,6 +1,8 @@
 package ovh.herisson.Clyde.Tables;
 
 import jakarta.persistence.*;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
 
 @Entity
 public class ReInscriptionRequest {
@@ -10,10 +12,12 @@ public class ReInscriptionRequest {
 
     @ManyToOne
     @JoinColumn(name = "Users")
+    @OnDelete(action = OnDeleteAction.CASCADE)
     private User user;
 
     @ManyToOne
     @JoinColumn(name = "Curriculum")
+    @OnDelete(action = OnDeleteAction.CASCADE)
     private Curriculum newCurriculum;
     private RequestState state;
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/TeacherCourse.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/TeacherCourse.java
index 3392c72..bce123b 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/TeacherCourse.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/TeacherCourse.java
@@ -1,6 +1,8 @@
 package ovh.herisson.Clyde.Tables;
 
 import jakarta.persistence.*;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
 
 @Entity
 public class TeacherCourse {
@@ -9,11 +11,13 @@ public class TeacherCourse {
     private int id;
 
     @ManyToOne(fetch = FetchType.EAGER)
+    @OnDelete(action = OnDeleteAction.CASCADE)
     @JoinColumn(name = "Users")
     private User user;
 
 
     @ManyToOne(fetch = FetchType.EAGER)
+    @OnDelete(action = OnDeleteAction.CASCADE)
     @JoinColumn(name = "Course")
     private Course course;
 
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Token.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Token.java
index 29ef906..a68f15b 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Token.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Token.java
@@ -1,6 +1,8 @@
 package ovh.herisson.Clyde.Tables;
 
 import jakarta.persistence.*;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
 
 import java.util.Date;
 
@@ -11,6 +13,7 @@ public class Token {
     private int id;
 
     @ManyToOne(fetch = FetchType.EAGER)
+    @OnDelete(action = OnDeleteAction.CASCADE)
     @JoinColumn(name ="Users")
     private User user;
     private String token;
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java
index 2202763..bd04113 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java
@@ -1,6 +1,8 @@
 package ovh.herisson.Clyde.Tables;
 
 import jakarta.persistence.*;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
 
 @Entity
 public class UserCurriculum {
@@ -10,10 +12,11 @@ public class UserCurriculum {
 
     //Un étudiant peut avoir plusieurs curriculums
     @ManyToOne(fetch = FetchType.EAGER)
+    @OnDelete(action = OnDeleteAction.CASCADE)
     @JoinColumn(name = "Users")
     private User user;
 
-    @OneToOne(fetch = FetchType.EAGER)
+    @ManyToOne(fetch = FetchType.EAGER)
     @JoinColumn(name = "Curriculum")
     private Curriculum curriculum;
 

From 93c161be4cb910bf83a1a091ad1cd9b0c9f2684f Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Mon, 18 Mar 2024 11:22:21 +0100
Subject: [PATCH 20/23] added every delete endpoint required

---
 .../Clyde/EndPoints/CourseController.java       | 17 ++++++++++++++++-
 .../Clyde/EndPoints/CurriculumController.java   | 14 ++++++++++++++
 .../Clyde/EndPoints/InscriptionController.java  | 16 ++++++++++++++--
 .../Clyde/EndPoints/UserController.java         |  7 ++++++-
 .../herisson/Clyde/Services/CourseService.java  |  3 +++
 .../Clyde/Services/CurriculumService.java       |  3 +++
 .../Clyde/Services/InscriptionService.java      |  4 ++++
 .../Clyde/Services/ProtectionService.java       | 11 +++++++++++
 .../java/ovh/herisson/Clyde/Tables/Course.java  |  3 +++
 9 files changed, 74 insertions(+), 4 deletions(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
index f3e93d4..566121d 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CourseController.java
@@ -11,7 +11,6 @@ import ovh.herisson.Clyde.Services.TeacherCourseService;
 import ovh.herisson.Clyde.Tables.Course;
 import ovh.herisson.Clyde.Tables.Role;
 import ovh.herisson.Clyde.Tables.User;
-
 import java.util.HashMap;
 import java.util.Map;
 
@@ -119,4 +118,20 @@ public class CourseController {
 
         return new ResponseEntity<>(HttpStatus.OK);
     }
+
+
+    @DeleteMapping("course/{id}")
+    public ResponseEntity<String> deleteUser(@RequestHeader("Authorization") String token, @PathVariable Long id){
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary}, token))
+            return new UnauthorizedResponse<>(null);
+
+        Course toDelete = courseServ.findById(id);
+
+        if (toDelete == null)
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+
+        courseServ.delete(courseServ.findById(id));
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
index 7a1bfe4..dda0c63 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
@@ -67,4 +67,18 @@ public class CurriculumController {
 
         return new ResponseEntity<>(HttpStatus.OK);
     }
+
+    @DeleteMapping("/curriculum/{id}")
+    public ResponseEntity<String > deleteCurriculum(@RequestHeader("Authorization") String token, @PathVariable Long id){
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary}, token))
+            return new UnauthorizedResponse<>(null);
+
+        Curriculum toDelete = curriculumServ.findById(id);
+
+        if (toDelete == null)
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+        curriculumServ.delete(toDelete);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
index 37312d3..c70e4df 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java
@@ -10,8 +10,6 @@ import ovh.herisson.Clyde.Services.ProtectionService;
 import ovh.herisson.Clyde.Tables.InscriptionRequest;
 import ovh.herisson.Clyde.Tables.RequestState;
 import ovh.herisson.Clyde.Tables.Role;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Map;
 
 @RestController
@@ -68,4 +66,18 @@ public class InscriptionController {
 
         return new ResponseEntity<>(HttpStatus.OK);
     }
+    @DeleteMapping("/request/register/{id}")
+    public ResponseEntity<String > deleteRequest(@RequestHeader("Authorization") String token, @PathVariable Long id){
+        if (authServ.isNotIn(new Role[]{Role.Admin,Role.InscriptionService}, token))
+            return new UnauthorizedResponse<>(null);
+
+        InscriptionRequest toDelete = inscriptionServ.getById(id);
+
+        if (toDelete == null)
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+        inscriptionServ.delete(toDelete);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
index 859bf54..3ebf67a 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java
@@ -127,7 +127,12 @@ public class UserController {
         if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
             return new UnauthorizedResponse<>(null);
 
-        userService.delete(userService.getUserById(id));
+        User toDelete = userService.getUserById(id);
+
+        if (toDelete == null)
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+        userService.delete(toDelete);
         return new ResponseEntity<>(HttpStatus.OK);
     }
 }
\ No newline at end of file
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
index b5dd906..d17c7b0 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CourseService.java
@@ -77,4 +77,7 @@ public class CourseService {
         return true;
     }
 
+    public void delete(Course course) {
+        courseRepo.delete(course);
+    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java
index 0c9dc42..af04d78 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/CurriculumService.java
@@ -19,4 +19,7 @@ public class CurriculumService {
         return curriculumRepo.findById(id);
     }
 
+    public void delete(Curriculum curriculum) {
+        curriculumRepo.delete(curriculum);
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
index 7ae6e74..311dbf2 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java
@@ -87,4 +87,8 @@ public class InscriptionService {
         save(inscrRequest);
         return true;
     }
+
+    public void delete(InscriptionRequest toDelete) {
+        inscriptionRepo.delete(toDelete);
+    }
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
index 6c300ba..44e53a7 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java
@@ -15,6 +15,10 @@ public class ProtectionService {
      * @return all the user data without the password
      */
     public static HashMap<String,Object> userWithoutPassword(User user){
+
+        if (user ==null)
+            return null;
+
         HashMap<String,Object> toReturn = new HashMap<>();
 
         toReturn.put("regNo",user.getRegNo());
@@ -42,6 +46,9 @@ public class ProtectionService {
 
 
     public static HashMap<String,Object> courseWithoutPassword(Course course){
+        if (course == null)
+            return null;
+
         HashMap<String ,Object> toReturn = new HashMap<>();
 
         toReturn.put("courseId",course.getCourseID());
@@ -64,6 +71,10 @@ public class ProtectionService {
 
 
     public static Map<String, Object> requestWithoutPassword(InscriptionRequest inscriptionRequest) {
+
+        if (inscriptionRequest == null)
+            return null;
+
         Map<String, Object> toReturn = new HashMap<>();
 
         toReturn.put("id", inscriptionRequest.getId());
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java
index e338d7d..df0421d 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/Course.java
@@ -1,6 +1,8 @@
 package ovh.herisson.Clyde.Tables;
 
 import jakarta.persistence.*;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
 
 @Entity
 public class Course {
@@ -11,6 +13,7 @@ public class Course {
     private String title;
 
     @ManyToOne(fetch = FetchType.EAGER)
+    @OnDelete(action = OnDeleteAction.SET_NULL)
     @JoinColumn(name = "Users")
     private User owner;
 

From fd18df7c3aaccf5a20d94a9b863a846c1bf433b0 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Mon, 18 Mar 2024 11:33:50 +0100
Subject: [PATCH 21/23] added a InscriptionRequest to POST /mock

---
 .../ovh/herisson/Clyde/EndPoints/MockController.java   | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java
index 358602b..6707fb7 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java
@@ -22,16 +22,19 @@ public class MockController {
     public final CurriculumCourseService CurriculumCourseService;
     public final CurriculumService curriculumService;
     public final CourseService courseService;
+
+    public final InscriptionService inscriptionService;
     ArrayList<User> mockUsers;
 
 
-    public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService){
+    public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, InscriptionService inscriptionService){
         this.tokenRepo = tokenRepo;
         this.userRepo = userRepo;
         this.tokenService = tokenService;
         this.CurriculumCourseService = CurriculumCourseService;
         this.curriculumService = curriculumService;
         this.courseService = courseService;
+        this.inscriptionService = inscriptionService;
     }
 
     /** Saves an example of each user type by :
@@ -87,6 +90,11 @@ public class MockController {
         CurriculumCourseService.save(new CurriculumCourse(chemistryBab1,commun));
         CurriculumCourseService.save(new CurriculumCourse(chemistryBab1,chemistry1));
 
+
+        InscriptionRequest inscriptionRequest = new InscriptionRequest("helen","prenom","non","helen@gmail.com","america",new Date(),(long) 1,RequestState.Refused,"yes.png","password");
+
+        inscriptionService.save(inscriptionRequest);
+        
     }
 }
 

From e03a01ec89c7aa1c011b9b70ac8e3c6b3c7c9d79 Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Mon, 18 Mar 2024 11:53:33 +0100
Subject: [PATCH 22/23] oups forgot somthing

---
 .../src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java  | 1 +
 1 file changed, 1 insertion(+)

diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java
index bd04113..f42e588 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/UserCurriculum.java
@@ -18,6 +18,7 @@ public class UserCurriculum {
 
     @ManyToOne(fetch = FetchType.EAGER)
     @JoinColumn(name = "Curriculum")
+    @OnDelete(action = OnDeleteAction.CASCADE)
     private Curriculum curriculum;
 
     public UserCurriculum(User user, Curriculum curriculum){

From fd357ba938215fd5e367d4f1204a6f1adb20ecfa Mon Sep 17 00:00:00 2001
From: Bartha Maxime <231026@umons.ac.be>
Date: Mon, 18 Mar 2024 12:15:13 +0100
Subject: [PATCH 23/23] GET /curriculum returns user's curriculum

---
 .../Clyde/EndPoints/CurriculumController.java | 21 +++++++++++++++----
 .../UserCurriculumRepository.java             |  6 ++++++
 .../Clyde/Services/UserCurriculumService.java | 20 ++++++++++++++++++
 3 files changed, 43 insertions(+), 4 deletions(-)
 create mode 100644 backend/src/main/java/ovh/herisson/Clyde/Services/UserCurriculumService.java

diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
index dda0c63..409e269 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/CurriculumController.java
@@ -5,9 +5,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
-import ovh.herisson.Clyde.Services.AuthenticatorService;
-import ovh.herisson.Clyde.Services.CurriculumCourseService;
-import ovh.herisson.Clyde.Services.CurriculumService;
+import ovh.herisson.Clyde.Services.*;
 import ovh.herisson.Clyde.Tables.Curriculum;
 import ovh.herisson.Clyde.Tables.Role;
 
@@ -21,11 +19,13 @@ public class CurriculumController {
     private final CurriculumService curriculumServ;
     private final AuthenticatorService authServ;
 
+    private final UserCurriculumService userCurriculumServ;
     private final CurriculumCourseService curriculumCourseServ;
 
-    public CurriculumController(CurriculumService curriculumServ, AuthenticatorService authServ, CurriculumCourseService curriculumCourseServ){
+    public CurriculumController(CurriculumService curriculumServ, AuthenticatorService authServ, UserCurriculumService userCurriculumServ, CurriculumCourseService curriculumCourseServ){
         this.curriculumServ = curriculumServ;
         this.authServ = authServ;
+        this.userCurriculumServ = userCurriculumServ;
         this.curriculumCourseServ = curriculumCourseServ;
     }
 
@@ -39,6 +39,19 @@ public class CurriculumController {
         return new ResponseEntity<>(curriculumCourseServ.getDepthCurriculum(foundCurriculum), HttpStatus.OK);
     }
 
+    @GetMapping("/curriculum")
+    public ResponseEntity<Map<String ,Object>> findSelfCurriculum(@RequestHeader("Authorization") String token){
+        if (authServ.getUserFromToken(token) == null)
+            return new UnauthorizedResponse<>(null);
+
+        Curriculum curriculum = userCurriculumServ.findByUser(authServ.getUserFromToken(token));
+
+        if (curriculum == null)
+            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+
+        return new ResponseEntity<>(curriculumCourseServ.getDepthCurriculum(curriculum),HttpStatus.OK);
+    }
+
     @GetMapping("/curriculums")
     public ResponseEntity<Iterable<Map<String, Object>>> findAllIndDepth(){
         return new ResponseEntity<>(curriculumCourseServ.getAllDepthCurriculum(),HttpStatus.OK);
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java
index 93cb10f..32f207a 100644
--- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java
+++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/UserCurriculumRepository.java
@@ -1,7 +1,13 @@
 package ovh.herisson.Clyde.Repositories;
 
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
+import ovh.herisson.Clyde.Tables.Curriculum;
+import ovh.herisson.Clyde.Tables.User;
 import ovh.herisson.Clyde.Tables.UserCurriculum;
 
 public interface UserCurriculumRepository extends CrudRepository<UserCurriculum, Long> {
+
+    @Query("select uc.curriculum from UserCurriculum uc where uc.user = ?1")
+    Curriculum findByUser(User student);
 }
diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserCurriculumService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserCurriculumService.java
new file mode 100644
index 0000000..6484e2b
--- /dev/null
+++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserCurriculumService.java
@@ -0,0 +1,20 @@
+package ovh.herisson.Clyde.Services;
+
+import org.springframework.stereotype.Service;
+import ovh.herisson.Clyde.Repositories.UserCurriculumRepository;
+import ovh.herisson.Clyde.Tables.Curriculum;
+import ovh.herisson.Clyde.Tables.User;
+
+@Service
+public class UserCurriculumService {
+
+    private final UserCurriculumRepository userCurriculumRepository;
+
+    public UserCurriculumService(UserCurriculumRepository userCurriculumRepository) {
+        this.userCurriculumRepository = userCurriculumRepository;
+    }
+
+    public Curriculum findByUser(User student){
+        return userCurriculumRepository.findByUser(student);
+    }
+}