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] 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 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 { +} 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() {