128 lines
4.5 KiB
Java
128 lines
4.5 KiB
Java
package ru.ulstu.project.controller;
|
||
|
||
import io.swagger.v3.oas.annotations.Hidden;
|
||
import jakarta.validation.Valid;
|
||
import org.springframework.stereotype.Controller;
|
||
import org.springframework.ui.ModelMap;
|
||
import org.springframework.validation.Errors;
|
||
import org.springframework.web.bind.annotation.GetMapping;
|
||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||
import org.springframework.web.bind.annotation.PathVariable;
|
||
import org.springframework.web.bind.annotation.PostMapping;
|
||
import org.springframework.web.bind.annotation.RequestMapping;
|
||
import org.springframework.web.bind.annotation.RequestParam;
|
||
import org.springframework.web.bind.annotation.ResponseBody;
|
||
import ru.ulstu.deadline.model.Deadline;
|
||
import ru.ulstu.grant.model.GrantDto;
|
||
import ru.ulstu.project.model.Project;
|
||
import ru.ulstu.project.model.ProjectDto;
|
||
import ru.ulstu.project.service.ProjectService;
|
||
import ru.ulstu.user.model.User;
|
||
|
||
import java.io.IOException;
|
||
import java.util.List;
|
||
import java.util.stream.Collectors;
|
||
|
||
import static org.springframework.util.StringUtils.isEmpty;
|
||
|
||
@Controller()
|
||
@RequestMapping(value = "/projects")
|
||
@Hidden
|
||
public class ProjectController {
|
||
private final ProjectService projectService;
|
||
|
||
public ProjectController(ProjectService projectService) {
|
||
this.projectService = projectService;
|
||
}
|
||
|
||
@GetMapping("/dashboard")
|
||
public void getDashboard(ModelMap modelMap) {
|
||
modelMap.put("projects", projectService.findAllDto());
|
||
}
|
||
|
||
@GetMapping("/projects")
|
||
public void getProjects(ModelMap modelMap) {
|
||
modelMap.put("projects", projectService.findAllDto());
|
||
}
|
||
|
||
@GetMapping("/project")
|
||
public void getProject(ModelMap modelMap, @RequestParam(value = "id") Integer id) {
|
||
if (id != null && id > 0) {
|
||
ProjectDto projectDto = projectService.findOneDto(id);
|
||
attachGrant(projectDto);
|
||
modelMap.put("projectDto", projectService.findOneDto(id));
|
||
} else {
|
||
modelMap.put("projectDto", new ProjectDto());
|
||
}
|
||
}
|
||
|
||
@ModelAttribute("allStatuses")
|
||
public List<Project.ProjectStatus> getProjectStatuses() {
|
||
return projectService.getProjectStatuses();
|
||
}
|
||
|
||
@PostMapping(value = "/project", params = "save")
|
||
public String save(@Valid ProjectDto projectDto, Errors errors) throws IOException {
|
||
filterEmptyDeadlines(projectDto);
|
||
if (projectDto.getDeadlines().isEmpty()) {
|
||
errors.rejectValue("deadlines", "errorCode", "Не может быть пустым");
|
||
}
|
||
if (errors.hasErrors()) {
|
||
return "/projects/project";
|
||
}
|
||
projectService.save(projectDto);
|
||
return String.format("redirect:%s", "/projects/projects");
|
||
}
|
||
|
||
@PostMapping(value = "/project", params = "attachGrant")
|
||
public String attachGrant(ProjectDto projectDto) {
|
||
projectService.attachGrant(projectDto);
|
||
return "/projects/project";
|
||
}
|
||
|
||
@PostMapping(value = "/project", params = "addDeadline")
|
||
public String addDeadline(@Valid ProjectDto projectDto, Errors errors) {
|
||
filterEmptyDeadlines(projectDto);
|
||
if (errors.hasErrors()) {
|
||
return "/projects/project";
|
||
}
|
||
projectDto.getDeadlines().add(new Deadline());
|
||
return "/projects/project";
|
||
}
|
||
|
||
@PostMapping(value = "/project", params = "removeDeadline")
|
||
public String removeDeadline(ProjectDto projectDto,
|
||
@RequestParam(value = "removeDeadline") Integer deadlineId) {
|
||
projectService.removeDeadline(projectDto, deadlineId);
|
||
return "/projects/project";
|
||
}
|
||
|
||
@GetMapping("/delete/{project-id}")
|
||
public String delete(@PathVariable("project-id") Integer projectId) throws IOException {
|
||
projectService.delete(projectId);
|
||
return String.format("redirect:%s", "/projects/projects");
|
||
}
|
||
|
||
@ModelAttribute("allExecutors")
|
||
public List<User> getAllExecutors(ProjectDto projectDto) {
|
||
return projectService.getProjectExecutors(projectDto);
|
||
}
|
||
|
||
@ModelAttribute("allGrants")
|
||
public List<GrantDto> getAllGrants() {
|
||
return projectService.getAllGrants();
|
||
}
|
||
|
||
private void filterEmptyDeadlines(ProjectDto projectDto) {
|
||
projectDto.setDeadlines(projectDto.getDeadlines().stream()
|
||
.filter(dto -> dto.getDate() != null || !isEmpty(dto.getDescription()))
|
||
.collect(Collectors.toList()));
|
||
}
|
||
|
||
@ResponseBody
|
||
@PostMapping(value = "/ping")
|
||
public void ping(@RequestParam("projectId") int projectId) throws IOException {
|
||
projectService.ping(projectId);
|
||
}
|
||
}
|