From 4199663d648a1f32e506326abd7cbc288aacadff Mon Sep 17 00:00:00 2001 From: LeoMoulin Date: Thu, 11 Apr 2024 16:45:48 +0200 Subject: [PATCH] Huge commit - Rework the inscription requests system so that it considers the equivalence systems and the impact of the teacher in the inscription procedure. --- .../ExternalCurriculumController.java | 8 ++ .../EndPoints/InscriptionController.java | 19 +++ .../Clyde/EndPoints/LoginController.java | 19 ++- .../Clyde/EndPoints/MockController.java | 10 +- .../ExternalCurriculumRepository.java | 2 + .../Clyde/Services/InscriptionService.java | 69 +++++----- .../Clyde/Services/ProtectionService.java | 1 + .../Clyde/Tables/InscriptionRequest.java | 12 +- .../herisson/Clyde/Tables/RequestState.java | 3 +- .../ovh/herisson/Clyde/Tables/University.java | 27 ---- frontend/src/Apps/AboutRequest.vue | 122 ++++-------------- frontend/src/Apps/ExternalCurriculumList.vue | 103 +++++++++++++++ frontend/src/Apps/Inscription.vue | 15 ++- frontend/src/Apps/Login.vue | 15 +-- frontend/src/rest/ServiceInscription.js | 1 + frontend/src/rest/Users.js | 5 +- frontend/src/rest/externalCurriculum.js | 8 +- frontend/src/rest/requests.js | 6 +- 18 files changed, 253 insertions(+), 192 deletions(-) delete mode 100644 backend/src/main/java/ovh/herisson/Clyde/Tables/University.java create mode 100644 frontend/src/Apps/ExternalCurriculumList.vue diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ExternalCurriculumController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ExternalCurriculumController.java index 03b56e4..43daeb9 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ExternalCurriculumController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ExternalCurriculumController.java @@ -41,4 +41,12 @@ public class ExternalCurriculumController { ArrayList toReturn = ecr.getExternalCurriculumByInscriptionRequest(ir); return new ResponseEntity<>(toReturn, HttpStatus.OK); } + + @PatchMapping("/externalcurriculum/{extcurrid}/{newstate}") + public ResponseEntity changeExternalCurrState(@PathVariable long extcurrid, @PathVariable RequestState newstate){ + ExternalCurriculum externalCurriculum = ecr.getExternalCurriculumById(extcurrid); + externalCurriculum.setState(newstate); + ecr.save(externalCurriculum); + 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 35c4852..9f47263 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/InscriptionController.java @@ -1,5 +1,6 @@ package ovh.herisson.Clyde.EndPoints; +import org.apache.tomcat.util.http.parser.Authorization; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -79,4 +80,22 @@ public class InscriptionController { return new ResponseEntity<>(HttpStatus.OK); } + + //Allow teacher or admin to accept or refuse the equivalence + @PatchMapping("/request/registerequiv/{id}/{newstate}") + public ResponseEntity editRegisterEquiv(@RequestHeader("Authorization") String token, @PathVariable long id, @PathVariable RequestState newstate){ + if (authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher}, token)) + return new UnauthorizedResponse<>(null); + + InscriptionRequest toEdit = inscriptionServ.getById(id); + toEdit.setEquivalenceState(newstate); + + inscriptionServ.save(toEdit); + + if (toEdit.getState() == RequestState.Accepted && (toEdit.getEquivalenceState() == RequestState.Accepted || toEdit.getEquivalenceState() == RequestState.Unrequired)) + { + inscriptionServ.createUser(toEdit); + } + return new ResponseEntity<>(HttpStatus.OK); + } } 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 ef3c559..0b1d7c5 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java @@ -5,10 +5,15 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import ovh.herisson.Clyde.Repositories.CurriculumRepository; +import ovh.herisson.Clyde.Repositories.InscriptionRepository; import ovh.herisson.Clyde.Responses.UnauthorizedResponse; import ovh.herisson.Clyde.Services.AuthenticatorService; import ovh.herisson.Clyde.Services.ProtectionService; +import ovh.herisson.Clyde.Tables.Curriculum; import ovh.herisson.Clyde.Tables.InscriptionRequest; +import ovh.herisson.Clyde.Tables.RequestState; + import java.util.Date; import java.util.Map; @@ -16,7 +21,7 @@ import java.util.Map; @CrossOrigin(originPatterns = "*", allowCredentials = "true") public class LoginController { private final AuthenticatorService authServ; - + private final CurriculumRepository curriculumRepository; static public class RequestLogin{ private final String identifier; private final String password; @@ -29,8 +34,9 @@ public class LoginController { } } - public LoginController(AuthenticatorService authServ){ + public LoginController(AuthenticatorService authServ, CurriculumRepository curriculumRepository){ this.authServ = authServ; + this.curriculumRepository = curriculumRepository; } @PostMapping(value = "/login") @@ -48,9 +54,18 @@ public class LoginController { @PostMapping("/register") public ResponseEntity> register(@RequestBody InscriptionRequest inscriptionRequest){ + //We ensure here that if the targeted cursus year is more than first grade then we need the teacher equivalence approval + Curriculum curr = curriculumRepository.findById(inscriptionRequest.getCurriculumId()); + + if (curr.getYear() > 1){ + inscriptionRequest.setEquivalenceState(RequestState.Pending); + }else{ + inscriptionRequest.setEquivalenceState(RequestState.Unrequired); + } InscriptionRequest returnedInscriptionRequest = authServ.register(inscriptionRequest); + return new ResponseEntity<>(ProtectionService.requestWithoutPassword(returnedInscriptionRequest), 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 1b675ee..0a80647 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java @@ -21,7 +21,7 @@ public class MockController { public final CurriculumCourseService CurriculumCourseService; public final CurriculumService curriculumService; public final CourseService courseService; - + public final ExternalCurriculumRepository externalCurriculumRepository; public final InscriptionService inscriptionService; ArrayList mockUsers; @@ -31,13 +31,14 @@ public class MockController { public final ScholarshipRequestRepository scholarshipRequestRepository; - public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository){ + public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService, CurriculumCourseService CurriculumCourseService, CurriculumService curriculumService, CourseService courseService, ExternalCurriculumRepository externalCurriculumRepository, InscriptionService inscriptionService, UserCurriculumRepository ucr, MinervalRepository minervalRepository, ScholarshipRequestRepository scholarshipRequestRepository){ this.tokenRepo = tokenRepo; this.userRepo = userRepo; this.tokenService = tokenService; this.CurriculumCourseService = CurriculumCourseService; this.curriculumService = curriculumService; this.courseService = courseService; + this.externalCurriculumRepository = externalCurriculumRepository; this.inscriptionService = inscriptionService; this.ucr = ucr; this.minervalRepository = minervalRepository; @@ -114,9 +115,12 @@ public class MockController { CurriculumCourseService.save(new CurriculumCourse(chemistryBab1,chemistry1)); - InscriptionRequest inscriptionRequest = new InscriptionRequest("helen","prenom","non","helen@gmail.com","america",new Date(),(long) 1,RequestState.Pending,"yes.png","password", null, new Date()); + InscriptionRequest inscriptionRequest = new InscriptionRequest("helen","prenom","non","helen@gmail.com","america",new Date(),(long) 4,RequestState.Pending,"yes.png","password", null, new Date(), RequestState.Pending); inscriptionService.save(inscriptionRequest); + + ExternalCurriculum externalCurriculum = new ExternalCurriculum(inscriptionRequest, "HEH", "Bachelier en informatique", "Completed", 2015, 2018, null, RequestState.Pending); + externalCurriculumRepository.save(externalCurriculum); } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/ExternalCurriculumRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ExternalCurriculumRepository.java index 81f9d1e..6c39473 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/ExternalCurriculumRepository.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ExternalCurriculumRepository.java @@ -9,4 +9,6 @@ import java.util.ArrayList; public interface ExternalCurriculumRepository extends CrudRepository { ArrayList getExternalCurriculumByInscriptionRequest(InscriptionRequest ir); + + ExternalCurriculum getExternalCurriculumById(long 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 8e31b39..a645098 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/InscriptionService.java @@ -47,48 +47,43 @@ public class InscriptionService { if (inscrRequest == null) return false; - // if th state is the same we don't send an email - if (requestState == inscrRequest.getState()) - return false; - - /** 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"), - * inscrRequest.getState(), requestState) - * FooEmailSender.send(toSend, inscrRequest.getEmail()) - */ - - - //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()),0)); - - //Create a minerval for the new student - Minerval minerval = new Minerval(userFromRequest.getRegNo(), 0, 852, 2023); - minervalRepository.save(minerval); - - } inscrRequest.setState(requestState); save(inscrRequest); + + //saves the user from the request if accepted from teacher and inscription services + if (requestState == RequestState.Accepted && (inscrRequest.getEquivalenceState() == RequestState.Accepted || inscrRequest.getEquivalenceState() == RequestState.Unrequired)) + { + return createUser(inscrRequest); + } return true; } + public boolean createUser(InscriptionRequest inscrRequest){ + //We must send an email here + + 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()),0)); + + //Create a minerval for the new student + Minerval minerval = new Minerval(userFromRequest.getRegNo(), 0, 852, 2023); + minervalRepository.save(minerval); + + 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 43b6ce9..4a36b70 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ProtectionService.java @@ -89,6 +89,7 @@ public class ProtectionService { toReturn.put("profilePictureUrl", inscriptionRequest.getProfilePicture()); toReturn.put("identityCard", inscriptionRequest.getIdentityCard()); toReturn.put("submissionDate", inscriptionRequest.getSubmissionDate()); + toReturn.put("equivalenceState", inscriptionRequest.getEquivalenceState()); return toReturn; } 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 bbcf921..35576c7 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/InscriptionRequest.java @@ -21,9 +21,10 @@ public class InscriptionRequest { private String password; private String identityCard; private Date submissionDate; + private RequestState equivalenceState; public InscriptionRequest(){} - public InscriptionRequest(String lastName, String firstName, String address, String email, String country, Date birthDate,Long curriculumId, RequestState state, String profilePicture, String password, String identityCard, Date submissionDate){ + public InscriptionRequest(String lastName, String firstName, String address, String email, String country, Date birthDate,Long curriculumId, RequestState state, String profilePicture, String password, String identityCard, Date submissionDate, RequestState equivalenceState){ this.lastName = lastName; this.firstName = firstName; this.address = address; @@ -36,6 +37,7 @@ public class InscriptionRequest { this.password = password; this.identityCard = identityCard; this.submissionDate = submissionDate; + this.equivalenceState = equivalenceState; } public int getId() { @@ -137,4 +139,12 @@ public class InscriptionRequest { public void setSubmissionDate(Date submissionDate) { this.submissionDate = submissionDate; } + + public RequestState getEquivalenceState() { + return equivalenceState; + } + + public void setEquivalenceState(RequestState equivalenceState) { + this.equivalenceState = equivalenceState; + } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/RequestState.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/RequestState.java index d52f1c9..fd2eeb0 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/RequestState.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/RequestState.java @@ -3,5 +3,6 @@ package ovh.herisson.Clyde.Tables; public enum RequestState { Accepted, Refused, - Pending + Pending, + Unrequired } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/University.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/University.java deleted file mode 100644 index 7a60db1..0000000 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/University.java +++ /dev/null @@ -1,27 +0,0 @@ -package ovh.herisson.Clyde.Tables; - - -import jakarta.persistence.*; - -@Entity -public class University { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private int id; - - private String name; - - public University(){} - - public University(String name){ - this.name = name; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/frontend/src/Apps/AboutRequest.vue b/frontend/src/Apps/AboutRequest.vue index c363acd..9ef8e57 100644 --- a/frontend/src/Apps/AboutRequest.vue +++ b/frontend/src/Apps/AboutRequest.vue @@ -1,27 +1,35 @@ @@ -117,50 +121,6 @@ function getPP(){ border-radius:20px; } -.moreInfos { - display:grid; - grid-template-rows:200px auto; - column-gap:50px; - row-gap:45px; - grid-template-areas: - "minfos minfos"; - grid-template-columns:600px 600px; -} - -.listTitle{ - display: flex; - justify-content: center; - align-items: center; - width:250px; - margin-left:auto; - margin-right:auto; - border:2px solid black; - font-size:25px; - color:white; - padding:20px; - background-color:rgb(50,50,50); - border-radius:20px;margin-bottom:10px; -} - -.listElement{ - border:2px solid black; - font-size:25px; - color:white; - padding:20px; - background-color:rgb(50,50,50); - border-radius:20px; - margin-bottom:10px; -} - -.containerElement{ - justify-content:center; - display:grid; - grid-template-columns:100px 100px 300px; - grid-template-areas: - "year option dateyear"; - column-gap:40px; - padding-left: 25px; -} button{ font-size:15px; height:50px; @@ -169,42 +129,4 @@ button{ border-radius:20px; } - -.moreInfos { - display:grid; - grid-template-rows:200px auto; - column-gap:50px; - row-gap:45px; - grid-template-areas: - "minfos minfos"; - grid-template-columns:600px 600px; - align-items:center; - justify-content:center; - margin-left: 320%; -} - -.listTitle{ - display: flex; - justify-content: center; - align-items: center; - width:250px; - margin-left:auto; - margin-right:auto; - border:2px solid black; - font-size:25px; - color:white; - padding:20px; - background-color:rgb(50,50,50); - border-radius:20px;margin-bottom:10px; -} - -.listElement{ - border:2px solid black; - font-size:25px; - color:white; - padding:20px; - background-color:rgb(50,50,50); - border-radius:20px; - margin-bottom:10px; -} \ No newline at end of file diff --git a/frontend/src/Apps/ExternalCurriculumList.vue b/frontend/src/Apps/ExternalCurriculumList.vue new file mode 100644 index 0000000..3a2dcd2 --- /dev/null +++ b/frontend/src/Apps/ExternalCurriculumList.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/frontend/src/Apps/Inscription.vue b/frontend/src/Apps/Inscription.vue index e306d38..b2bef3d 100644 --- a/frontend/src/Apps/Inscription.vue +++ b/frontend/src/Apps/Inscription.vue @@ -16,9 +16,7 @@ async function upPage(id,review){ await validateRegister(id,review); - if (review == "Accepted"){ - } requests.value = await getAllRegisters(); } @@ -40,7 +38,7 @@