This commit is contained in:
Viktoria committed 2022-08-29 16:33:31 +02:00
1 parent 0395ab2195
commit 43508ff6c4
6 files changed
+111 -21

No files matched your search

@@ -41,7 +41,7 @@ public class ProjectController {
}
@PatchMapping("/{projectId}/update")
public ModelAndView updateProject(@ModelAttribute("projectUpdate") ProjectDto projectDto,
public ModelAndView updateProject(@ModelAttribute("projectUpdate") ProjectRequest projectRequest,
@PathVariable("projectId") Long projectId,
BindingResult bindingResult,
Principal principal) {
@@ -53,7 +53,7 @@ public class ProjectController {
}
Project projectUpdated = projectService
.updateProject(modelMapper.map(projectDto, Project.class), projectId, principal);
.updateProject(projectRequest, projectId, principal);
modelAndView.addObject(projectUpdated);
modelAndView.setViewName("project");
return modelAndView;
@@ -117,25 +117,27 @@ public class ProjectController {
return modelAndView;
}
@PostMapping("/{projectId}/applay")
@PostMapping("/{projectId}/{nameOfPosition}/applay")
public ModelAndView applayOnProject(@PathVariable("projectId") Long projectId,
@PathVariable("nameOfPosition") String nameOfPosition,
Principal principal) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", projectService.applayOnProject(projectId, principal));
modelAndView.addObject("message", projectService.applayOnProject(projectId, nameOfPosition, principal));
modelAndView.addObject("project", modelMapper.map(projectService.getProjectById(projectId), ProjectDto.class));
modelAndView.setViewName("project");
return modelAndView;
}
@PostMapping("/{projectId}/{participantId}")
@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();
modelAndView.addObject("message", projectService.confirmParticipant(projectId, participantId, principal));
modelAndView.addObject("message", projectService.confirmParticipant(projectId, nameOfPosition, participantId, principal));
modelAndView.addObject("project", projectService.getProjectById(projectId));
modelAndView.setViewName("project");
@@ -0,0 +1,11 @@
package site.easystartup.web.project.domain.exeption;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(HttpStatus.BAD_REQUEST)
public class ProjectNotFoundException extends RuntimeException{
public ProjectNotFoundException(String message) {
super(message);
}
}
@@ -0,0 +1,16 @@
package site.easystartup.web.project.repo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import site.easystartup.web.project.domain.model.Participant;
import site.easystartup.web.project.domain.model.Project;
import java.util.LinkedHashSet;
@Repository
public interface ParticipantRepo extends JpaRepository<Participant, Long> {
@Query ("SELECT Project FROM Participant WHERE nameOfPosition = :nameOfPosition")
LinkedHashSet<Project> findAllByNameOfPosition(@Param("nameOfPosition") String nameOfPosition);
}
@@ -1,9 +1,21 @@
package site.easystartup.web.project.repo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import site.easystartup.web.domain.User;
import site.easystartup.web.project.domain.model.Project;
import java.util.List;
import java.util.Set;
@Repository
public interface ProjectRepo extends JpaRepository<Project, Long> {
List<Project> findAllByOwner(User owner);
@Query(value = "SELECT p from Project p WHERE p.technology LIKE %:technology%")
List<Project> findAllByTechnology(@Param("technology") String tech);
}
@@ -3,16 +3,20 @@ 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.domain.User;
import site.easystartup.web.project.domain.exeption.ProjectNotFoundException;
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.ParticipantRepo;
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.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -23,42 +27,77 @@ public class ProjectService {
private final UserService userService;
private final ModelMapper modelMapper;
private final StorageService storageService;
private final ParticipantRepo participantRepo;
public Project createProject(ProjectRequest projectRequest, Principal principal) {
Project project = projectRequestToProject(projectRequest);
project.setOwner(userService.getUserByPrincipal(principal));
return project;
Project project = projectRequestToProject(projectRequest, principal);
return projectRepo.save(project);
}
public Project updateProject(Project projectUpdate, Long projectId, Principal principal) {
public Project updateProject(ProjectRequest projectRequest, Long projectId, Principal principal) {
if (!projectIsBelongUser(getProjectById(projectId), principal))
throw new RuntimeException("This project cannot be changed");
Project project = projectRequestToProject(projectRequest, principal);
project.setProjectId(projectId);
return projectRepo.save(project);
}
public void deleteProject(Long projectId, Principal principal) {
Project project = getProjectById(projectId);
if (!projectIsBelongUser(project, principal))
throw new RuntimeException("This project cannot be deleted");
projectRepo.delete(project);
}
public Project getProjectById(Long projectId) {
return projectRepo.findById(projectId).orElseThrow(() -> new ProjectNotFoundException("Project not found"));
}
public Set<Project> getAllProjectsForUser(Long userId) {
public List<Project> getAllProjectsForUser(Long userId) {
User user = userService.getUserById(userId);
return projectRepo.findAllByOwner(user);
}
public Set<Project> getAllProjectsWithTechnology(String technology) {
public List<Project> getAllProjectsWithTechnology(String technology) {
return projectRepo.findAllByTechnology(technology.trim());
}
public Set<Project> getAllProjectsForCurrentUser(Principal principal) {
public List<Project> getAllProjectsForCurrentUser(Principal principal) {
return projectRepo.findAllByOwner(userService.getUserByPrincipal(principal));
}
public Set<Project> getAllProjectsWithPosition(String nameOfPosition) {
public LinkedHashSet<Project> getAllProjectsWithPosition(String nameOfPosition) {
return participantRepo.findAllByNameOfPosition(nameOfPosition.trim());
}
public Object applayOnProject(Long projectId, Principal principal) {
public Project applayOnProject(Long projectId, String nameOfPosition, Principal principal) {
Project project = getProjectById(projectId);
project.getParticipants().stream().forEach(participant -> {
if (participant.getNameOfPosition().equals(nameOfPosition))
participant.getRequests().add(userService.getUserByPrincipal(principal));
});
return projectRepo.save(project);
}
public Object confirmParticipant(Long projectId, Long participantId, Principal principal) {
public Object confirmParticipant(Long projectId, String nameOfPosition, Long participantId, Principal principal) {
Project project = getProjectById(projectId);
if (!projectIsBelongUser(project, principal))
throw new RuntimeException("This project cannot be changed");
User user = userService.getUserById(participantId);
project.getParticipants().forEach(participant -> {
if (participant.getNameOfPosition().equals(nameOfPosition)) {
participant.setUser(user);
participant.getRequests().remove(user);
}
});
return projectRepo.save(project);
}
@@ -68,7 +107,7 @@ public class ProjectService {
return result.toString();
}
private Project projectRequestToProject(ProjectRequest projectRequest) {
private Project projectRequestToProject(ProjectRequest projectRequest, Principal principal) {
Project project = new Project();
project.setParticipants(projectRequest.getParticipants()
@@ -78,8 +117,13 @@ public class ProjectService {
project.setTechnology(formatTechnology(projectRequest.getTechnology()));
project.setCommercialStatus(project.getCommercialStatus());
project.setCoverLink(projectRequest.getCover().getName());
project.setOwner(userService.getUserByPrincipal(principal));
storageService.save(projectRequest.getCover());
return project;
}
private boolean projectIsBelongUser(Project project, Principal principal) {
return project.getOwner().equals(userService.getUserByPrincipal(principal));
}
}