ViSnezh
This commit is contained in:
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");
|
||||||
|
|
||||||
|
|||||||
+11
@@ -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"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user