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") @PatchMapping("/{projectId}/update")
public ModelAndView updateProject(@ModelAttribute("projectUpdate") ProjectDto projectDto, public ModelAndView updateProject(@ModelAttribute("projectUpdate") ProjectRequest projectRequest,
@PathVariable("projectId") Long projectId, @PathVariable("projectId") Long projectId,
BindingResult bindingResult, BindingResult bindingResult,
Principal principal) { Principal principal) {
@@ -53,7 +53,7 @@ public class ProjectController {
} }
Project projectUpdated = projectService Project projectUpdated = projectService
.updateProject(modelMapper.map(projectDto, Project.class), projectId, principal); .updateProject(projectRequest, projectId, principal);
modelAndView.addObject(projectUpdated); modelAndView.addObject(projectUpdated);
modelAndView.setViewName("project"); modelAndView.setViewName("project");
return modelAndView; return modelAndView;
@@ -117,25 +117,27 @@ public class ProjectController {
return modelAndView; return modelAndView;
} }
@PostMapping("/{projectId}/applay") @PostMapping("/{projectId}/{nameOfPosition}/applay")
public ModelAndView applayOnProject(@PathVariable("projectId") Long projectId, public ModelAndView applayOnProject(@PathVariable("projectId") Long projectId,
@PathVariable("nameOfPosition") String nameOfPosition,
Principal principal) { Principal principal) {
ModelAndView modelAndView = new ModelAndView(); 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.addObject("project", modelMapper.map(projectService.getProjectById(projectId), ProjectDto.class));
modelAndView.setViewName("project"); modelAndView.setViewName("project");
return modelAndView; return modelAndView;
} }
@PostMapping("/{projectId}/{participantId}") @PostMapping("/{projectId}/{participantId}/{nameOfPosition}")
public ModelAndView confirmParticipant(@PathVariable("projectId") Long projectId, public ModelAndView confirmParticipant(@PathVariable("projectId") Long projectId,
@PathVariable("participantId") Long participantId, @PathVariable("participantId") Long participantId,
@PathVariable("nameOfPosition") String nameOfPosition,
Principal principal) { Principal principal) {
ModelAndView modelAndView = new ModelAndView(); 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.addObject("project", projectService.getProjectById(projectId));
modelAndView.setViewName("project"); 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; package site.easystartup.web.project.repo;
import org.springframework.data.jpa.repository.JpaRepository; 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 org.springframework.stereotype.Repository;
import site.easystartup.web.domain.User;
import site.easystartup.web.project.domain.model.Project; import site.easystartup.web.project.domain.model.Project;
import java.util.List;
import java.util.Set;
@Repository @Repository
public interface ProjectRepo extends JpaRepository<Project, Long> { 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 lombok.RequiredArgsConstructor;
import org.modelmapper.ModelMapper; import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Service; 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.Participant;
import site.easystartup.web.project.domain.model.Project; import site.easystartup.web.project.domain.model.Project;
import site.easystartup.web.project.domain.payload.requst.ProjectRequest; 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.project.repo.ProjectRepo;
import site.easystartup.web.service.UserService; import site.easystartup.web.service.UserService;
import site.easystartup.web.storage.service.StorageService; import site.easystartup.web.storage.service.StorageService;
import java.security.Principal; import java.security.Principal;
import java.util.Arrays; import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -23,42 +27,77 @@ public class ProjectService {
private final UserService userService; private final UserService userService;
private final ModelMapper modelMapper; private final ModelMapper modelMapper;
private final StorageService storageService; private final StorageService storageService;
private final ParticipantRepo participantRepo;
public Project createProject(ProjectRequest projectRequest, Principal principal) { public Project createProject(ProjectRequest projectRequest, Principal principal) {
Project project = projectRequestToProject(projectRequest); Project project = projectRequestToProject(projectRequest, principal);
return projectRepo.save(project);
project.setOwner(userService.getUserByPrincipal(principal));
return 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) { 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) { 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(); return result.toString();
} }
private Project projectRequestToProject(ProjectRequest projectRequest) { private Project projectRequestToProject(ProjectRequest projectRequest, Principal principal) {
Project project = new Project(); Project project = new Project();
project.setParticipants(projectRequest.getParticipants() project.setParticipants(projectRequest.getParticipants()
@@ -78,8 +117,13 @@ public class ProjectService {
project.setTechnology(formatTechnology(projectRequest.getTechnology())); project.setTechnology(formatTechnology(projectRequest.getTechnology()));
project.setCommercialStatus(project.getCommercialStatus()); project.setCommercialStatus(project.getCommercialStatus());
project.setCoverLink(projectRequest.getCover().getName()); project.setCoverLink(projectRequest.getCover().getName());
project.setOwner(userService.getUserByPrincipal(principal));
storageService.save(projectRequest.getCover()); storageService.save(projectRequest.getCover());
return project; return project;
} }
private boolean projectIsBelongUser(Project project, Principal principal) {
return project.getOwner().equals(userService.getUserByPrincipal(principal));
}
} }
@@ -2,6 +2,7 @@ package site.easystartup.web.service;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.hibernate.query.criteria.internal.predicate.PredicateImplementor; import org.hibernate.query.criteria.internal.predicate.PredicateImplementor;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import site.easystartup.web.domain.User; import site.easystartup.web.domain.User;
import site.easystartup.web.repo.UserRepo; import site.easystartup.web.repo.UserRepo;
@@ -16,4 +17,8 @@ public class UserService {
public User getUserByPrincipal(Principal principal) { public User getUserByPrincipal(Principal principal) {
return userRepo.findByUsername(principal.getName()); return userRepo.findByUsername(principal.getName());
} }
public User getUserById(Long userId) {
return userRepo.findById(userId).orElseThrow(() -> new UsernameNotFoundException("User not found"));
}
} }