From 00b019bb8272f40bbc1f75c39c35e90e9a396b45 Mon Sep 17 00:00:00 2001 From: Viktoria Date: Tue, 30 Aug 2022 17:50:26 +0200 Subject: [PATCH] ViSnezh --- .../project/controller/ProjectController.java | 185 +++++++----------- .../payload/requst/ParticipantRequest.java | 12 ++ .../validation/ResponseErrorValidation.java | 6 +- .../web/project/service/ProjectService.java | 4 +- 4 files changed, 90 insertions(+), 117 deletions(-) create mode 100644 src/main/java/site/easystartup/web/project/domain/payload/requst/ParticipantRequest.java diff --git a/src/main/java/site/easystartup/web/project/controller/ProjectController.java b/src/main/java/site/easystartup/web/project/controller/ProjectController.java index 53c8c9e..a3b63f8 100644 --- a/src/main/java/site/easystartup/web/project/controller/ProjectController.java +++ b/src/main/java/site/easystartup/web/project/controller/ProjectController.java @@ -2,21 +2,26 @@ package site.easystartup.web.project.controller; import lombok.RequiredArgsConstructor; import org.modelmapper.ModelMapper; -import org.springframework.stereotype.Controller; +import org.springframework.http.ResponseEntity; +import org.springframework.util.ObjectUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import site.easystartup.web.project.domain.model.Project; +import site.easystartup.web.project.domain.payload.requst.ParticipantRequest; import site.easystartup.web.project.domain.payload.requst.ProjectRequest; +import site.easystartup.web.project.domain.payload.response.ResponseMessage; import site.easystartup.web.project.domain.validation.ResponseErrorValidation; +import site.easystartup.web.project.dto.ParticipantDto; import site.easystartup.web.project.dto.ProjectDto; import site.easystartup.web.project.service.ProjectService; import javax.validation.Valid; import java.security.Principal; -import java.util.Map; +import java.util.List; +import java.util.stream.Collectors; -@Controller +@RestController @RequiredArgsConstructor @RequestMapping("/project") public class ProjectController { @@ -24,147 +29,101 @@ public class ProjectController { private final ResponseErrorValidation responseErrorValidation; private final ModelMapper modelMapper; - @PostMapping("/create") - public ModelAndView createProject(@Valid @ModelAttribute("project") ProjectRequest projectRequest, - BindingResult bindingResult, - Principal principal) { - ModelAndView modelAndView = new ModelAndView(); - - if (bindingResult.hasErrors()) { - Map errors = responseErrorValidation.mapValidationService(bindingResult); - return modelAndView.addObject("errors", errors); - } + @PostMapping("/") + public ResponseEntity createProject(@Valid @RequestBody ProjectRequest projectRequest, + BindingResult bindingResult, + Principal principal) { + ResponseEntity errors = responseErrorValidation.mapValidationService(bindingResult); + if (!ObjectUtils.isEmpty(errors)) return errors; Project project = projectService.createProject(projectRequest, principal); - modelAndView.addObject("project", project); - modelAndView.setViewName("project"); - return modelAndView; + return ResponseEntity.ok().body(modelMapper.map(project, ProjectDto.class)); } - @PatchMapping("/{projectId}/edit") - public ModelAndView editProject(@Valid @ModelAttribute("projectUpdate") ProjectRequest projectRequest, - @PathVariable("projectId") Long projectId, - BindingResult bindingResult, - Principal principal) { - ModelAndView modelAndView = new ModelAndView(); + @PatchMapping("/{projectId}") + public ResponseEntity editProject(@Valid @RequestBody ProjectRequest projectRequest, + @PathVariable("projectId") Long projectId, + BindingResult bindingResult, + Principal principal) { + ResponseEntity errors = responseErrorValidation.mapValidationService(bindingResult); + if (!ObjectUtils.isEmpty(errors)) return errors; - if (bindingResult.hasErrors()) { - Map errors = responseErrorValidation.mapValidationService(bindingResult); - return modelAndView.addObject("errors", errors); - } - - Project projectUpdated = projectService - .editProject(projectRequest, projectId, principal); - modelAndView.addObject(projectUpdated); - modelAndView.setViewName("project"); - return modelAndView; + Project projectUpdated = projectService.editProject(projectRequest, projectId, principal); + return ResponseEntity.ok().body(modelMapper.map(projectUpdated, ProjectDto.class)); } - @DeleteMapping("/{projectId}/delete") - public ModelAndView deleteProject(@PathVariable("projectId") Long projectId, - Principal principal) { - ModelAndView modelAndView = new ModelAndView(); + @DeleteMapping("/{projectId}") + public ResponseEntity deleteProject(@PathVariable("projectId") Long projectId, + Principal principal) { projectService.deleteProject(projectId, principal); - modelAndView.setViewName("redirect:/my"); // some ? - return modelAndView; + return ResponseEntity.ok(new ResponseMessage("Project was deleted!")); } @GetMapping("/{projectId}") - public ModelAndView getProject(@PathVariable("projectId") Long projectId) { - ModelAndView modelAndView = new ModelAndView(); - - modelAndView.addObject("project", projectService.getProjectById(projectId)); - modelAndView.setViewName("project"); - - return modelAndView; + public ResponseEntity getProject(@PathVariable("projectId") Long projectId) { + return ResponseEntity.ok().body(modelMapper.map(projectService.getProjectById(projectId), ProjectDto.class)); } + // @GetMapping("/{userId}") - public ModelAndView getAllProjectsForUser(@PathVariable("userId") Long userId) { - ModelAndView modelAndView = new ModelAndView(); - - modelAndView.addObject("projects", projectService.getAllProjectsForUser(userId)); - modelAndView.setViewName("all-projects"); - return modelAndView; + public ResponseEntity> getAllProjectsForUser(@PathVariable("userId") Long userId) { + List projects = projectService.getAllProjectsForUser(userId) + .stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList()); + return ResponseEntity.ok().body(projects); } @GetMapping("/{technology}") - public ModelAndView getAllProjectsWithTechnology(@PathVariable("technology") String technology) { - ModelAndView modelAndView = new ModelAndView(); - - modelAndView.addObject("projects", projectService.getAllProjectsWithTechnology(technology)); - modelAndView.setViewName("all-projects"); - return modelAndView; + public ResponseEntity> getAllProjectsWithTechnology(@PathVariable("technology") String technology) { + List projects = projectService.getAllProjectsWithTechnology(technology) + .stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList()); + return ResponseEntity.ok().body(projects); } @GetMapping("/my") - public ModelAndView getAllProjectsForCurrentUser(Principal principal) { - ModelAndView modelAndView = new ModelAndView(); - - modelAndView.addObject(projectService.getAllProjectsForCurrentUser(principal)); - modelAndView.setViewName("all-projects"); - return modelAndView; + public ResponseEntity> getAllProjectsForCurrentUser(Principal principal) { + List projects = projectService.getAllProjectsForCurrentUser(principal) + .stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList()); + return ResponseEntity.ok().body(projects); } - @GetMapping("/{nameOfPosition}") - public ModelAndView getAllProjectsWithPosition(@PathVariable("nameOfPosition") String nameOfPosition) { - ModelAndView modelAndView = new ModelAndView(); - - modelAndView.addObject("projects", projectService.getAllProjectsWithPosition(nameOfPosition)); - modelAndView.setViewName("all-projects"); - - - return modelAndView; + @GetMapping("/positions") + public ResponseEntity> getAllProjectsWithPosition(@RequestBody String nameOfPosition) { + List projects = projectService.getAllProjectsWithPosition(nameOfPosition) + .stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList()); + return ResponseEntity.ok().body(projects); } - @GetMapping("/{commercialStatus}/commercialStatus") - public ModelAndView getAllProjectsWithCommercialStatus(@PathVariable("commercialStatus") int commercialStatus) { - ModelAndView modelAndView = new ModelAndView(); - - modelAndView.addObject("projects", projectService.getAllProjectsWithCommercialStatus(commercialStatus)); - modelAndView.setViewName("all-projects"); - - - return modelAndView; + @GetMapping("/commercial_status") + public ResponseEntity> getAllProjectsWithCommercialStatus(@RequestBody int commercialStatus) { + List projects = projectService.getAllProjectsWithCommercialStatus(commercialStatus) + .stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList()); + return ResponseEntity.ok().body(projects); } - @GetMapping("/{projectId}/requests") - public ModelAndView getAllRequestsForProject(@PathVariable("projectId") Long projectId) { - ModelAndView modelAndView = new ModelAndView(); - - modelAndView.addObject("participants", projectService.getAllRequestsForProject(projectId)); - modelAndView.setViewName("project"); - - return modelAndView; + @GetMapping("/requests") + public ResponseEntity> getAllRequestsForProject(@RequestBody Long projectId) { + List requests = projectService.getAllRequestsForProject(projectId) + .stream().map(project -> modelMapper.map(project, ParticipantDto.class)).collect(Collectors.toList()); + return ResponseEntity.ok().body(requests); } - @PostMapping("/{projectId}/{nameOfPosition}/apply") - public ModelAndView applyOnProject(@PathVariable("projectId") Long projectId, - @PathVariable("nameOfPosition") String nameOfPosition, - Principal principal) { - ModelAndView modelAndView = new ModelAndView(); - - modelAndView.addObject("message", projectService.applyOnProject(projectId, nameOfPosition, principal)); - modelAndView.addObject("project", modelMapper.map(projectService.getProjectById(projectId), ProjectDto.class)); - modelAndView.setViewName("project"); - - return modelAndView; + @PostMapping("/apply") + public ResponseEntity applyOnProject(@RequestBody ParticipantRequest participantRequest, + Principal principal) { + Project project = projectService + .applyOnProject(participantRequest.getProjectId(), participantRequest.getNameOfPosition(), principal); + return ResponseEntity.ok().body(modelMapper.map(project, ProjectDto.class)); } - @PostMapping("/{projectId}/{participantId}/{nameOfPosition}") - public ModelAndView confirmParticipant(@PathVariable("projectId") Long projectId, - @PathVariable("participantId") Long participantId, - @PathVariable("nameOfPosition") String nameOfPosition, - Principal principal) { - ModelAndView modelAndView = new ModelAndView(); + @PostMapping("/participant") + public ResponseEntity confirmParticipant(@RequestBody ParticipantRequest participantRequest, + Principal principal) { + Project project = projectService.confirmParticipant(participantRequest.getProjectId(), + participantRequest.getNameOfPosition(), + participantRequest.getParticipantId(), + principal); - modelAndView.addObject("message", projectService.confirmParticipant(projectId, nameOfPosition, participantId, principal)); - modelAndView.addObject("project", projectService.getProjectById(projectId)); - modelAndView.setViewName("project"); - - return modelAndView; + return ResponseEntity.ok().body(modelMapper.map(project, ProjectDto.class)); } - - } diff --git a/src/main/java/site/easystartup/web/project/domain/payload/requst/ParticipantRequest.java b/src/main/java/site/easystartup/web/project/domain/payload/requst/ParticipantRequest.java new file mode 100644 index 0000000..54c1360 --- /dev/null +++ b/src/main/java/site/easystartup/web/project/domain/payload/requst/ParticipantRequest.java @@ -0,0 +1,12 @@ +package site.easystartup.web.project.domain.payload.requst; + +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class ParticipantRequest { + private Long projectId; + private Long participantId; + private String nameOfPosition; +} diff --git a/src/main/java/site/easystartup/web/project/domain/validation/ResponseErrorValidation.java b/src/main/java/site/easystartup/web/project/domain/validation/ResponseErrorValidation.java index 7dbe77f..607ffa0 100644 --- a/src/main/java/site/easystartup/web/project/domain/validation/ResponseErrorValidation.java +++ b/src/main/java/site/easystartup/web/project/domain/validation/ResponseErrorValidation.java @@ -1,5 +1,7 @@ package site.easystartup.web.project.domain.validation; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.validation.BindingResult; @@ -12,7 +14,7 @@ import java.util.Map; @Service public class ResponseErrorValidation { - public Map mapValidationService(BindingResult result) { + public ResponseEntity mapValidationService(BindingResult result) { if (result.hasErrors()) { Map errorMap = new HashMap<>(); @@ -26,7 +28,7 @@ public class ResponseErrorValidation { errorMap.put(error.getCode(), error.getDefaultMessage()); } - return errorMap; + return new ResponseEntity<>(errorMap, HttpStatus.BAD_REQUEST); } return null; } diff --git a/src/main/java/site/easystartup/web/project/service/ProjectService.java b/src/main/java/site/easystartup/web/project/service/ProjectService.java index 3ceb51e..9cca748 100644 --- a/src/main/java/site/easystartup/web/project/service/ProjectService.java +++ b/src/main/java/site/easystartup/web/project/service/ProjectService.java @@ -93,7 +93,7 @@ public class ProjectService { return project.getParticipants(); } - public Object confirmParticipant(Long projectId, String nameOfPosition, Long participantId, Principal principal) { + public Project confirmParticipant(Long projectId, String nameOfPosition, Long participantId, Principal principal) { Project project = getProjectById(projectId); if (!projectIsBelongUser(project, principal)) @@ -107,7 +107,7 @@ public class ProjectService { } }); projectRepo.save(project); - return new ResponseMessage("User was confirm"); + return projectRepo.save(project); } private Project projectRequestToProject(ProjectRequest projectRequest, Principal principal) {