From 39aad68575f3899ce2e97bae8e625e073c9f7832 Mon Sep 17 00:00:00 2001 From: Viktoria Date: Mon, 29 Aug 2022 15:23:42 +0200 Subject: [PATCH] ViSnezh --- .../project/controller/ProjectController.java | 5 ++- .../domain/payload/requst/ProjectRequest.java | 27 ++++++++++++ .../web/project/service/ProjectService.java | 42 +++++++++++++++++-- .../easystartup/web/service/UserService.java | 19 +++++++++ 4 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 src/main/java/site/easystartup/web/project/domain/payload/requst/ProjectRequest.java create mode 100644 src/main/java/site/easystartup/web/service/UserService.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 242ea30..3512180 100644 --- a/src/main/java/site/easystartup/web/project/controller/ProjectController.java +++ b/src/main/java/site/easystartup/web/project/controller/ProjectController.java @@ -7,6 +7,7 @@ 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.ProjectRequest; import site.easystartup.web.project.domain.validation.ResponseErrorValidation; import site.easystartup.web.project.dto.ProjectDto; import site.easystartup.web.project.service.ProjectService; @@ -23,7 +24,7 @@ public class ProjectController { private final ModelMapper modelMapper; @PostMapping("/create") - public ModelAndView createProject(@ModelAttribute("project") ProjectDto projectDto, + public ModelAndView createProject(@ModelAttribute("project") ProjectRequest projectRequest, BindingResult bindingResult, Principal principal) { ModelAndView modelAndView = new ModelAndView(); @@ -33,7 +34,7 @@ public class ProjectController { return modelAndView.addObject("errors", errors); } - Project project = projectService.createProject(modelMapper.map(projectDto, Project.class), principal); + Project project = projectService.createProject(projectRequest, principal); modelAndView.addObject("project", project); modelAndView.setViewName("project"); return modelAndView; diff --git a/src/main/java/site/easystartup/web/project/domain/payload/requst/ProjectRequest.java b/src/main/java/site/easystartup/web/project/domain/payload/requst/ProjectRequest.java new file mode 100644 index 0000000..be4ee9e --- /dev/null +++ b/src/main/java/site/easystartup/web/project/domain/payload/requst/ProjectRequest.java @@ -0,0 +1,27 @@ +package site.easystartup.web.project.domain.payload.requst; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.web.multipart.MultipartFile; +import site.easystartup.web.project.dto.ParticipantDto; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@RequiredArgsConstructor +public class ProjectRequest { + + private MultipartFile cover; + + @Size(min = 3, max = 100, message = "Title should be no less 3 and no more 100 signs") + @NotNull + private String title; + @Size(min = 50, message = "Description should be no less 50 signs") + @NotNull + private String description; + private int commercialStatus; + @NotNull + private String technology; + private List participants; +} 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 d96c074..38456d1 100644 --- a/src/main/java/site/easystartup/web/project/service/ProjectService.java +++ b/src/main/java/site/easystartup/web/project/service/ProjectService.java @@ -1,24 +1,38 @@ package site.easystartup.web.project.service; import lombok.RequiredArgsConstructor; +import org.modelmapper.ModelMapper; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import site.easystartup.web.project.domain.model.Participant; import site.easystartup.web.project.domain.model.Project; +import site.easystartup.web.project.domain.payload.requst.ProjectRequest; import site.easystartup.web.project.repo.ProjectRepo; +import site.easystartup.web.service.UserService; +import site.easystartup.web.storage.service.StorageService; import java.security.Principal; +import java.util.Arrays; import java.util.Set; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class ProjectService { private final ProjectRepo projectRepo; + private final UserService userService; + private final ModelMapper modelMapper; + private final StorageService storageService; - public Project createProject(Project project, Principal principal) { - return null; + public Project createProject(ProjectRequest projectRequest, Principal principal) { + Project project = projectRequestToProject(projectRequest); + + project.setOwner(userService.getUserByPrincipal(principal)); + return project; } - public Project updateProject(Project map, Long projectId, Principal principal) { + public Project updateProject(Project projectUpdate, Long projectId, Principal principal) { } public void deleteProject(Long projectId, Principal principal) { @@ -46,4 +60,26 @@ public class ProjectService { public Object confirmParticipant(Long projectId, Long participantId, Principal principal) { } + + + private String formatTechnology(String technology) { + StringBuilder result = new StringBuilder(); + Arrays.stream(technology.split(",")).forEach(tech -> result.append(tech.trim()).append(" ")); + return result.toString(); + } + + private Project projectRequestToProject(ProjectRequest projectRequest) { + Project project = new Project(); + + project.setParticipants(projectRequest.getParticipants() + .stream().map(part -> modelMapper.map(part, Participant.class)).collect(Collectors.toList())); + project.setTitle(projectRequest.getTitle()); + project.setDescription(projectRequest.getDescription()); + project.setTechnology(formatTechnology(projectRequest.getTechnology())); + project.setCommercialStatus(project.getCommercialStatus()); + project.setCoverLink(projectRequest.getCover().getName()); + storageService.save(projectRequest.getCover()); + + return project; + } } diff --git a/src/main/java/site/easystartup/web/service/UserService.java b/src/main/java/site/easystartup/web/service/UserService.java new file mode 100644 index 0000000..4bc139c --- /dev/null +++ b/src/main/java/site/easystartup/web/service/UserService.java @@ -0,0 +1,19 @@ +package site.easystartup.web.service; + +import lombok.RequiredArgsConstructor; +import org.hibernate.query.criteria.internal.predicate.PredicateImplementor; +import org.springframework.stereotype.Service; +import site.easystartup.web.domain.User; +import site.easystartup.web.repo.UserRepo; + +import java.security.Principal; + +@Service +@RequiredArgsConstructor +public class UserService { + private final UserRepo userRepo; + + public User getUserByPrincipal(Principal principal) { + return userRepo.findByUsername(principal.getName()); + } +}