From 97d562b2a2610720390939bc8d9aa137662481db Mon Sep 17 00:00:00 2001 From: Tobias Renner Date: Tue, 13 Aug 2024 22:28:32 +0200 Subject: [PATCH 1/4] refactored backend --- .../controller/AuthRestController.java | 23 +++--- .../controller/IndexCardsRestController.java | 58 ++++++--------- .../controller/ProjectRestController.java | 74 +++++++------------ .../x7ubi/indexcards/error/ErrorMessage.java | 3 + .../exceptions/EntityCreationException.java | 7 ++ .../exceptions/EntityNotFoundException.java | 7 ++ .../exceptions/GlobalExceptionHandler.java | 39 ++++++++++ .../response/common/MessageResponse.java | 17 ----- .../response/common/ResultResponse.java | 34 --------- .../indexcard/IndexCardResponses.java | 17 ----- .../response/project/UserProjectResponse.java | 22 ------ .../project/UserProjectsResponse.java | 26 ------- .../service/authentication/AuthService.java | 29 ++------ .../indexcard/AbstractIndexCardService.java | 32 +++----- .../indexcard/CreateIndexCardService.java | 18 +---- .../indexcard/DeleteIndexCardService.java | 22 +----- .../indexcard/IndexCardAssessmentService.java | 18 +---- .../indexcard/IndexCardQuizService.java | 21 ++---- .../project/AbstractProjectService.java | 42 ++++------- .../service/project/CreateProjectService.java | 24 ++---- .../service/project/DeleteProjectService.java | 20 ++--- .../service/project/EditProjectService.java | 26 ++----- .../service/project/ProjectService.java | 57 +++++--------- .../indexcard/CreateIndexCardServiceTest.java | 36 ++++----- .../indexcard/DeleteIndexCardServiceTest.java | 33 ++++----- .../IndexCardAssessmentServiceTest.java | 40 +++++----- .../indexcard/IndexCardTestConfig.java | 8 +- .../project/CreateProjectServiceTest.java | 64 +++++++--------- .../project/DeleteProjectServiceTest.java | 41 ++++------ .../project/EditProjectServiceTest.java | 64 +++++++--------- .../project/ProjectServiceTest.java | 49 +++++------- .../indexcards/project/ProjectTestConfig.java | 14 ++++ 32 files changed, 350 insertions(+), 635 deletions(-) create mode 100644 indexcards/src/main/java/com/x7ubi/indexcards/exceptions/EntityCreationException.java create mode 100644 indexcards/src/main/java/com/x7ubi/indexcards/exceptions/EntityNotFoundException.java create mode 100644 indexcards/src/main/java/com/x7ubi/indexcards/exceptions/GlobalExceptionHandler.java delete mode 100644 indexcards/src/main/java/com/x7ubi/indexcards/response/common/MessageResponse.java delete mode 100644 indexcards/src/main/java/com/x7ubi/indexcards/response/common/ResultResponse.java delete mode 100644 indexcards/src/main/java/com/x7ubi/indexcards/response/indexcard/IndexCardResponses.java delete mode 100644 indexcards/src/main/java/com/x7ubi/indexcards/response/project/UserProjectResponse.java delete mode 100644 indexcards/src/main/java/com/x7ubi/indexcards/response/project/UserProjectsResponse.java diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/controller/AuthRestController.java b/indexcards/src/main/java/com/x7ubi/indexcards/controller/AuthRestController.java index 6d8dc62..219ee9d 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/controller/AuthRestController.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/controller/AuthRestController.java @@ -1,14 +1,15 @@ package com.x7ubi.indexcards.controller; +import com.x7ubi.indexcards.exceptions.UsernameExistsException; import com.x7ubi.indexcards.jwt.JwtUtils; import com.x7ubi.indexcards.models.SecurityUser; import com.x7ubi.indexcards.request.auth.LoginRequest; import com.x7ubi.indexcards.request.auth.SignupRequest; import com.x7ubi.indexcards.response.common.JwtResponse; -import com.x7ubi.indexcards.response.common.ResultResponse; import com.x7ubi.indexcards.service.authentication.AuthService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -36,23 +37,21 @@ public AuthRestController(AuthService authService, AuthenticationManager authent } @PostMapping("/signup") + @ResponseStatus(HttpStatus.CREATED) public ResponseEntity signup( - @RequestBody SignupRequest signupRequest - ) { + @RequestBody SignupRequest signupRequest + ) throws UsernameExistsException { logger.info("Signing up new account"); - ResultResponse response = authService.registerNewUserAccount(signupRequest); - - if(response.isSuccess()) { - return ResponseEntity.ok().body(response); - } + authService.registerNewUserAccount(signupRequest); - return ResponseEntity.badRequest().body(response); + return ResponseEntity.status(HttpStatus.CREATED).build(); } @PostMapping("/login") + @ResponseStatus(HttpStatus.OK) public ResponseEntity login( - @RequestBody LoginRequest loginRequest + @RequestBody LoginRequest loginRequest ) { Authentication authentication = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword())); @@ -62,8 +61,6 @@ public ResponseEntity login( SecurityUser userDetails = (SecurityUser) authentication.getPrincipal(); - return ResponseEntity.ok(new JwtResponse(jwt, - userDetails.getUser().getId(), - userDetails.getUsername())); + return ResponseEntity.ok(new JwtResponse(jwt, userDetails.getUser().getId(), userDetails.getUsername())); } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/controller/IndexCardsRestController.java b/indexcards/src/main/java/com/x7ubi/indexcards/controller/IndexCardsRestController.java index 2eff59b..43e3e7f 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/controller/IndexCardsRestController.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/controller/IndexCardsRestController.java @@ -1,19 +1,22 @@ package com.x7ubi.indexcards.controller; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.request.indexcard.AssessmentRequest; import com.x7ubi.indexcards.request.indexcard.CreateIndexCardRequest; import com.x7ubi.indexcards.request.indexcard.DeleteIndexCardRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; -import com.x7ubi.indexcards.response.indexcard.IndexCardResponses; +import com.x7ubi.indexcards.response.indexcard.IndexCardResponse; import com.x7ubi.indexcards.service.indexcard.CreateIndexCardService; import com.x7ubi.indexcards.service.indexcard.DeleteIndexCardService; import com.x7ubi.indexcards.service.indexcard.IndexCardAssessmentService; import com.x7ubi.indexcards.service.indexcard.IndexCardQuizService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("/api/indexCard") public class IndexCardsRestController { @@ -40,61 +43,44 @@ public IndexCardsRestController( } @PostMapping("/create") + @ResponseStatus(HttpStatus.CREATED) public ResponseEntity createIndexCard( - @RequestBody CreateIndexCardRequest createProjectRequest - ) { + @RequestBody CreateIndexCardRequest createProjectRequest + ) throws EntityNotFoundException { logger.info("Creating Index Card"); - ResultResponse response = this.createIndexCardService.createIndexCard(createProjectRequest); - - if(response.isSuccess()) { - return ResponseEntity.ok().body(response); - } + this.createIndexCardService.createIndexCard(createProjectRequest); - return ResponseEntity.badRequest().body(response); + return ResponseEntity.status(HttpStatus.CREATED).build(); } @DeleteMapping("/delete") - public ResponseEntity deleteIndexCard( - @RequestBody DeleteIndexCardRequest deleteIndexCardRequest - ) { + @ResponseStatus(HttpStatus.NO_CONTENT) + public ResponseEntity deleteIndexCard(@RequestBody DeleteIndexCardRequest deleteIndexCardRequest) throws EntityNotFoundException { logger.info("Deleting index cards"); - ResultResponse response = this.deleteIndexCardService.deleteIndexCard(deleteIndexCardRequest); - - if (response.isSuccess()) { - return ResponseEntity.ok().body(response); - } + this.deleteIndexCardService.deleteIndexCard(deleteIndexCardRequest); - return ResponseEntity.badRequest().body(response); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } @GetMapping("/quizIndexCards") - public ResponseEntity getIndexCardsForQuiz( - @RequestParam Long id - ) { + @ResponseStatus(HttpStatus.OK) + public ResponseEntity> getIndexCardsForQuiz(@RequestParam Long id) throws EntityNotFoundException { logger.info("Getting index cards for quiz"); - IndexCardResponses response = this.indexCardQuizService.getIndexCardResponsesForQuiz(id); + List response = this.indexCardQuizService.getIndexCardResponsesForQuiz(id); - if(response.isSuccess()) { - return ResponseEntity.ok().body(response); - } - - return ResponseEntity.badRequest().body(response); + return ResponseEntity.status(HttpStatus.OK).body(response); } @PostMapping("/assess") public ResponseEntity assessIndexCard( - @RequestBody AssessmentRequest assessmentRequest - ) { + @RequestBody AssessmentRequest assessmentRequest + ) throws EntityNotFoundException { logger.info("Assessing Index Card"); - ResultResponse response = this.indexCardAssessmentService.assessIndexCard(assessmentRequest); - - if(response.isSuccess()) { - return ResponseEntity.ok().body(response); - } + this.indexCardAssessmentService.assessIndexCard(assessmentRequest); - return ResponseEntity.badRequest().body(response); + return ResponseEntity.status(HttpStatus.OK).build(); } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/controller/ProjectRestController.java b/indexcards/src/main/java/com/x7ubi/indexcards/controller/ProjectRestController.java index 182d8fd..b4983a0 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/controller/ProjectRestController.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/controller/ProjectRestController.java @@ -1,19 +1,22 @@ package com.x7ubi.indexcards.controller; +import com.x7ubi.indexcards.exceptions.EntityCreationException; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.jwt.JwtUtils; import com.x7ubi.indexcards.request.project.CreateProjectRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; -import com.x7ubi.indexcards.response.project.UserProjectResponse; -import com.x7ubi.indexcards.response.project.UserProjectsResponse; +import com.x7ubi.indexcards.response.project.ProjectResponse; import com.x7ubi.indexcards.service.project.CreateProjectService; import com.x7ubi.indexcards.service.project.DeleteProjectService; import com.x7ubi.indexcards.service.project.EditProjectService; import com.x7ubi.indexcards.service.project.ProjectService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("/api/project") public class ProjectRestController { @@ -42,68 +45,51 @@ public ProjectRestController( } @GetMapping("/projects") - public ResponseEntity getProjects( - @RequestHeader("Authorization") String authorization - ){ + @ResponseStatus(HttpStatus.OK) + public ResponseEntity> getProjects( + @RequestHeader("Authorization") String authorization + ) throws EntityNotFoundException { logger.info("Getting projects from User"); String username = jwtUtils.getUsernameFromAuthorizationHeader(authorization); - UserProjectsResponse response = projectService.getUserProjects(username); - - if(response.isSuccess()) { - return ResponseEntity.ok().body(response); - } + List response = projectService.getUserProjects(username); - return ResponseEntity.badRequest().body(response); + return ResponseEntity.status(HttpStatus.OK).body(response); } - @GetMapping("project") - public ResponseEntity getProject( - @RequestParam Long id - ) { + @GetMapping("/project") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity getProject(@RequestParam Long id) throws EntityNotFoundException { logger.info("Getting project"); - UserProjectResponse response = projectService.getProject(id); + ProjectResponse response = projectService.getProject(id); - if(response.isSuccess()) { - return ResponseEntity.ok().body(response); - } - - return ResponseEntity.badRequest().body(response); + return ResponseEntity.status(HttpStatus.OK).body(response); } @PostMapping("/create") + @ResponseStatus(HttpStatus.CREATED) public ResponseEntity createProject( @RequestHeader("Authorization") String authorization, @RequestBody CreateProjectRequest createProjectRequest - ){ + ) throws EntityNotFoundException, EntityCreationException { logger.info("Creating Project"); String username = jwtUtils.getUsernameFromAuthorizationHeader(authorization); - ResultResponse result = createProjectService.createProject(username, createProjectRequest); - - if(result.isSuccess()) { - return ResponseEntity.ok().body(result); - } + createProjectService.createProject(username, createProjectRequest); - return ResponseEntity.badRequest().body(result); + return ResponseEntity.status(HttpStatus.CREATED).build(); } @DeleteMapping("/delete") - public ResponseEntity deleteProject( - @RequestHeader("Authorization") String authorization, - @RequestParam Long id - ) { + @ResponseStatus(HttpStatus.NO_CONTENT) + public ResponseEntity deleteProject(@RequestHeader("Authorization") String authorization, @RequestParam Long id) throws EntityNotFoundException { logger.info("Deleting Project"); String username = jwtUtils.getUsernameFromAuthorizationHeader(authorization); - ResultResponse result = deleteProjectService.deleteProject(username, id); - - if(result.isSuccess()) { - return ResponseEntity.ok().body(result); - } + deleteProjectService.deleteProject(username, id); - return ResponseEntity.badRequest().body(result); + return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } @PutMapping("/edit") @@ -111,16 +97,12 @@ public ResponseEntity editProject( @RequestHeader("Authorization") String authorization, @RequestParam Long id, @RequestBody CreateProjectRequest createProjectRequest - ) { + ) throws EntityNotFoundException, EntityCreationException { logger.info("Editing Project"); String username = jwtUtils.getUsernameFromAuthorizationHeader(authorization); - ResultResponse result = editProjectService.editProject(createProjectRequest, id, username); - - if(result.isSuccess()) { - return ResponseEntity.ok().body(result); - } + editProjectService.editProject(createProjectRequest, id, username); - return ResponseEntity.badRequest().body(result); + return ResponseEntity.status(HttpStatus.OK).build(); } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/error/ErrorMessage.java b/indexcards/src/main/java/com/x7ubi/indexcards/error/ErrorMessage.java index 8fc5d72..276a46b 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/error/ErrorMessage.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/error/ErrorMessage.java @@ -1,6 +1,9 @@ package com.x7ubi.indexcards.error; public class ErrorMessage { + + public static String INTERNAL_SERVER_ERROR = "Internal server error"; + public static class Authentication { public static String USERNAME_EXITS = "username_exists"; } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/exceptions/EntityCreationException.java b/indexcards/src/main/java/com/x7ubi/indexcards/exceptions/EntityCreationException.java new file mode 100644 index 0000000..1614aa0 --- /dev/null +++ b/indexcards/src/main/java/com/x7ubi/indexcards/exceptions/EntityCreationException.java @@ -0,0 +1,7 @@ +package com.x7ubi.indexcards.exceptions; + +public class EntityCreationException extends Exception { + public EntityCreationException(String message) { + super(message); + } +} diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/exceptions/EntityNotFoundException.java b/indexcards/src/main/java/com/x7ubi/indexcards/exceptions/EntityNotFoundException.java new file mode 100644 index 0000000..dff0d9f --- /dev/null +++ b/indexcards/src/main/java/com/x7ubi/indexcards/exceptions/EntityNotFoundException.java @@ -0,0 +1,7 @@ +package com.x7ubi.indexcards.exceptions; + +public class EntityNotFoundException extends Exception { + public EntityNotFoundException(String message) { + super(message); + } +} diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/exceptions/GlobalExceptionHandler.java b/indexcards/src/main/java/com/x7ubi/indexcards/exceptions/GlobalExceptionHandler.java new file mode 100644 index 0000000..d47b895 --- /dev/null +++ b/indexcards/src/main/java/com/x7ubi/indexcards/exceptions/GlobalExceptionHandler.java @@ -0,0 +1,39 @@ +package com.x7ubi.indexcards.exceptions; + +import com.x7ubi.indexcards.error.ErrorMessage; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { + + @ExceptionHandler(EntityNotFoundException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ResponseEntity handleEntityNotFoundException(EntityNotFoundException exception) { + logger.error(exception.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(exception.getMessage()); + } + + @ExceptionHandler(EntityCreationException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ResponseEntity handleEntityCreationException(EntityCreationException exception) { + logger.error(exception.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(exception.getMessage()); + } + + @ExceptionHandler(UsernameExistsException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ResponseEntity handleUsernameExistsException(UsernameExistsException exception) { + logger.error(exception.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(exception.getMessage()); + } + + @ExceptionHandler(Exception.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ResponseEntity handleAllUnhandledExceptions(Exception exception) { + logger.error(exception.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ErrorMessage.INTERNAL_SERVER_ERROR); + } +} diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/response/common/MessageResponse.java b/indexcards/src/main/java/com/x7ubi/indexcards/response/common/MessageResponse.java deleted file mode 100644 index 48a1c99..0000000 --- a/indexcards/src/main/java/com/x7ubi/indexcards/response/common/MessageResponse.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.x7ubi.indexcards.response.common; - -public class MessageResponse { - private String message; - - public MessageResponse(String message) { - this.message = message; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } -} diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/response/common/ResultResponse.java b/indexcards/src/main/java/com/x7ubi/indexcards/response/common/ResultResponse.java deleted file mode 100644 index 93c01c1..0000000 --- a/indexcards/src/main/java/com/x7ubi/indexcards/response/common/ResultResponse.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.x7ubi.indexcards.response.common; - -import java.util.List; - -public class ResultResponse { - - private boolean success; - - private List errorMessages; - - public ResultResponse() {} - - public ResultResponse(boolean success, List errorMessages) { - this.success = success; - this.errorMessages = errorMessages; - } - - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public List getErrorMessages() { - return errorMessages; - } - - public void setErrorMessages(List errorMessages) { - this.errorMessages = errorMessages; - } -} diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/response/indexcard/IndexCardResponses.java b/indexcards/src/main/java/com/x7ubi/indexcards/response/indexcard/IndexCardResponses.java deleted file mode 100644 index d37e4e3..0000000 --- a/indexcards/src/main/java/com/x7ubi/indexcards/response/indexcard/IndexCardResponses.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.x7ubi.indexcards.response.indexcard; - -import com.x7ubi.indexcards.response.common.ResultResponse; - -import java.util.List; - -public class IndexCardResponses extends ResultResponse { - private List indexCardResponses; - - public List getIndexCardResponses() { - return indexCardResponses; - } - - public void setIndexCardResponses(List indexCardResponses) { - this.indexCardResponses = indexCardResponses; - } -} diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/response/project/UserProjectResponse.java b/indexcards/src/main/java/com/x7ubi/indexcards/response/project/UserProjectResponse.java deleted file mode 100644 index 0c05f45..0000000 --- a/indexcards/src/main/java/com/x7ubi/indexcards/response/project/UserProjectResponse.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.x7ubi.indexcards.response.project; - -import com.x7ubi.indexcards.response.common.ResultResponse; - -public class UserProjectResponse extends ResultResponse { - ProjectResponse projectResponse; - - public UserProjectResponse() { - } - - public UserProjectResponse(ProjectResponse projectResponse) { - this.projectResponse = projectResponse; - } - - public ProjectResponse getProjectResponse() { - return projectResponse; - } - - public void setProjectResponse(ProjectResponse projectResponse) { - this.projectResponse = projectResponse; - } -} diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/response/project/UserProjectsResponse.java b/indexcards/src/main/java/com/x7ubi/indexcards/response/project/UserProjectsResponse.java deleted file mode 100644 index b098484..0000000 --- a/indexcards/src/main/java/com/x7ubi/indexcards/response/project/UserProjectsResponse.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.x7ubi.indexcards.response.project; - -import com.x7ubi.indexcards.response.common.MessageResponse; -import com.x7ubi.indexcards.response.common.ResultResponse; - -import java.util.List; - -public class UserProjectsResponse extends ResultResponse { - - List projectResponses; - - public UserProjectsResponse() {} - - public UserProjectsResponse(boolean success, List errorMessages, List projectResponses) { - super(success, errorMessages); - this.projectResponses = projectResponses; - } - - public List getProjectResponses() { - return projectResponses; - } - - public void setProjectResponses(List projectResponses) { - this.projectResponses = projectResponses; - } -} diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/authentication/AuthService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/authentication/AuthService.java index 9d2bfc0..ab57a34 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/authentication/AuthService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/authentication/AuthService.java @@ -1,19 +1,16 @@ package com.x7ubi.indexcards.service.authentication; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.UsernameExistsException; import com.x7ubi.indexcards.models.User; import com.x7ubi.indexcards.repository.UserRepo; import com.x7ubi.indexcards.request.auth.SignupRequest; -import com.x7ubi.indexcards.response.common.MessageResponse; -import com.x7ubi.indexcards.response.common.ResultResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import javax.transaction.Transactional; -import java.util.ArrayList; -import java.util.List; @Service public class AuthService { @@ -30,14 +27,12 @@ public AuthService(PasswordEncoder passwordEncoder, UserRepo userRepo) { } @Transactional - public ResultResponse registerNewUserAccount(SignupRequest signupRequest) { + public void registerNewUserAccount(SignupRequest signupRequest) throws UsernameExistsException { User user = new User(); - ResultResponse response = new ResultResponse(); - response.setErrorMessages(findRegisterErrors(signupRequest)); - - if(response.getErrorMessages().size() > 0) { - return response; + if (userRepo.existsByUsername(signupRequest.getUsername())) { + logger.error(ErrorMessage.Authentication.USERNAME_EXITS); + throw new UsernameExistsException(ErrorMessage.Authentication.USERNAME_EXITS); } user.setUsername(signupRequest.getUsername()); @@ -47,21 +42,7 @@ public ResultResponse registerNewUserAccount(SignupRequest signupRequest) { userRepo.save(user); - response.setSuccess(true); - logger.info("User was created"); - - return response; } - private List findRegisterErrors(SignupRequest signupRequest) { - List errors = new ArrayList<>(); - - if(userRepo.existsByUsername(signupRequest.getUsername())){ - logger.error(ErrorMessage.Authentication.USERNAME_EXITS); - errors.add(new MessageResponse(ErrorMessage.Authentication.USERNAME_EXITS)); - } - - return errors; - } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/AbstractIndexCardService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/AbstractIndexCardService.java index 361ca7e..fedf363 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/AbstractIndexCardService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/AbstractIndexCardService.java @@ -1,17 +1,15 @@ package com.x7ubi.indexcards.service.indexcard; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.EntityCreationException; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.repository.IndexCardAssessmentRepo; import com.x7ubi.indexcards.repository.IndexCardRepo; import com.x7ubi.indexcards.repository.ProjectRepo; import com.x7ubi.indexcards.request.indexcard.CreateIndexCardRequest; -import com.x7ubi.indexcards.response.common.MessageResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; - public class AbstractIndexCardService { private final Logger logger = LoggerFactory.getLogger(AbstractIndexCardService.class); @@ -27,40 +25,30 @@ public AbstractIndexCardService( this.indexCardAssessmentRepo = indexCardAssessmentRepo; } - protected List getProjectNotFoundError(long id) { - List error = new ArrayList<>(); + protected void getProjectNotFoundError(long id) throws EntityNotFoundException { if (!projectRepo.existsByProjectId(id)) { logger.error(ErrorMessage.Project.PROJECT_NOT_FOUND); - error.add(new MessageResponse(ErrorMessage.Project.PROJECT_NOT_FOUND)); + throw new EntityNotFoundException(ErrorMessage.Project.PROJECT_NOT_FOUND); } - - return error; } - protected List getIndexCardNotFoundError(Long id) { - List error = new ArrayList<>(); - + protected void getIndexCardNotFoundError(Long id) throws EntityNotFoundException { if (!this.indexCardRepo.existsIndexCardByIndexcardId(id)) { - error.add(new MessageResponse(ErrorMessage.IndexCards.INDEX_CARD_NOT_FOUND)); + logger.error(ErrorMessage.IndexCards.INDEX_CARD_NOT_FOUND); + throw new EntityNotFoundException(ErrorMessage.IndexCards.INDEX_CARD_NOT_FOUND); } - - return error; } - protected List getIndexCardCreationErrors(CreateIndexCardRequest createIndexCardRequest) { - List error = new ArrayList<>(); - + protected void getIndexCardCreationErrors(CreateIndexCardRequest createIndexCardRequest) throws EntityCreationException { if (createIndexCardRequest.getQuestion().length() > 500) { logger.error(ErrorMessage.IndexCards.INDEXCARD_QUESTION_TOO_LONG); - error.add(new MessageResponse(ErrorMessage.IndexCards.INDEXCARD_QUESTION_TOO_LONG)); + throw new EntityCreationException(ErrorMessage.IndexCards.INDEXCARD_QUESTION_TOO_LONG); } if (createIndexCardRequest.getAnswer().length() > 500) { logger.error(ErrorMessage.IndexCards.INDEXCARD_ANSWER_TOO_LONG); - error.add(new MessageResponse(ErrorMessage.IndexCards.INDEXCARD_ANSWER_TOO_LONG)); + throw new EntityCreationException(ErrorMessage.IndexCards.INDEXCARD_ANSWER_TOO_LONG); } - - return error; } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/CreateIndexCardService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/CreateIndexCardService.java index 290fcdb..af48f78 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/CreateIndexCardService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/CreateIndexCardService.java @@ -1,12 +1,12 @@ package com.x7ubi.indexcards.service.indexcard; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.IndexCard; import com.x7ubi.indexcards.models.Project; import com.x7ubi.indexcards.repository.IndexCardAssessmentRepo; import com.x7ubi.indexcards.repository.IndexCardRepo; import com.x7ubi.indexcards.repository.ProjectRepo; import com.x7ubi.indexcards.request.indexcard.CreateIndexCardRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -25,16 +25,8 @@ public class CreateIndexCardService extends AbstractIndexCardService { } @Transactional - public ResultResponse createIndexCard(CreateIndexCardRequest createIndexCardRequest) { - ResultResponse resultResponse = new ResultResponse(); - - resultResponse.setErrorMessages( - this.getProjectNotFoundError(createIndexCardRequest.getProjectId()) - ); - - if (!resultResponse.getErrorMessages().isEmpty()) { - return resultResponse; - } + public void createIndexCard(CreateIndexCardRequest createIndexCardRequest) throws EntityNotFoundException { + this.getProjectNotFoundError(createIndexCardRequest.getProjectId()); IndexCard indexCard = new IndexCard(StandardCharsets.UTF_8.encode(createIndexCardRequest.getQuestion()).array(), @@ -47,10 +39,6 @@ public ResultResponse createIndexCard(CreateIndexCardRequest createIndexCardRequ this.projectRepo.save(project); logger.info("Index Card was created successfully!"); - - resultResponse.setSuccess(true); - - return resultResponse; } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/DeleteIndexCardService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/DeleteIndexCardService.java index 049135b..16874d4 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/DeleteIndexCardService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/DeleteIndexCardService.java @@ -1,12 +1,12 @@ package com.x7ubi.indexcards.service.indexcard; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.IndexCard; import com.x7ubi.indexcards.models.Project; import com.x7ubi.indexcards.repository.IndexCardAssessmentRepo; import com.x7ubi.indexcards.repository.IndexCardRepo; import com.x7ubi.indexcards.repository.ProjectRepo; import com.x7ubi.indexcards.request.indexcard.DeleteIndexCardRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; import org.springframework.stereotype.Service; import javax.transaction.Transactional; @@ -19,28 +19,14 @@ public DeleteIndexCardService( } @Transactional - public ResultResponse deleteIndexCard(DeleteIndexCardRequest deleteIndexCardRequest) { - ResultResponse response = new ResultResponse(); - - response.setErrorMessages(getProjectNotFoundError(deleteIndexCardRequest.getProjectId())); - - if (response.getErrorMessages().isEmpty()) { - response.setErrorMessages(getIndexCardNotFoundError(deleteIndexCardRequest.getIndexcardId())); - } - - if (!response.getErrorMessages().isEmpty()) { - response.setSuccess(false); - return response; - } + public void deleteIndexCard(DeleteIndexCardRequest deleteIndexCardRequest) throws EntityNotFoundException { + getProjectNotFoundError(deleteIndexCardRequest.getProjectId()); + getIndexCardNotFoundError(deleteIndexCardRequest.getIndexcardId()); IndexCard indexCard = indexCardRepo.findIndexCardByIndexcardId(deleteIndexCardRequest.getIndexcardId()); Project project = projectRepo.findProjectByProjectId(deleteIndexCardRequest.getProjectId()); project.getIndexCards().remove(indexCard); projectRepo.save(project); indexCardRepo.deleteIndexCardByIndexcardId(deleteIndexCardRequest.getIndexcardId()); - - response.setSuccess(true); - - return response; } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/IndexCardAssessmentService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/IndexCardAssessmentService.java index 105543d..cb1174d 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/IndexCardAssessmentService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/IndexCardAssessmentService.java @@ -1,12 +1,12 @@ package com.x7ubi.indexcards.service.indexcard; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.IndexCard; import com.x7ubi.indexcards.models.IndexCardAssessment; import com.x7ubi.indexcards.repository.IndexCardAssessmentRepo; import com.x7ubi.indexcards.repository.IndexCardRepo; import com.x7ubi.indexcards.repository.ProjectRepo; import com.x7ubi.indexcards.request.indexcard.AssessmentRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -25,15 +25,8 @@ public IndexCardAssessmentService( } @Transactional - public ResultResponse assessIndexCard(AssessmentRequest assessmentRequest) { - ResultResponse resultResponse = new ResultResponse(); - - resultResponse.setErrorMessages(this.getIndexCardNotFoundError(assessmentRequest.getIndexCardId())); - - if (!resultResponse.getErrorMessages().isEmpty()) { - resultResponse.setSuccess(false); - return resultResponse; - } + public void assessIndexCard(AssessmentRequest assessmentRequest) throws EntityNotFoundException { + this.getIndexCardNotFoundError(assessmentRequest.getIndexCardId()); IndexCard indexCard = this.indexCardRepo.findIndexCardByIndexcardId(assessmentRequest.getIndexCardId()); IndexCardAssessment indexCardAssessment @@ -44,10 +37,5 @@ public ResultResponse assessIndexCard(AssessmentRequest assessmentRequest) { indexCard.getAssessmentHistory().forEach(item -> logger.info(String.format("%s, %s", item.getAssessment().toString(), item.getDate().toString()))); this.indexCardRepo.save(indexCard); - - resultResponse.setSuccess(true); - return resultResponse; } - - } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/IndexCardQuizService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/IndexCardQuizService.java index 4b7590b..bcd9427 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/IndexCardQuizService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/indexcard/IndexCardQuizService.java @@ -1,12 +1,12 @@ package com.x7ubi.indexcards.service.indexcard; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.IndexCard; import com.x7ubi.indexcards.models.IndexCardAssessment; import com.x7ubi.indexcards.repository.IndexCardAssessmentRepo; import com.x7ubi.indexcards.repository.IndexCardRepo; import com.x7ubi.indexcards.repository.ProjectRepo; import com.x7ubi.indexcards.response.indexcard.IndexCardResponse; -import com.x7ubi.indexcards.response.indexcard.IndexCardResponses; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -31,15 +31,8 @@ public IndexCardQuizService( super(projectRepo, indexCardRepo, indexCardAssessmentRepo); } - public IndexCardResponses getIndexCardResponsesForQuiz(Long id) { - IndexCardResponses indexCardResponses = new IndexCardResponses(); - - indexCardResponses.setErrorMessages(this.getProjectNotFoundError(id)); - - if (!indexCardResponses.getErrorMessages().isEmpty()) { - indexCardResponses.setSuccess(false); - return indexCardResponses; - } + public List getIndexCardResponsesForQuiz(Long id) throws EntityNotFoundException { + this.getProjectNotFoundError(id); List indexCards = new ArrayList<>(this.projectRepo.findProjectByProjectId(id).getIndexCards()); indexCards.sort(Comparator.comparing(IndexCard::getAssessment).thenComparing((o1, o2) -> { @@ -55,17 +48,17 @@ public IndexCardResponses getIndexCardResponsesForQuiz(Long id) { return date1.compareTo(date2); })); - indexCardResponses.setIndexCardResponses(new ArrayList<>()); + + List indexCardResponses = new ArrayList<>(); for (int i = 0; i < maxIndexCardsPerQuiz; i++) { - if(i == indexCards.size()) + if (i == indexCards.size()) break; IndexCard indexCard = indexCards.get(i); - indexCardResponses.getIndexCardResponses().add(new IndexCardResponse( + indexCardResponses.add(new IndexCardResponse( indexCard.getId(), String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getQuestion()))), String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getAnswer()))), indexCard.getAssessment())); } - indexCardResponses.setSuccess(true); return indexCardResponses; } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/AbstractProjectService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/AbstractProjectService.java index df583c5..b459307 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/AbstractProjectService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/AbstractProjectService.java @@ -1,17 +1,17 @@ package com.x7ubi.indexcards.service.project; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.EntityCreationException; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.User; import com.x7ubi.indexcards.repository.IndexCardRepo; import com.x7ubi.indexcards.repository.ProjectRepo; import com.x7ubi.indexcards.repository.UserRepo; import com.x7ubi.indexcards.request.project.CreateProjectRequest; -import com.x7ubi.indexcards.response.common.MessageResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; +import java.util.Optional; public class AbstractProjectService { private final Logger logger = LoggerFactory.getLogger(AbstractProjectService.class); @@ -27,47 +27,37 @@ public AbstractProjectService(ProjectRepo projectRepo, UserRepo userRepo, IndexC this.indexCardRepo = indexCardRepo; } - protected List getUserExists(String username) { - List error = new ArrayList<>(); + protected User getUser(String username) throws EntityNotFoundException { + Optional userOptional = userRepo.findByUsername(username); - if(!userRepo.existsByUsername(username)) { + if (userOptional.isEmpty()) { logger.error(ErrorMessage.Project.USERNAME_NOT_FOUND); - error.add(new MessageResponse(ErrorMessage.Project.USERNAME_NOT_FOUND)); + throw new EntityNotFoundException(ErrorMessage.Project.USERNAME_NOT_FOUND); } - return error; + return userOptional.get(); } - protected List getProjectError(CreateProjectRequest createProjectRequest, String username) { - List error = new ArrayList<>(); - - if(createProjectRequest.getName().length() > 100) { + protected void getProjectError(CreateProjectRequest createProjectRequest, User user) throws EntityCreationException { + if (createProjectRequest.getName().length() > 100) { logger.error(ErrorMessage.Project.PROJECT_NAME_TOO_LONG); - error.add(new MessageResponse(ErrorMessage.Project.PROJECT_NAME_TOO_LONG)); + throw new EntityCreationException(ErrorMessage.Project.PROJECT_NAME_TOO_LONG); } - User user = this.userRepo.findByUsername(username).stream().findFirst().orElse(null); - assert user != null; boolean projectNameExists = user.getProjects().stream().anyMatch(project -> project.getName().equals(createProjectRequest.getName()) ); - if(projectNameExists) { + if (projectNameExists) { logger.error(ErrorMessage.Project.PROJECT_NAME_EXISTS); - error.add(new MessageResponse(ErrorMessage.Project.PROJECT_NAME_EXISTS)); + throw new EntityCreationException(ErrorMessage.Project.PROJECT_NAME_EXISTS); } - - return error; } - protected List findGetProjectByIdError(long id) { - List error = new ArrayList<>(); - - if(!projectRepo.existsByProjectId(id)) { + protected void findGetProjectByIdError(long id) throws EntityNotFoundException { + if (!projectRepo.existsByProjectId(id)) { logger.error(ErrorMessage.Project.PROJECT_NOT_FOUND); - error.add(new MessageResponse(ErrorMessage.Project.PROJECT_NOT_FOUND)); + throw new EntityNotFoundException(ErrorMessage.Project.PROJECT_NOT_FOUND); } - - return error; } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/CreateProjectService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/CreateProjectService.java index 054d9a7..2e9b35e 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/CreateProjectService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/CreateProjectService.java @@ -1,12 +1,13 @@ package com.x7ubi.indexcards.service.project; +import com.x7ubi.indexcards.exceptions.EntityCreationException; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.Project; import com.x7ubi.indexcards.models.User; import com.x7ubi.indexcards.repository.IndexCardRepo; import com.x7ubi.indexcards.repository.ProjectRepo; import com.x7ubi.indexcards.repository.UserRepo; import com.x7ubi.indexcards.request.project.CreateProjectRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -24,22 +25,10 @@ public CreateProjectService(ProjectRepo projectRepo, UserRepo userRepo, IndexCar } @Transactional - public ResultResponse createProject(String username, CreateProjectRequest createProjectRequest) { + public void createProject(String username, CreateProjectRequest createProjectRequest) throws EntityNotFoundException, EntityCreationException { - ResultResponse resultResponse = new ResultResponse(); - - resultResponse.setErrorMessages(getUserExists(username)); - - if(resultResponse.getErrorMessages().size() == 0) { - resultResponse.getErrorMessages().addAll(getProjectError(createProjectRequest, username)); - } - - if(resultResponse.getErrorMessages().size() > 0) { - resultResponse.setSuccess(false); - return resultResponse; - } - - User user = this.userRepo.findByUsername(username).get(); + User user = getUser(username); + getProjectError(createProjectRequest, user); Project project = new Project(); @@ -51,9 +40,6 @@ public ResultResponse createProject(String username, CreateProjectRequest create userProjects.add(project); user.setProjects(userProjects); - resultResponse.setSuccess(true); logger.info("Project was created successfully!"); - - return resultResponse; } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/DeleteProjectService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/DeleteProjectService.java index ce4402c..17d8a0d 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/DeleteProjectService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/DeleteProjectService.java @@ -1,12 +1,12 @@ package com.x7ubi.indexcards.service.project; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.IndexCard; import com.x7ubi.indexcards.models.Project; import com.x7ubi.indexcards.models.User; import com.x7ubi.indexcards.repository.IndexCardRepo; import com.x7ubi.indexcards.repository.ProjectRepo; import com.x7ubi.indexcards.repository.UserRepo; -import com.x7ubi.indexcards.response.common.ResultResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -25,17 +25,10 @@ public DeleteProjectService(ProjectRepo projectRepo, UserRepo userRepo, IndexCar } @Transactional - public ResultResponse deleteProject(String username, Long id) { - ResultResponse response = new ResultResponse(); + public void deleteProject(String username, Long id) throws EntityNotFoundException { + findGetProjectByIdError(id); - response.setErrorMessages(findGetProjectByIdError(id)); - - if (!response.getErrorMessages().isEmpty()) { - response.setSuccess(false); - return response; - } - - User user = userRepo.findByUsername(username).get(); + User user = getUser(username); Project project = projectRepo.findProjectByProjectId(id); user.getProjects().remove(project); userRepo.save(user); @@ -44,13 +37,10 @@ public ResultResponse deleteProject(String username, Long id) { projectRepo.deleteProjectByProjectId(id); - for(IndexCard indexCard: indexCardsOfProject) { + for (IndexCard indexCard : indexCardsOfProject) { indexCardRepo.deleteIndexCardByIndexcardId(indexCard.getIndexcardId()); } - response.setSuccess(true); logger.info("Project was deleted"); - - return response; } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/EditProjectService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/EditProjectService.java index 3d8441d..41472df 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/EditProjectService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/EditProjectService.java @@ -1,11 +1,13 @@ package com.x7ubi.indexcards.service.project; +import com.x7ubi.indexcards.exceptions.EntityCreationException; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.Project; +import com.x7ubi.indexcards.models.User; import com.x7ubi.indexcards.repository.IndexCardRepo; import com.x7ubi.indexcards.repository.ProjectRepo; import com.x7ubi.indexcards.repository.UserRepo; import com.x7ubi.indexcards.request.project.CreateProjectRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -21,27 +23,15 @@ public EditProjectService(ProjectRepo projectRepo, UserRepo userRepo, IndexCardR } @Transactional - public ResultResponse editProject(CreateProjectRequest createProjectService, Long id, String username) { - ResultResponse response = new ResultResponse(); - - response.setErrorMessages(findGetProjectByIdError(id)); - response.getErrorMessages().addAll(getUserExists(username)); - if(response.getErrorMessages().isEmpty()) { - response.getErrorMessages().addAll(getProjectError(createProjectService, username)); - } - - if(response.getErrorMessages().size() > 0) { - response.setSuccess(false); - return response; - } + public void editProject(CreateProjectRequest createProjectRequest, Long id, String username) throws EntityNotFoundException, EntityCreationException { + findGetProjectByIdError(id); + User user = getUser(username); + getProjectError(createProjectRequest, user); Project project = projectRepo.findProjectByProjectId(id); - project.setName(createProjectService.getName()); + project.setName(createProjectRequest.getName()); projectRepo.save(project); logger.info("Project was edited"); - - response.setSuccess(true); - return response; } } diff --git a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/ProjectService.java b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/ProjectService.java index 0c6d521..c1acdd9 100644 --- a/indexcards/src/main/java/com/x7ubi/indexcards/service/project/ProjectService.java +++ b/indexcards/src/main/java/com/x7ubi/indexcards/service/project/ProjectService.java @@ -1,5 +1,6 @@ package com.x7ubi.indexcards.service.project; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.IndexCard; import com.x7ubi.indexcards.models.Project; import com.x7ubi.indexcards.models.User; @@ -8,8 +9,6 @@ import com.x7ubi.indexcards.repository.UserRepo; import com.x7ubi.indexcards.response.indexcard.IndexCardResponse; import com.x7ubi.indexcards.response.project.ProjectResponse; -import com.x7ubi.indexcards.response.project.UserProjectResponse; -import com.x7ubi.indexcards.response.project.UserProjectsResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -31,50 +30,33 @@ public ProjectService(ProjectRepo projectRepo, UserRepo userRepo, IndexCardRepo } @Transactional - public UserProjectsResponse getUserProjects(String username) { + public List getUserProjects(String username) throws EntityNotFoundException { - UserProjectsResponse userProjectResponse = new UserProjectsResponse(); - - userProjectResponse.setErrorMessages(getUserExists(username)); - - if (!userProjectResponse.getErrorMessages().isEmpty()) { - return userProjectResponse; - } - - User user = this.userRepo.findByUsername(username).get(); + User user = getUser(username); List projects = user.getProjects(); + List projectResponses = new ArrayList<>(); - userProjectResponse.setProjectResponses(new ArrayList<>()); - userProjectResponse.setSuccess(true); - - for(Project project: projects) { + for (Project project : projects) { List indexCardResponses = new ArrayList<>(); - for(IndexCard indexCard: project.getIndexCards()) { + for (IndexCard indexCard : project.getIndexCards()) { indexCardResponses.add( - new IndexCardResponse( - indexCard.getId(), Arrays.toString(indexCard.getQuestion()), - Arrays.toString(indexCard.getAnswer()), indexCard.getAssessment())); + new IndexCardResponse( + indexCard.getId(), Arrays.toString(indexCard.getQuestion()), + Arrays.toString(indexCard.getAnswer()), indexCard.getAssessment())); } - userProjectResponse.getProjectResponses() - .add(new ProjectResponse(project.getId(), project.getName(), indexCardResponses)); + projectResponses.add(new ProjectResponse(project.getId(), project.getName(), indexCardResponses)); } logger.info("Found all projects from {}", user.getUsername()); - return userProjectResponse; + return projectResponses; } @Transactional - public UserProjectResponse getProject(long id) { - UserProjectResponse userProjectResponse = new UserProjectResponse(); - - userProjectResponse.setErrorMessages(this.findGetProjectByIdError(id)); + public ProjectResponse getProject(long id) throws EntityNotFoundException { + this.findGetProjectByIdError(id); - if (!userProjectResponse.getErrorMessages().isEmpty()) { - userProjectResponse.setSuccess(false); - return userProjectResponse; - } Project project = this.projectRepo.findProjectByProjectId(id); @@ -85,16 +67,13 @@ public UserProjectResponse getProject(long id) { projectResponse.setName(project.getName()); List indexCardResponses = new ArrayList<>(); - for(IndexCard indexCard: project.getIndexCards()) { + for (IndexCard indexCard : project.getIndexCards()) { indexCardResponses - .add(new IndexCardResponse( - indexCard.getId(), String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getQuestion()))), - String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getQuestion()))), indexCard.getAssessment())); + .add(new IndexCardResponse( + indexCard.getId(), String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getQuestion()))), + String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getQuestion()))), indexCard.getAssessment())); } projectResponse.setIndexCardResponses(indexCardResponses); - userProjectResponse.setSuccess(true); - userProjectResponse.setProjectResponse(projectResponse); - - return userProjectResponse; + return projectResponse; } } diff --git a/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/CreateIndexCardServiceTest.java b/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/CreateIndexCardServiceTest.java index bb3ad6f..215f5e7 100644 --- a/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/CreateIndexCardServiceTest.java +++ b/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/CreateIndexCardServiceTest.java @@ -1,10 +1,12 @@ package com.x7ubi.indexcards.indexcard; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.Assessment; import com.x7ubi.indexcards.models.IndexCard; import com.x7ubi.indexcards.request.indexcard.CreateIndexCardRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; @@ -16,9 +18,6 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.springframework.test.util.AssertionErrors.assertEquals; - @ExtendWith(SpringExtension.class) @SpringBootTest() @TestPropertySource(properties = { @@ -30,26 +29,22 @@ public class CreateIndexCardServiceTest extends IndexCardTestConfig { @Test - public void createIndexCardTest() { + public void createIndexCardTest() throws EntityNotFoundException { // given CreateIndexCardRequest createIndexCardRequest = new CreateIndexCardRequest( - projects.get(0).getId(), - "Question", - "Answer" + projects.get(0).getId(), + "Question", + "Answer" ); // when - ResultResponse result = this.createIndexCardService.createIndexCard(createIndexCardRequest); + this.createIndexCardService.createIndexCard(createIndexCardRequest); // then IndexCard indexCard = this.indexCardRepo.findIndexCardByQuestion(StandardCharsets.UTF_8.encode(createIndexCardRequest.getQuestion()).array()); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().isEmpty(), true); - assertThat(String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getQuestion())))) - .isEqualTo(createIndexCardRequest.getQuestion()); - assertThat(String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getAnswer())))) - .isEqualTo(createIndexCardRequest.getAnswer()); - assertThat(indexCard.getAssessment()).isEqualTo(Assessment.UNRATED); + Assertions.assertEquals(createIndexCardRequest.getQuestion(), String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getQuestion())))); + Assertions.assertEquals(createIndexCardRequest.getAnswer(), String.valueOf(StandardCharsets.UTF_8.decode(ByteBuffer.wrap(indexCard.getAnswer())))); + Assertions.assertEquals(Assessment.UNRATED, indexCard.getAssessment()); } @Test @@ -62,13 +57,12 @@ public void createIndexCardWithNonexistentProjectTest() { ); // when - ResultResponse result = this.createIndexCardService.createIndexCard(createIndexCardRequest); + EntityNotFoundException entityNotFoundException = Assert.assertThrows(EntityNotFoundException.class, () -> + this.createIndexCardService.createIndexCard(createIndexCardRequest)); // then IndexCard indexCard = this.indexCardRepo.findIndexCardByQuestion(StandardCharsets.UTF_8.encode(createIndexCardRequest.getQuestion()).array()); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 1); - assertThat(result.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.IndexCards.PROJECT_NOT_FOUND); - assertThat(indexCard).isNull(); + Assertions.assertEquals(ErrorMessage.IndexCards.PROJECT_NOT_FOUND, entityNotFoundException.getMessage()); + Assertions.assertNull(indexCard); } } diff --git a/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/DeleteIndexCardServiceTest.java b/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/DeleteIndexCardServiceTest.java index f436205..30e3cd1 100644 --- a/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/DeleteIndexCardServiceTest.java +++ b/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/DeleteIndexCardServiceTest.java @@ -1,9 +1,11 @@ package com.x7ubi.indexcards.indexcard; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.Project; import com.x7ubi.indexcards.request.indexcard.DeleteIndexCardRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; @@ -13,9 +15,6 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.springframework.test.util.AssertionErrors.assertEquals; - @ExtendWith(SpringExtension.class) @SpringBootTest() @TestPropertySource(properties = { @@ -33,7 +32,7 @@ public void setupIndexCards() { } @Test - public void deleteIndexCardTest() { + public void deleteIndexCardTest() throws EntityNotFoundException { // given DeleteIndexCardRequest deleteIndexCardRequest = new DeleteIndexCardRequest( this.indexCard.getIndexcardId(), @@ -41,13 +40,11 @@ public void deleteIndexCardTest() { ); // when - ResultResponse result = this.deleteIndexCardService.deleteIndexCard(deleteIndexCardRequest); + this.deleteIndexCardService.deleteIndexCard(deleteIndexCardRequest); // then Project project = projectRepo.findProjectByProjectId(this.projects.get(0).getId()); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().isEmpty(), true); - assertThat(project.getIndexCards().size()).isEqualTo(0); + Assertions.assertEquals(0, project.getIndexCards().size()); } @Test @@ -59,14 +56,13 @@ public void deleteIndexCardWrongProjectTest() { ); // when - ResultResponse result = this.deleteIndexCardService.deleteIndexCard(deleteIndexCardRequest); + EntityNotFoundException entityNotFoundException = Assert.assertThrows(EntityNotFoundException.class, () -> + this.deleteIndexCardService.deleteIndexCard(deleteIndexCardRequest)); // then Project project = projectRepo.findProjectByProjectId(this.projects.get(0).getId()); - assertEquals(WRONGFULLY_SUCCESSFUL, result.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().isEmpty(), false); - assertThat(result.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.IndexCards.PROJECT_NOT_FOUND); - assertThat(project.getIndexCards().size()).isEqualTo(1); + Assertions.assertEquals(ErrorMessage.IndexCards.PROJECT_NOT_FOUND, entityNotFoundException.getMessage()); + Assertions.assertEquals(1, project.getIndexCards().size()); } @Test @@ -78,13 +74,12 @@ public void deleteIndexCardWrongIndexCardTest() { ); // when - ResultResponse result = this.deleteIndexCardService.deleteIndexCard(deleteIndexCardRequest); + EntityNotFoundException entityNotFoundException = Assert.assertThrows(EntityNotFoundException.class, () -> + this.deleteIndexCardService.deleteIndexCard(deleteIndexCardRequest)); // then Project project = projectRepo.findProjectByProjectId(this.projects.get(0).getId()); - assertEquals(WRONGFULLY_SUCCESSFUL, result.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().isEmpty(), false); - assertThat(result.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.IndexCards.INDEX_CARD_NOT_FOUND); - assertThat(project.getIndexCards().size()).isEqualTo(1); + Assertions.assertEquals(ErrorMessage.IndexCards.INDEX_CARD_NOT_FOUND, entityNotFoundException.getMessage()); + Assertions.assertEquals(1, project.getIndexCards().size()); } } diff --git a/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/IndexCardAssessmentServiceTest.java b/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/IndexCardAssessmentServiceTest.java index 0d2c203..552d81a 100644 --- a/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/IndexCardAssessmentServiceTest.java +++ b/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/IndexCardAssessmentServiceTest.java @@ -1,11 +1,13 @@ package com.x7ubi.indexcards.indexcard; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.Assessment; import com.x7ubi.indexcards.models.IndexCard; import com.x7ubi.indexcards.models.IndexCardAssessment; import com.x7ubi.indexcards.request.indexcard.AssessmentRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; @@ -19,9 +21,6 @@ import java.util.ArrayList; import java.util.List; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.springframework.test.util.AssertionErrors.assertEquals; - @ExtendWith(SpringExtension.class) @SpringBootTest() @TestPropertySource(properties = { @@ -39,26 +38,24 @@ public void setupIndexCards() { } @Test - public void assessIndexCardTest() { + public void assessIndexCardTest() throws EntityNotFoundException { // given AssessmentRequest assessmentRequest = new AssessmentRequest(); assessmentRequest.setAssessment(Assessment.GOOD); assessmentRequest.setIndexCardId(this.indexCard.getId()); // when - ResultResponse result = this.indexCardAssessmentService.assessIndexCard(assessmentRequest); + this.indexCardAssessmentService.assessIndexCard(assessmentRequest); // then IndexCard newIndexCard = this.indexCardRepo.findIndexCardByIndexcardId(this.indexCard.getId()); List history = new ArrayList<>(newIndexCard.getAssessmentHistory()); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().isEmpty(), true); - assertThat(newIndexCard.getQuestion()).isEqualTo(newIndexCard.getQuestion()); - assertThat(newIndexCard.getAnswer()).isEqualTo(newIndexCard.getAnswer()); - assertThat(newIndexCard.getAssessment()).isEqualTo(Assessment.GOOD); - assertThat(history.size()).isEqualTo(1); - assertThat(history.get(0).getAssessment()).isEqualTo(Assessment.GOOD); - assertThat(history.get(0).getDate().getDayOfYear()).isEqualTo(LocalDateTime.now().getDayOfYear()); + Assertions.assertEquals(newIndexCard.getQuestion(), newIndexCard.getQuestion()); + Assertions.assertEquals(newIndexCard.getAnswer(), newIndexCard.getAnswer()); + Assertions.assertEquals(newIndexCard.getAssessment(), Assessment.GOOD); + Assertions.assertEquals(history.size(), 1); + Assertions.assertEquals(history.get(0).getAssessment(), Assessment.GOOD); + Assertions.assertEquals(history.get(0).getDate().getDayOfYear(), LocalDateTime.now().getDayOfYear()); } @Test @@ -69,17 +66,16 @@ public void assessIndexCardWithNonexistentIndexCardTest() { assessmentRequest.setIndexCardId(this.indexCard.getId() + 1); // when - ResultResponse result = this.indexCardAssessmentService.assessIndexCard(assessmentRequest); + EntityNotFoundException entityNotFoundException = Assert.assertThrows(EntityNotFoundException.class, () -> + this.indexCardAssessmentService.assessIndexCard(assessmentRequest)); // then IndexCard newIndexCard = this.indexCardRepo.findIndexCardByIndexcardId(this.indexCard.getId()); List history = new ArrayList<>(newIndexCard.getAssessmentHistory()); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 1); - assertThat(result.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.IndexCards.INDEX_CARD_NOT_FOUND); - assertThat(newIndexCard.getQuestion()).isEqualTo(newIndexCard.getQuestion()); - assertThat(newIndexCard.getAnswer()).isEqualTo(newIndexCard.getAnswer()); - assertThat(newIndexCard.getAssessment()).isEqualTo(Assessment.UNRATED); - assertThat(history.size()).isEqualTo(0); + Assertions.assertEquals(ErrorMessage.IndexCards.INDEX_CARD_NOT_FOUND, entityNotFoundException.getMessage()); + Assertions.assertEquals(newIndexCard.getQuestion(), newIndexCard.getQuestion()); + Assertions.assertEquals(newIndexCard.getAnswer(), newIndexCard.getAnswer()); + Assertions.assertEquals(newIndexCard.getAssessment(), Assessment.UNRATED); + Assertions.assertTrue(history.isEmpty()); } } diff --git a/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/IndexCardTestConfig.java b/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/IndexCardTestConfig.java index fb8d4bd..a50bb7a 100644 --- a/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/IndexCardTestConfig.java +++ b/indexcards/src/test/java/com/x7ubi/indexcards/indexcard/IndexCardTestConfig.java @@ -12,7 +12,6 @@ import com.x7ubi.indexcards.service.indexcard.IndexCardAssessmentService; import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.crypto.password.PasswordEncoder; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -29,9 +28,6 @@ public abstract class IndexCardTestConfig extends TestConfig { @Autowired protected IndexCardRepo indexCardRepo; - @Autowired - protected PasswordEncoder passwordEncoder; - @Autowired protected CreateIndexCardService createIndexCardService; @@ -56,7 +52,7 @@ void indexCardTestSetup() { this.user.setFirstname("Max"); this.user.setSurname("Muster"); this.user.setProjects(new ArrayList<>()); - this.user.setPassword(this.passwordEncoder.encode("1234")); + this.user.setPassword("1234"); this.userRepo.save(this.user); @@ -65,7 +61,7 @@ void indexCardTestSetup() { this.user2.setFirstname("Max"); this.user2.setSurname("Muster"); this.user2.setProjects(new ArrayList<>()); - this.user2.setPassword(this.passwordEncoder.encode("1234")); + this.user2.setPassword("1234"); this.userRepo.save(this.user2); diff --git a/indexcards/src/test/java/com/x7ubi/indexcards/project/CreateProjectServiceTest.java b/indexcards/src/test/java/com/x7ubi/indexcards/project/CreateProjectServiceTest.java index 2e3e7fb..83a1134 100644 --- a/indexcards/src/test/java/com/x7ubi/indexcards/project/CreateProjectServiceTest.java +++ b/indexcards/src/test/java/com/x7ubi/indexcards/project/CreateProjectServiceTest.java @@ -1,9 +1,12 @@ package com.x7ubi.indexcards.project; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.EntityCreationException; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.Project; import com.x7ubi.indexcards.request.project.CreateProjectRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; @@ -14,9 +17,6 @@ import java.util.List; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.springframework.test.util.AssertionErrors.assertEquals; - @ExtendWith(SpringExtension.class) @SpringBootTest() @TestPropertySource(properties = { @@ -28,20 +28,19 @@ public class CreateProjectServiceTest extends ProjectTestConfig { @Test - public void createProjectTest() { + public void createProjectTest() throws EntityNotFoundException, EntityCreationException { // given CreateProjectRequest createProjectRequest = new CreateProjectRequest(); createProjectRequest.setName("TestProject1"); // when - ResultResponse result = this.createProjectService.createProject("test", createProjectRequest); + this.createProjectService.createProject("test", createProjectRequest); // then Project project = this.projectRepo.findProjectByName(createProjectRequest.getName()).get(0); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 0); - assertThat(project.getName()).isEqualTo(createProjectRequest.getName()); + Assertions.assertEquals(createProjectRequest.getName(), project.getName()); } + @Test public void createProjectWithNonexistentUser() { // given @@ -49,52 +48,44 @@ public void createProjectWithNonexistentUser() { createProjectRequest.setName("TestProject1"); // when - ResultResponse result = this.createProjectService.createProject("nonexistent", createProjectRequest); + EntityNotFoundException entityNotFoundException = Assert.assertThrows(EntityNotFoundException.class, () -> + this.createProjectService.createProject("nonexistent", createProjectRequest)); // then - assertEquals(WRONGFULLY_SUCCESSFUL, result.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 1); - assertThat(result.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.Project.USERNAME_NOT_FOUND); + Assertions.assertEquals(entityNotFoundException.getMessage(), ErrorMessage.Project.USERNAME_NOT_FOUND); } @Test - public void createProjectTwiceTest() { + public void createProjectTwiceTest() throws EntityNotFoundException, EntityCreationException { // given CreateProjectRequest createProjectRequest = new CreateProjectRequest(); createProjectRequest.setName("TestProject1"); // when - ResultResponse result = this.createProjectService.createProject("test", createProjectRequest); - ResultResponse resultDouble = this.createProjectService.createProject("test", createProjectRequest); + this.createProjectService.createProject("test", createProjectRequest); + EntityCreationException entityCreationException = Assert.assertThrows(EntityCreationException.class, () -> + this.createProjectService.createProject("test", createProjectRequest)); // then Project project = this.projectRepo.findProjectByName(createProjectRequest.getName()).get(0); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 0); - assertThat(project.getName()).isEqualTo(createProjectRequest.getName()); - assertEquals(WRONGFULLY_SUCCESSFUL, resultDouble.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, resultDouble.getErrorMessages().size(), 1); - assertThat(resultDouble.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.Project.PROJECT_NAME_EXISTS); + Assertions.assertEquals(createProjectRequest.getName(), project.getName()); + Assertions.assertEquals(ErrorMessage.Project.PROJECT_NAME_EXISTS, entityCreationException.getMessage()); } @Test - public void createProjectTwiceFromDifferentUserTest() { + public void createProjectTwiceFromDifferentUserTest() throws EntityNotFoundException, EntityCreationException { // given CreateProjectRequest createProjectRequest = new CreateProjectRequest(); createProjectRequest.setName("TestProject1"); // when - ResultResponse result = this.createProjectService.createProject("test", createProjectRequest); - ResultResponse resultDouble = this.createProjectService.createProject("test2", createProjectRequest); + this.createProjectService.createProject("test", createProjectRequest); + this.createProjectService.createProject("test2", createProjectRequest); // then List project = this.projectRepo.findProjectByName(createProjectRequest.getName()); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 0); - assertThat(project.get(0).getName()).isEqualTo(createProjectRequest.getName()); - assertEquals(WRONGFULLY_SUCCESSFUL, resultDouble.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, resultDouble.getErrorMessages().size(), 0); - assertThat(project.get(1).getName()).isEqualTo(createProjectRequest.getName()); + Assertions.assertEquals(createProjectRequest.getName(), project.get(0).getName()); + Assertions.assertEquals(createProjectRequest.getName(), project.get(1).getName()); } @Test @@ -105,13 +96,12 @@ public void createProjectWithTooLongName() { createProjectRequest.setName(projectName); // when - ResultResponse result = this.createProjectService.createProject("test", createProjectRequest); + EntityCreationException entityCreationException = Assert.assertThrows(EntityCreationException.class, () -> + this.createProjectService.createProject("test", createProjectRequest)); // then List project = this.projectRepo.findProjectByName(projectName); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 1); - assertThat(result.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.Project.PROJECT_NAME_TOO_LONG); - assertThat(project.size()).isEqualTo(0); + Assertions.assertEquals(ErrorMessage.Project.PROJECT_NAME_TOO_LONG, entityCreationException.getMessage()); + Assertions.assertEquals(0, project.size()); } -} +} \ No newline at end of file diff --git a/indexcards/src/test/java/com/x7ubi/indexcards/project/DeleteProjectServiceTest.java b/indexcards/src/test/java/com/x7ubi/indexcards/project/DeleteProjectServiceTest.java index 70c13a2..08b104f 100644 --- a/indexcards/src/test/java/com/x7ubi/indexcards/project/DeleteProjectServiceTest.java +++ b/indexcards/src/test/java/com/x7ubi/indexcards/project/DeleteProjectServiceTest.java @@ -1,10 +1,12 @@ package com.x7ubi.indexcards.project; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.IndexCard; import com.x7ubi.indexcards.models.Project; import com.x7ubi.indexcards.repository.IndexCardRepo; -import com.x7ubi.indexcards.response.common.ResultResponse; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; @@ -18,9 +20,6 @@ import java.util.HashSet; import java.util.Set; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.springframework.test.util.AssertionErrors.assertEquals; - @ExtendWith(SpringExtension.class) @SpringBootTest() @TestPropertySource(properties = { @@ -51,23 +50,21 @@ private void createIndexCardsForProject() { } @Test - public void deleteProjectTest() { + public void deleteProjectTest() throws EntityNotFoundException { // given createIndexCardsForProject(); Project project = this.projectRepo.findProjectByName(this.projects.get(0).getName()).get(0); //when - ResultResponse resultResponse = this.deleteProjectService.deleteProject(this.user.getUsername(), project.getId()); + this.deleteProjectService.deleteProject(this.user.getUsername(), project.getId()); //then project = this.projectRepo.findProjectByProjectId(project.getId()); - user = this.userRepo.findByUsername(this.user.getUsername()).get(); + user = this.userRepo.findByUsername(this.user.getUsername()).orElse(null); indexCard = this.indexCardRepo.findIndexCardByIndexcardId(indexCard.getId()); - assertEquals(WRONGFULLY_UNSUCCESSFUL, resultResponse.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, resultResponse.getErrorMessages().isEmpty(), true); - assertThat(user.getProjects().isEmpty()).isTrue(); - assertThat(project).isEqualTo(null); - assertThat(indexCard).isEqualTo(null); + Assertions.assertTrue(user.getProjects().isEmpty()); + Assertions.assertNull(project); + Assertions.assertNull(indexCard); } @Test @@ -77,20 +74,14 @@ public void deleteProjectWithWrongProjectIdTest() { Project project = this.projectRepo.findProjectByName(this.projects.get(0).getName()).get(0); //when - ResultResponse resultResponse - = this.deleteProjectService.deleteProject(this.user.getUsername(), project.getId() + 1); + EntityNotFoundException entityNotFoundException = Assert.assertThrows(EntityNotFoundException.class, () -> + this.deleteProjectService.deleteProject(this.user.getUsername(), project.getId() + 1)); //then - project = this.projectRepo.findProjectByProjectId(project.getId()); - user = this.userRepo.findByUsername(this.user.getUsername()).get(); - indexCard = this.indexCardRepo.findIndexCardByIndexcardId(indexCard.getId()); - assertEquals(WRONGFULLY_SUCCESSFUL, resultResponse.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, resultResponse.getErrorMessages().isEmpty(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, resultResponse.getErrorMessages().size(), 1); - assertThat(resultResponse.getErrorMessages().get(0).getMessage()) - .isEqualTo(ErrorMessage.Project.PROJECT_NOT_FOUND); - assertThat(user.getProjects().size()).isEqualTo(1); - assertThat(project).isNotEqualTo(null); - assertThat(indexCard).isNotEqualTo(null); + user = this.userRepo.findByUsername(this.user.getUsername()).orElse(null); + Assertions.assertEquals(entityNotFoundException.getMessage(), ErrorMessage.Project.PROJECT_NOT_FOUND); + Assertions.assertEquals(user.getProjects().size(), 1); + Assertions.assertTrue(this.projectRepo.existsByProjectId(project.getId())); + Assertions.assertTrue(this.indexCardRepo.existsIndexCardByIndexcardId(indexCard.getId())); } } diff --git a/indexcards/src/test/java/com/x7ubi/indexcards/project/EditProjectServiceTest.java b/indexcards/src/test/java/com/x7ubi/indexcards/project/EditProjectServiceTest.java index 8776ed3..cb132c2 100644 --- a/indexcards/src/test/java/com/x7ubi/indexcards/project/EditProjectServiceTest.java +++ b/indexcards/src/test/java/com/x7ubi/indexcards/project/EditProjectServiceTest.java @@ -1,9 +1,12 @@ package com.x7ubi.indexcards.project; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.EntityCreationException; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.Project; import com.x7ubi.indexcards.request.project.CreateProjectRequest; -import com.x7ubi.indexcards.response.common.ResultResponse; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; @@ -12,11 +15,6 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; -import java.util.List; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.springframework.test.util.AssertionErrors.assertEquals; - @ExtendWith(SpringExtension.class) @SpringBootTest() @TestPropertySource(properties = { @@ -28,20 +26,17 @@ public class EditProjectServiceTest extends ProjectTestConfig { @Test - public void editProjectTest() { + public void editProjectTest() throws EntityNotFoundException, EntityCreationException { // given Project project = this.projectRepo.findProjectByName(this.projects.get(0).getName()).get(0); CreateProjectRequest createProjectRequest = new CreateProjectRequest("edited project"); // when - ResultResponse result = this.editProjectService - .editProject(createProjectRequest, project.getId(), user.getUsername()); + this.editProjectService.editProject(createProjectRequest, project.getId(), user.getUsername()); // then project = this.projectRepo.findProjectByName(createProjectRequest.getName()).get(0); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 0); - assertThat(project.getName()).isEqualTo(createProjectRequest.getName()); + Assertions.assertEquals(project.getName(), createProjectRequest.getName()); } @Test @@ -52,56 +47,47 @@ public void editProjectWithNonexistentUser() { createProjectRequest.setName("TestProject1"); // when - ResultResponse result - = this.editProjectService.editProject(createProjectRequest, project.getId(), "nonexistent"); + EntityNotFoundException entityNotFoundException = Assert.assertThrows(EntityNotFoundException.class, () -> + this.editProjectService.editProject(createProjectRequest, project.getId(), "nonexistent")); // then - assertEquals(WRONGFULLY_SUCCESSFUL, result.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 1); - assertThat(result.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.Project.USERNAME_NOT_FOUND); - assertThat(this.projectRepo.findProjectByName(createProjectRequest.getName()).isEmpty()).isTrue(); - assertThat(this.projectRepo.findProjectByName(this.projects.get(0).getName()).isEmpty()).isFalse(); + Assertions.assertEquals(entityNotFoundException.getMessage(), ErrorMessage.Project.USERNAME_NOT_FOUND); + Assertions.assertTrue(this.projectRepo.findProjectByName(createProjectRequest.getName()).isEmpty()); + Assertions.assertFalse(this.projectRepo.findProjectByName(this.projects.get(0).getName()).isEmpty()); } @Test - public void editProjectNameExistsTest() { + public void editProjectNameExistsTest() throws EntityNotFoundException, EntityCreationException { // given Project project = this.projectRepo.findProjectByName(this.projects.get(0).getName()).get(0); CreateProjectRequest createProjectRequest = new CreateProjectRequest(); createProjectRequest.setName("TestProject1"); // when - ResultResponse result = this.createProjectService.createProject("test", createProjectRequest); - ResultResponse resultDouble = this.editProjectService.editProject(createProjectRequest, project.getId(), "test"); + this.createProjectService.createProject("test", createProjectRequest); + EntityCreationException entityCreationException = Assert.assertThrows(EntityCreationException.class, () -> + this.editProjectService.editProject(createProjectRequest, project.getId(), "test")); // then - project = this.projectRepo.findProjectByName(createProjectRequest.getName()).get(0); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 0); - assertThat(project.getName()).isEqualTo(createProjectRequest.getName()); - assertEquals(WRONGFULLY_SUCCESSFUL, resultDouble.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, resultDouble.getErrorMessages().size(), 1); - assertThat(resultDouble.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.Project.PROJECT_NAME_EXISTS); - assertThat(this.projectRepo.findProjectByName(createProjectRequest.getName()).isEmpty()).isFalse(); - assertThat(this.projectRepo.findProjectByName(this.projects.get(0).getName()).isEmpty()).isFalse(); + Assertions.assertEquals(entityCreationException.getMessage(), ErrorMessage.Project.PROJECT_NAME_EXISTS); + Assertions.assertFalse(this.projectRepo.findProjectByName(createProjectRequest.getName()).isEmpty()); + Assertions.assertFalse(this.projectRepo.findProjectByName(this.projects.get(0).getName()).isEmpty()); } @Test public void editProjectWithTooLongName() { // given + Project project = this.projectRepo.findProjectByName(this.projects.get(0).getName()).get(0); String projectName = new String(new char[101]).replace('\0', 'A'); CreateProjectRequest createProjectRequest = new CreateProjectRequest(); createProjectRequest.setName(projectName); // when - ResultResponse result = this.createProjectService.createProject("test", createProjectRequest); - + EntityCreationException entityCreationException = Assert.assertThrows(EntityCreationException.class, () -> + this.editProjectService.editProject(createProjectRequest, project.getId(), "test")); // then - List project = this.projectRepo.findProjectByName(projectName); - assertEquals(WRONGFULLY_UNSUCCESSFUL, result.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, result.getErrorMessages().size(), 1); - assertThat(result.getErrorMessages().get(0).getMessage()).isEqualTo(ErrorMessage.Project.PROJECT_NAME_TOO_LONG); - assertThat(project.size()).isEqualTo(0); - assertThat(this.projectRepo.findProjectByName(this.projects.get(0).getName()).isEmpty()).isFalse(); + Assertions.assertEquals(entityCreationException.getMessage(), ErrorMessage.Project.PROJECT_NAME_TOO_LONG); + Assertions.assertFalse(this.projectRepo.findProjectByName(project.getName()).isEmpty()); + Assertions.assertFalse(this.projectRepo.findProjectByName(this.projects.get(0).getName()).isEmpty()); } } diff --git a/indexcards/src/test/java/com/x7ubi/indexcards/project/ProjectServiceTest.java b/indexcards/src/test/java/com/x7ubi/indexcards/project/ProjectServiceTest.java index 8179768..0112502 100644 --- a/indexcards/src/test/java/com/x7ubi/indexcards/project/ProjectServiceTest.java +++ b/indexcards/src/test/java/com/x7ubi/indexcards/project/ProjectServiceTest.java @@ -1,9 +1,11 @@ package com.x7ubi.indexcards.project; import com.x7ubi.indexcards.error.ErrorMessage; +import com.x7ubi.indexcards.exceptions.EntityNotFoundException; import com.x7ubi.indexcards.models.Project; -import com.x7ubi.indexcards.response.project.UserProjectResponse; -import com.x7ubi.indexcards.response.project.UserProjectsResponse; +import com.x7ubi.indexcards.response.project.ProjectResponse; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; @@ -12,8 +14,7 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.springframework.test.util.AssertionErrors.assertEquals; +import java.util.List; @ExtendWith(SpringExtension.class) @SpringBootTest() @@ -26,60 +27,48 @@ public class ProjectServiceTest extends ProjectTestConfig { - @Test - public void getAllUserProjectsTest() { + public void getAllUserProjectsTest() throws EntityNotFoundException { // when - UserProjectsResponse userProjectsResponse = this.projectService.getUserProjects(user.getUsername()); + List responses = this.projectService.getUserProjects(user.getUsername()); // then - assertEquals(WRONGFULLY_UNSUCCESSFUL, userProjectsResponse.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, userProjectsResponse.getErrorMessages().isEmpty(), true); - assertThat(userProjectsResponse.getProjectResponses().size()).isEqualTo(1); - assertThat(userProjectsResponse.getProjectResponses().get(0).getName()) - .isEqualTo(this.projects.get(0).getName()); + Assertions.assertEquals(responses.size(), 1); + Assertions.assertEquals(responses.get(0).getName(), this.projects.get(0).getName()); } @Test public void getAllUserProjectsWithWrongUsernameTest() { // when - UserProjectsResponse userProjectsResponse = this.projectService.getUserProjects("wrong username"); + EntityNotFoundException entityNotFoundException = Assert.assertThrows(EntityNotFoundException.class, () -> + this.projectService.getUserProjects("wrong username")); // then - assertEquals(WRONGFULLY_UNSUCCESSFUL, userProjectsResponse.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, userProjectsResponse.getErrorMessages().size(), 1); - assertThat(userProjectsResponse.getErrorMessages().get(0).getMessage()) - .isEqualTo(ErrorMessage.Project.USERNAME_NOT_FOUND); - assertThat(userProjectsResponse.getProjectResponses()).isEqualTo(null); + Assertions.assertEquals(entityNotFoundException.getMessage(), ErrorMessage.Project.USERNAME_NOT_FOUND); } @Test - public void getUserProjectTest() { + public void getUserProjectTest() throws EntityNotFoundException { // given Project project = this.projectRepo.findProjectByName(this.projects.get(0).getName()).get(0); // when - UserProjectResponse userProjectsResponse = this.projectService.getProject(project.getId()); + ProjectResponse projectResponse = this.projectService.getProject(project.getId()); // then - assertEquals(WRONGFULLY_UNSUCCESSFUL, userProjectsResponse.isSuccess(), true); - assertEquals(WRONG_NUMBER_OF_ERRORS, userProjectsResponse.getErrorMessages().isEmpty(), true); - assertThat(userProjectsResponse.getProjectResponse().getName()).isEqualTo(this.projects.get(0).getName()); + Assertions.assertEquals(this.projects.get(0).getName(), projectResponse.getName()); } @Test public void getUserProjectWithWrongProjectIdTest() { // given - Project project = this.projectRepo.findProjectByName(this.projects.get(0).getName()).get(0); + long wrongProjectId = this.projects.get(0).getId() + 1; // when - UserProjectResponse userProjectResponse = this.projectService.getProject(project.getId() + 1); + EntityNotFoundException entityNotFoundException = Assertions.assertThrows(EntityNotFoundException.class, () -> + this.projectService.getProject(wrongProjectId)); // then - assertEquals(WRONGFULLY_SUCCESSFUL, userProjectResponse.isSuccess(), false); - assertEquals(WRONG_NUMBER_OF_ERRORS, userProjectResponse.getErrorMessages().size(), 1); - assertEquals(WRONG_NUMBER_OF_ERRORS, userProjectResponse.getErrorMessages().get(0).getMessage(), - ErrorMessage.Project.PROJECT_NOT_FOUND); - assertThat(userProjectResponse.getProjectResponse()).isEqualTo(null); + Assertions.assertEquals(ErrorMessage.Project.PROJECT_NOT_FOUND, entityNotFoundException.getMessage()); } } diff --git a/indexcards/src/test/java/com/x7ubi/indexcards/project/ProjectTestConfig.java b/indexcards/src/test/java/com/x7ubi/indexcards/project/ProjectTestConfig.java index 72cd311..4268c55 100644 --- a/indexcards/src/test/java/com/x7ubi/indexcards/project/ProjectTestConfig.java +++ b/indexcards/src/test/java/com/x7ubi/indexcards/project/ProjectTestConfig.java @@ -10,11 +10,25 @@ import com.x7ubi.indexcards.service.project.EditProjectService; import com.x7ubi.indexcards.service.project.ProjectService; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.ArrayList; +@ExtendWith(SpringExtension.class) +@SpringBootTest() +@TestPropertySource(properties = { + "spring.datasource.driver-class-name=org.h2.Driver", + "spring.datasource.url=jdbc:h2:mem:testdb" +}) +@TestInstance(TestInstance.Lifecycle.PER_METHOD) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) public abstract class ProjectTestConfig extends TestConfig { @Autowired protected UserRepo userRepo; From 451b28d0f7c77f4a52d741e610ea99d07021c813 Mon Sep 17 00:00:00 2001 From: Tobias Renner Date: Tue, 13 Aug 2024 22:33:23 +0200 Subject: [PATCH 2/4] changed pipeline --- .github/workflows/pipeline.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml index 795aa8a..7040198 100644 --- a/.github/workflows/pipeline.yml +++ b/.github/workflows/pipeline.yml @@ -48,6 +48,7 @@ jobs: deploy: name: Deployment runs-on: self-hosted + if: github.event_name != 'pull_request' needs: - build steps: @@ -59,19 +60,17 @@ jobs: export DB_PASSWORD=${{ secrets.DB_PASSWORD }} docker-compose down docker-compose up --build -d - if: github.event_name != 'pull_request' documentation: name: Deploy documentation + if: github.event_name != 'pull_request' runs-on: self-hosted needs: - deploy steps: - name: Checkout Code uses: actions/checkout@v3 - if: github.event_name != 'pull_request' - name: Start docker-compose run: | cd indexcards-docu docker-compose down - docker-compose up --build -d - if: github.event_name != 'pull_request' \ No newline at end of file + docker-compose up --build -d \ No newline at end of file From b07ffdf4a1ea5ed3cd2c9c9945c9d9375a1849f3 Mon Sep 17 00:00:00 2001 From: Tobias Renner Date: Wed, 14 Aug 2024 11:45:39 +0200 Subject: [PATCH 3/4] frontend changes --- indexcards-ui/src/app/app.response.ts | 23 +--------- .../component/auth/login/login.component.ts | 31 ++++--------- .../component/auth/signup/signup.component.ts | 43 +++++++----------- .../create-indexcard.component.ts | 17 +++---- .../indexcard-quiz-stat.component.html | 3 +- .../indexcard-quiz-stat.component.ts | 38 ++++++++-------- .../indexcard-quiz.component.ts | 44 +++++++++---------- .../all-projects/all-projects.component.html | 2 +- .../all-projects/all-projects.component.ts | 41 +++++++---------- .../create-project.component.ts | 31 ++++++------- .../edit-project/edit-project.component.html | 2 +- .../edit-project/edit-project.component.ts | 44 ++++++++----------- .../projects/project/project.component.html | 8 ++-- .../projects/project/project.component.ts | 33 +++++++------- indexcards-ui/src/app/login-required.ts | 11 ++--- .../src/app/services/http.service.ts | 28 +++++------- .../exceptions/GlobalExceptionHandler.java | 3 ++ 17 files changed, 162 insertions(+), 240 deletions(-) diff --git a/indexcards-ui/src/app/app.response.ts b/indexcards-ui/src/app/app.response.ts index 9faac36..808f0d3 100644 --- a/indexcards-ui/src/app/app.response.ts +++ b/indexcards-ui/src/app/app.response.ts @@ -1,12 +1,3 @@ -export interface MessageResponse { - readonly message: string; -} - -export interface ResultResponse { - readonly success: boolean; - readonly errorMessages: MessageResponse[]; -} - export interface LoginResponse { readonly token: string; readonly type: string; @@ -17,7 +8,7 @@ export interface LoginResponse { export interface IndexCardResponse { readonly indexCardId: number; readonly question: string; - readonly answer:string; + readonly answer: string; readonly assessment: Assessment; } @@ -27,18 +18,6 @@ export interface ProjectResponse { readonly indexCardResponses: IndexCardResponse[]; } -export interface UserProjectsResponse extends ResultResponse { - readonly projectResponses: ProjectResponse[]; -} - -export interface UserProjectResponse extends ResultResponse { - readonly projectResponse: ProjectResponse; -} - -export interface IndexCardResponses extends ResultResponse { - readonly indexCardResponses: IndexCardResponse[]; -} - export enum Assessment { UNRATED, BAD, diff --git a/indexcards-ui/src/app/component/auth/login/login.component.ts b/indexcards-ui/src/app/component/auth/login/login.component.ts index dad88a4..699d5d8 100644 --- a/indexcards-ui/src/app/component/auth/login/login.component.ts +++ b/indexcards-ui/src/app/component/auth/login/login.component.ts @@ -1,11 +1,11 @@ import {Component, OnInit} from '@angular/core'; import {FormBuilder, FormGroup, Validators} from '@angular/forms'; -import { HttpClient } from "@angular/common/http"; -import {LoginResponse} from "../../../app.response"; import {LoginService} from "./login.service"; import {Router} from "@angular/router"; import {MessageService} from "primeng/api"; import {TranslateService} from "@ngx-translate/core"; +import {LoginResponse} from "../../../app.response"; +import {HttpService} from "../../../services/http.service"; @Component({ selector: 'app-login', @@ -17,7 +17,7 @@ export class LoginComponent implements OnInit { public loginFormGroup: FormGroup; constructor( - private http: HttpClient, + private httpService: HttpService, private router: Router, private loginService: LoginService, private messageService: MessageService, @@ -31,35 +31,22 @@ export class LoginComponent implements OnInit { } ngOnInit(): void { - if(this.loginService.isLoggedIn()) { + if (this.loginService.isLoggedIn()) { this.router.navigate(['/']); } } makeLogin() { - if(!this.loginFormGroup.valid) { + if (!this.loginFormGroup.valid) { this.throwInvalidForm(); return; } - this.http.post('/api/auth/login', this.getLoginRequestParameter()) - .subscribe( - response => { - this.loginService.saveBearer(response); - - this.router.navigate(['/']); - }, error => { - if(error.status === 401){ - this.messageService.add({ - key: 'tr', - severity: 'error', - summary: this.translateService.instant('common.error'), - detail: this.translateService.instant('auth.wrong_credentials') - }); - } - } - ); + this.httpService.post('/api/auth/login', this.getLoginRequestParameter(), response => { + this.loginService.saveBearer(response); + this.router.navigate(['/']).then(); + }); } private throwInvalidForm() { diff --git a/indexcards-ui/src/app/component/auth/signup/signup.component.ts b/indexcards-ui/src/app/component/auth/signup/signup.component.ts index 3ac4907..31ec3dd 100644 --- a/indexcards-ui/src/app/component/auth/signup/signup.component.ts +++ b/indexcards-ui/src/app/component/auth/signup/signup.component.ts @@ -1,10 +1,10 @@ -import { HttpClient } from '@angular/common/http'; -import { Component } from '@angular/core'; +import {HttpClient} from '@angular/common/http'; +import {Component} from '@angular/core'; import {FormBuilder, FormGroup, Validators} from '@angular/forms'; import {Router} from '@angular/router'; -import {ResultResponse} from '../../../app.response'; import {MessageService} from 'primeng/api'; import {TranslateService} from "@ngx-translate/core"; +import {HttpService} from "../../../services/http.service"; @Component({ selector: 'app-signup', @@ -16,6 +16,7 @@ export class SignupComponent { constructor( private http: HttpClient, + private httpService: HttpService, private router: Router, private messageService: MessageService, private formBuilder: FormBuilder, @@ -29,8 +30,9 @@ export class SignupComponent { repeatPassword: ['', Validators.required] }); } + createAccount() { - if(!this.signUpFormGroup.valid) { + if (!this.signUpFormGroup.valid) { this.messageService.add({ key: 'tr', severity: 'error', @@ -40,7 +42,7 @@ export class SignupComponent { return; } - if(this.signUpFormGroup.get('password')?.value !== this.signUpFormGroup.get('repeatPassword')?.value) { + if (this.signUpFormGroup.get('password')?.value !== this.signUpFormGroup.get('repeatPassword')?.value) { this.messageService.add({ key: 'tr', severity: 'error', @@ -50,30 +52,15 @@ export class SignupComponent { return; } - this.http.post('/api/auth/signup', this.getCreateAccountParameter()) - .subscribe((response) => { - if(response.success) { - this.messageService.add({ - key: 'tr', - severity: 'success', - summary: this.translateService.instant('common.success'), - detail: this.translateService.instant('auth.account_created'), - }); - this.router.navigate(['/login']); - } - - }, err => { - const response: ResultResponse = err.error; - - response.errorMessages.forEach((error) => { - this.messageService.add({ - key: 'tr', - severity: 'error', - summary: this.translateService.instant('common.error'), - detail: this.translateService.instant(`backend.${error.message}`) - }); - }); + this.httpService.post('/api/auth/signup', this.getCreateAccountParameter(), (_) => { + this.messageService.add({ + key: 'tr', + severity: 'success', + summary: this.translateService.instant('common.success'), + detail: this.translateService.instant('auth.account_created'), }); + this.router.navigate(['/login']).then(); + }); } getCreateAccountParameter() { diff --git a/indexcards-ui/src/app/component/indexcard/create-indexcard/create-indexcard.component.ts b/indexcards-ui/src/app/component/indexcard/create-indexcard/create-indexcard.component.ts index eb3ea51..6233d13 100644 --- a/indexcards-ui/src/app/component/indexcard/create-indexcard/create-indexcard.component.ts +++ b/indexcards-ui/src/app/component/indexcard/create-indexcard/create-indexcard.component.ts @@ -1,7 +1,6 @@ import {Component, OnInit} from '@angular/core'; import {FormBuilder, FormGroup, Validators} from "@angular/forms"; import {HttpClient} from "@angular/common/http"; -import {ResultResponse} from "../../../app.response"; import {LoginService} from "../../auth/login/login.service"; import {ActivatedRoute, Router} from "@angular/router"; import {MessageService} from "primeng/api"; @@ -36,20 +35,17 @@ export class CreateIndexcardComponent implements OnInit { } ngOnInit(): void { - this.id = this.route.snapshot.paramMap.get('id'); - } + this.id = this.route.snapshot.paramMap.get('id'); + } createIndexcard() { - if(!this.createIndexCardFormGroup.valid) { + if (!this.createIndexCardFormGroup.valid) { this.throwInvalidForm(); return; } - this.httpService.post( - '/api/indexCard/create', - this.createRequest(), - (response) => { - if(response.success) { + this.httpService.post('/api/indexCard/create', this.createRequest(), + (_) => { this.messageService.add({ key: 'tr', severity: 'success', @@ -57,8 +53,7 @@ export class CreateIndexcardComponent implements OnInit { detail: this.translateService.instant('indexcard.created'), }); this.router.navigate(["/project", this.id]); - } - }); + }); } createRequest() { diff --git a/indexcards-ui/src/app/component/indexcard/indexcard-quiz-stat/indexcard-quiz-stat.component.html b/indexcards-ui/src/app/component/indexcard/indexcard-quiz-stat/indexcard-quiz-stat.component.html index f460f1d..7173124 100644 --- a/indexcards-ui/src/app/component/indexcard/indexcard-quiz-stat/indexcard-quiz-stat.component.html +++ b/indexcards-ui/src/app/component/indexcard/indexcard-quiz-stat/indexcard-quiz-stat.component.html @@ -1,6 +1,5 @@ -
-

{{ 'indexcard.stat' | translate }} {{ userProject?.projectResponse?.name }}

+

{{ 'indexcard.stat' | translate }} {{ userProject?.name }}

diff --git a/indexcards-ui/src/app/component/indexcard/indexcard-quiz-stat/indexcard-quiz-stat.component.ts b/indexcards-ui/src/app/component/indexcard/indexcard-quiz-stat/indexcard-quiz-stat.component.ts index f5d014f..4e2f908 100644 --- a/indexcards-ui/src/app/component/indexcard/indexcard-quiz-stat/indexcard-quiz-stat.component.ts +++ b/indexcards-ui/src/app/component/indexcard/indexcard-quiz-stat/indexcard-quiz-stat.component.ts @@ -1,9 +1,6 @@ import {Component, OnInit} from '@angular/core'; -import {Assessment, UserProjectResponse} from "../../../app.response"; +import {Assessment, ProjectResponse} from "../../../app.response"; import {ActivatedRoute, Router} from "@angular/router"; -import {HttpClient} from "@angular/common/http"; -import {MessageService} from "primeng/api"; -import {LoginService} from "../../auth/login/login.service"; import {TranslateService} from "@ngx-translate/core"; import {HttpService} from "../../../services/http.service"; @@ -12,9 +9,9 @@ import {HttpService} from "../../../services/http.service"; templateUrl: './indexcard-quiz-stat.component.html', styleUrls: ['./indexcard-quiz-stat.component.css'] }) -export class IndexcardQuizStatComponent implements OnInit{ +export class IndexcardQuizStatComponent implements OnInit { - userProject?: UserProjectResponse; + userProject?: ProjectResponse; private id: string | null = ''; @@ -25,9 +22,6 @@ export class IndexcardQuizStatComponent implements OnInit{ constructor( private route: ActivatedRoute, private router: Router, - private http: HttpClient, - private messageService: MessageService, - private loginService: LoginService, private translateService: TranslateService, private httpService: HttpService ) { @@ -36,11 +30,11 @@ export class IndexcardQuizStatComponent implements OnInit{ ngOnInit(): void { this.id = this.route.snapshot.paramMap.get('id'); - this.httpService.get(`/api/project/project?id=${this.id}`, + this.httpService.get(`/api/project/project?id=${this.id}`, response => { - this.userProject = response; - this.generateChartData(); - }, () => this.router.navigate([''])); + this.userProject = response; + this.generateChartData(); + }, () => this.router.navigate([''])); } generateChartData(): void { @@ -57,15 +51,19 @@ export class IndexcardQuizStatComponent implements OnInit{ const datasets = []; const colors = []; const documentStyle = getComputedStyle(document.documentElement); - for(const assessment in Object.keys(Assessment).filter((item) => {return isNaN(Number(item));})) { - datasets.push( this.userProject?.projectResponse.indexCardResponses - .filter(v => Assessment[v.assessment].toString() === assessment).length + for (const assessment in Object.keys(Assessment).filter((item) => { + return isNaN(Number(item)); + })) { + datasets.push(this.userProject!.indexCardResponses + .filter(v => Assessment[v.assessment].toString() === assessment).length ); colors.push(documentStyle.getPropertyValue(`--${Assessment[assessment].toString().toLowerCase()}`)); } - let labels = Object.keys(Assessment).filter((item) => {return isNaN(Number(item));}) - labels = labels.map(label => this.translateService.instant(label.toLowerCase())); + let labels = Object.keys(Assessment).filter((item) => { + return isNaN(Number(item)); + }) + labels = labels.map(label => this.translateService.instant(label.toLowerCase())); this.data = { title: "Status", @@ -80,10 +78,10 @@ export class IndexcardQuizStatComponent implements OnInit{ } onClickQuizButton() { - this.router.navigate(['project', this.id, 'quiz']); + this.router.navigate(['project', this.id, 'quiz']).then(); } onClickToProject() { - this.router.navigate(['project', this.id]); + this.router.navigate(['project', this.id]).then(); } } diff --git a/indexcards-ui/src/app/component/indexcard/indexcard-quiz/indexcard-quiz.component.ts b/indexcards-ui/src/app/component/indexcard/indexcard-quiz/indexcard-quiz.component.ts index 3f060aa..d9c7caa 100644 --- a/indexcards-ui/src/app/component/indexcard/indexcard-quiz/indexcard-quiz.component.ts +++ b/indexcards-ui/src/app/component/indexcard/indexcard-quiz/indexcard-quiz.component.ts @@ -1,9 +1,8 @@ import {Component, OnInit} from '@angular/core'; -import {IndexCardResponses, ResultResponse} from "../../../app.response"; +import {IndexCardResponse} from "../../../app.response"; import {HttpClient} from "@angular/common/http"; import {LoginService} from "../../auth/login/login.service"; import {ActivatedRoute, Router} from "@angular/router"; -import {IndexCardResponse } from "../../../app.response"; import {MessageService} from "primeng/api"; import {TranslateService} from "@ngx-translate/core"; import {HttpService} from "../../../services/http.service"; @@ -14,7 +13,7 @@ import {HttpService} from "../../../services/http.service"; styleUrls: ['./indexcard-quiz.component.css'] }) export class IndexcardQuizComponent implements OnInit { - indexCards?: IndexCardResponses; + indexCards?: IndexCardResponse[]; index = 0; @@ -36,32 +35,29 @@ export class IndexcardQuizComponent implements OnInit { ngOnInit(): void { this.id = this.route.snapshot.paramMap.get('id'); - this.httpService.get(`/api/indexCard/quizIndexCards?id=${this.id}`, - response => { - if(response.success) { - this.indexCards = response; - this.canStartQuiz(); - } - }, () => this.router.navigate([''])); + this.httpService.get(`/api/indexCard/quizIndexCards?id=${this.id}`, + response => { + this.indexCards = response; + this.canStartQuiz(); + }, () => this.router.navigate([''])); } - assessIndexCard(assessment: string): void { + + assessIndexCard(assessment: string): void { const request = this.createAssessmentRequest(assessment); - this.httpService.post('/api/indexCard/assess', - request, response => { - if(response.success) { - this.nextIndexCard(); - } - }); + this.httpService.post('/api/indexCard/assess', + request, _ => { + this.nextIndexCard(); + }); } nextIndexCard() { this.index++; this.showAnswer = false; - if(this.index >= this.getIndexCardLength()) { + if (this.index >= this.getIndexCardLength()) { - this.router.navigate(["/project", this.id, "quiz", "stat"]); + this.router.navigate(["/project", this.id, "quiz", "stat"]).then(); this.messageService.add({ key: 'tr', severity: 'success', @@ -72,14 +68,14 @@ export class IndexcardQuizComponent implements OnInit { } getIndexCardLength(): number { - if(this.indexCards?.indexCardResponses) { - return this.indexCards?.indexCardResponses.length; + if (this.indexCards) { + return this.indexCards.length; } return 0; } getIndexCard(): IndexCardResponse | undefined { - return this.indexCards?.indexCardResponses[this.index]; + return this.indexCards![this.index]; } createAssessmentRequest(assessment: string) { @@ -90,14 +86,14 @@ export class IndexcardQuizComponent implements OnInit { } canStartQuiz() { - if(this.indexCards?.indexCardResponses?.length == 0) { + if (this.indexCards!.length == 0) { this.messageService.add({ key: 'tr', severity: 'error', summary: this.translateService.instant('common.error'), detail: this.translateService.instant('indexcard.no_index_cards'), }); - this.router.navigate(["/project", this.id]); + this.router.navigate(["/project", this.id]).then(); } } } diff --git a/indexcards-ui/src/app/component/projects/all-projects/all-projects.component.html b/indexcards-ui/src/app/component/projects/all-projects/all-projects.component.html index ad48086..b8f9254 100644 --- a/indexcards-ui/src/app/component/projects/all-projects/all-projects.component.html +++ b/indexcards-ui/src/app/component/projects/all-projects/all-projects.component.html @@ -6,7 +6,7 @@

-
+
{{ project.name }} diff --git a/indexcards-ui/src/app/component/projects/all-projects/all-projects.component.ts b/indexcards-ui/src/app/component/projects/all-projects/all-projects.component.ts index 68ee53f..524dda2 100644 --- a/indexcards-ui/src/app/component/projects/all-projects/all-projects.component.ts +++ b/indexcards-ui/src/app/component/projects/all-projects/all-projects.component.ts @@ -1,7 +1,5 @@ -import { Component, OnInit } from '@angular/core'; -import { HttpClient } from "@angular/common/http"; -import {ResultResponse, UserProjectsResponse} from "../../../app.response"; -import { LoginService } from "../../auth/login/login.service"; +import {Component, OnInit} from '@angular/core'; +import {ProjectResponse} from "../../../app.response"; import {Router} from "@angular/router"; import {ConfirmationService, MessageService} from "primeng/api"; import {TranslateService} from "@ngx-translate/core"; @@ -14,46 +12,41 @@ import {HttpService} from "../../../services/http.service"; }) export class AllProjectsComponent implements OnInit { - userProjectsResponse?: UserProjectsResponse; + userProjectsResponse?: ProjectResponse[]; constructor( - private http: HttpClient, - private loginService: LoginService, private messageService: MessageService, private confirmationService: ConfirmationService, private router: Router, private translateService: TranslateService, private httpService: HttpService - ) {} + ) { + } ngOnInit(): void { this.getAllProjects(); } getAllProjects() { - this.httpService.get('/api/project/projects',response => { - if(response.success) { - this.userProjectsResponse = response; - } + this.httpService.get('/api/project/projects', response => { + this.userProjectsResponse = response; }); } goToProject(id: number) { - this.router.navigate(['/project', id]); + this.router.navigate(['/project', id]).then(); } deleteProject(id: number) { - this.httpService.delete(`/api/project/delete?id=${id}`, response => { - if(response.success) { - this.messageService.add({ - key: 'tr', - severity: 'success', - summary: this.translateService.instant('common.success'), - detail: this.translateService.instant('project.deleted'), - }); + this.httpService.delete(`/api/project/delete?id=${id}`, _ => { + this.messageService.add({ + key: 'tr', + severity: 'success', + summary: this.translateService.instant('common.success'), + detail: this.translateService.instant('project.deleted'), + }); - this.getAllProjects(); - } + this.getAllProjects(); }); } @@ -71,6 +64,6 @@ export class AllProjectsComponent implements OnInit { } editProject(id: number) { - this.router.navigate(['/project', id, 'edit']); + this.router.navigate(['/project', id, 'edit']).then(); } } diff --git a/indexcards-ui/src/app/component/projects/create-project/create-project.component.ts b/indexcards-ui/src/app/component/projects/create-project/create-project.component.ts index e45929c..8836d37 100644 --- a/indexcards-ui/src/app/component/projects/create-project/create-project.component.ts +++ b/indexcards-ui/src/app/component/projects/create-project/create-project.component.ts @@ -1,7 +1,5 @@ -import { Component } from '@angular/core'; +import {Component} from '@angular/core'; import {FormBuilder, FormGroup, Validators} from "@angular/forms"; -import {ResultResponse} from "../../../app.response"; -import {LoginService} from "../../auth/login/login.service"; import {Router} from "@angular/router"; import {MessageService} from "primeng/api"; import {TranslateService} from "@ngx-translate/core"; @@ -18,37 +16,34 @@ export class CreateProjectComponent { constructor( private messageService: MessageService, - private loginService: LoginService, private router: Router, private formBuilder: FormBuilder, private translateService: TranslateService, private httpService: HttpService - ){ + ) { this.createProjectFormGroup = this.formBuilder.group({ name: ['', Validators.required] }); } createProject(): void { - if(!this.createProjectFormGroup.valid) { + if (!this.createProjectFormGroup.valid) { this.throwInvalidForm(); return; } - this.httpService.post( + this.httpService.post( '/api/project/create', this.getCreateProjectRequestParameter(), - response => { - if(response.success) { - this.messageService.add({ - key: 'tr', - severity: 'success', - summary: this.translateService.instant('common.success'), - detail: this.translateService.instant('project.created'), - }); - this.router.navigate(['/']); - } - }); + _ => { + this.messageService.add({ + key: 'tr', + severity: 'success', + summary: this.translateService.instant('common.success'), + detail: this.translateService.instant('project.created'), + }); + this.router.navigate(['/']).then(); + }); } getCreateProjectRequestParameter() { diff --git a/indexcards-ui/src/app/component/projects/edit-project/edit-project.component.html b/indexcards-ui/src/app/component/projects/edit-project/edit-project.component.html index c6794d8..fb1701d 100644 --- a/indexcards-ui/src/app/component/projects/edit-project/edit-project.component.html +++ b/indexcards-ui/src/app/component/projects/edit-project/edit-project.component.html @@ -1,7 +1,7 @@

- {{ 'project.edit' | translate }} {{ userProject?.projectResponse?.name }} + {{ 'project.edit' | translate }} {{ userProject?.name }}