From 8a245584cae0669f0ccc0c4d678239c7c09faaa8 Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Mon, 8 Jul 2019 16:46:04 +0400 Subject: [PATCH] fix another controller --- .../activity/api/ActivityRepository.java | 6 + .../common/service/ActivityService.java | 28 +++- .../conference/service/ConferenceService.java | 5 - .../activity/grant/service/GrantService.java | 7 - .../activity/paper/service/PaperService.java | 7 - .../project/controller/ProjectController.java | 129 +++++------------- .../project/model/ProjectDashboardDto.java | 27 ++++ .../activity/project/model/ProjectDto.java | 37 +---- .../project/model/ProjectListDto.java | 27 ++++ .../project/repository/ProjectRepository.java | 10 +- .../service/ProjectNotificationService.java | 20 +++ .../project/service/ProjectService.java | 126 ++++++----------- src/test/java/project/ProjectServiceTest.java | 6 +- 13 files changed, 195 insertions(+), 240 deletions(-) create mode 100644 src/main/java/ru/ulstu/activity/project/model/ProjectDashboardDto.java create mode 100644 src/main/java/ru/ulstu/activity/project/model/ProjectListDto.java create mode 100644 src/main/java/ru/ulstu/activity/project/service/ProjectNotificationService.java diff --git a/src/main/java/ru/ulstu/activity/api/ActivityRepository.java b/src/main/java/ru/ulstu/activity/api/ActivityRepository.java index a4d6eca..58cda60 100644 --- a/src/main/java/ru/ulstu/activity/api/ActivityRepository.java +++ b/src/main/java/ru/ulstu/activity/api/ActivityRepository.java @@ -1,9 +1,15 @@ package ru.ulstu.activity.api; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.repository.query.Param; public interface ActivityRepository { String findByNameAndNotId(@Param("name") String name, @Param("id") Integer id); T save(T t); + + T getById(Integer id); + + Page findAll(Pageable pageable); } diff --git a/src/main/java/ru/ulstu/activity/common/service/ActivityService.java b/src/main/java/ru/ulstu/activity/common/service/ActivityService.java index 0ff7844..6d08474 100644 --- a/src/main/java/ru/ulstu/activity/common/service/ActivityService.java +++ b/src/main/java/ru/ulstu/activity/common/service/ActivityService.java @@ -1,11 +1,13 @@ package ru.ulstu.activity.common.service; +import org.springframework.data.domain.Page; import org.springframework.transaction.annotation.Transactional; import ru.ulstu.activity.api.ActivityRepository; import ru.ulstu.activity.api.model.ActivityDto; import ru.ulstu.activity.api.model.ActivityListDto; import ru.ulstu.activity.common.model.AbstractActivity; import ru.ulstu.activity.ping.service.PingService; +import ru.ulstu.core.jpa.OffsetablePageRequest; import ru.ulstu.core.model.response.PageableItems; import java.io.IOException; @@ -37,6 +39,22 @@ public abstract class ActivityService findAll(int offset, int count); + + public PageableItems findAll(int offset, int count) { + final Page page = activityRepository.findAll(new OffsetablePageRequest(offset, count)); + return new PageableItems<>(page.getTotalElements(), page.getContent()); + } public PageableItems findAllDto(int offset, int count) { return convertPageable(findAll(offset, count), entity -> getActivityListDto(entity)); diff --git a/src/main/java/ru/ulstu/activity/conference/service/ConferenceService.java b/src/main/java/ru/ulstu/activity/conference/service/ConferenceService.java index e596d88..db910ed 100644 --- a/src/main/java/ru/ulstu/activity/conference/service/ConferenceService.java +++ b/src/main/java/ru/ulstu/activity/conference/service/ConferenceService.java @@ -71,11 +71,6 @@ public class ConferenceService extends ActivityService findAll(int offset, int count) { - final Page page = conferenceRepository.findAll(new OffsetablePageRequest(offset, count)); - return new PageableItems<>(page.getTotalElements(), page.getContent()); - } - public boolean save(ConferenceDto conferenceDto, Errors errors) throws IOException { conferenceDto.setTitle(conferenceDto.getTitle()); filterEmptyDeadlines(conferenceDto); diff --git a/src/main/java/ru/ulstu/activity/grant/service/GrantService.java b/src/main/java/ru/ulstu/activity/grant/service/GrantService.java index 4318a3f..949874f 100644 --- a/src/main/java/ru/ulstu/activity/grant/service/GrantService.java +++ b/src/main/java/ru/ulstu/activity/grant/service/GrantService.java @@ -20,7 +20,6 @@ import ru.ulstu.activity.paper.model.Paper; import ru.ulstu.activity.paper.model.PaperDto; import ru.ulstu.activity.paper.service.PaperService; import ru.ulstu.activity.ping.service.PingService; -import ru.ulstu.activity.project.model.ProjectDto; import ru.ulstu.activity.project.service.ProjectService; import ru.ulstu.activity.timeline.service.EventService; import ru.ulstu.core.jpa.OffsetablePageRequest; @@ -172,12 +171,6 @@ public class GrantService extends ActivityService return grant; } - - public void createProject(GrantDto grantDto) throws IOException { - grantDto.setProject( - new ProjectDto(projectService.save(new ProjectDto(grantDto.getTitle())))); - } - @Transactional public boolean delete(Integer grantId) { Grant grant = findById(grantId); diff --git a/src/main/java/ru/ulstu/activity/paper/service/PaperService.java b/src/main/java/ru/ulstu/activity/paper/service/PaperService.java index fb41587..d0f3a57 100644 --- a/src/main/java/ru/ulstu/activity/paper/service/PaperService.java +++ b/src/main/java/ru/ulstu/activity/paper/service/PaperService.java @@ -102,13 +102,6 @@ public class PaperService extends ActivityService return new PageableItems<>(activePapersPage.getTotalElements(), sortPapers(activePapersPage.getContent())); } - public Paper update(Paper paper) { - paperRepository.save(paper); - paperNotificationService.sendCreateNotification(paper, oldAuthors); - paperNotificationService.statusChangeNotification(paper, oldStatus); - return paper; - } - @Transactional public PaperDto update(PaperDto paperDto) { Paper paper = findById(paperDto.getId()); diff --git a/src/main/java/ru/ulstu/activity/project/controller/ProjectController.java b/src/main/java/ru/ulstu/activity/project/controller/ProjectController.java index 8bc38e9..baf0a9b 100644 --- a/src/main/java/ru/ulstu/activity/project/controller/ProjectController.java +++ b/src/main/java/ru/ulstu/activity/project/controller/ProjectController.java @@ -1,127 +1,68 @@ package ru.ulstu.activity.project.controller; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.validation.Errors; +import org.springframework.web.bind.annotation.DeleteMapping; 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.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import ru.ulstu.activity.deadline.model.Deadline; -import ru.ulstu.activity.grant.model.GrantDto; -import ru.ulstu.activity.project.model.Project; +import org.springframework.web.bind.annotation.RestController; +import ru.ulstu.activity.api.ActivityController; +import ru.ulstu.activity.project.model.ProjectDashboardDto; import ru.ulstu.activity.project.model.ProjectDto; +import ru.ulstu.activity.project.model.ProjectListDto; import ru.ulstu.activity.project.service.ProjectService; -import ru.ulstu.user.model.User; -import springfox.documentation.annotations.ApiIgnore; +import ru.ulstu.configuration.Constants; +import ru.ulstu.core.model.response.PageableItems; +import ru.ulstu.core.model.response.Response; import javax.validation.Valid; -import java.io.IOException; -import java.util.List; -import java.util.stream.Collectors; -import static org.springframework.util.StringUtils.isEmpty; - -@Controller() -@RequestMapping(value = "/projects") -@ApiIgnore -public class ProjectController { +@RestController +@RequestMapping(Constants.API_1_0 + "projects") +public class ProjectController implements ActivityController { 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 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"; + @GetMapping("list") + public Response> getList(@RequestParam(value = "offset", defaultValue = "0") int offset, + @RequestParam(value = "count", defaultValue = "10") int count) { + return new Response<>(projectService.findAllDto(offset, count)); } - @PostMapping(value = "/project", params = "removeDeadline") - public String removeDeadline(ProjectDto projectDto, - @RequestParam(value = "removeDeadline") Integer deadlineId) { - projectService.removeDeadline(projectDto, deadlineId); - return "/projects/project"; + @GetMapping("dashboard") + public Response> getDashboard(@RequestParam(value = "offset", defaultValue = "0") int offset, + @RequestParam(value = "count", defaultValue = "10") int count) { + return new Response<>(projectService.findAllActiveDto(offset, count)); } - @GetMapping("/delete/{project-id}") - public String delete(@PathVariable("project-id") Integer projectId) throws IOException { - projectService.delete(projectId); - return String.format("redirect:%s", "/projects/projects"); + @GetMapping("{project-id}") + public Response get(@PathVariable("project-id") Integer projectId) { + return new Response<>(projectService.findProjectById(projectId)); } - @ModelAttribute("allExecutors") - public List getAllExecutors(ProjectDto projectDto) { - return projectService.getProjectExecutors(projectDto); + @PostMapping + public Response create(@RequestBody @Valid ProjectDto projectDto) { + return new Response<>(projectService.create(projectDto)); } - @ModelAttribute("allGrants") - public List getAllGrants() { - return projectService.getAllGrants(); + @PutMapping + public Response update(@RequestBody @Valid ProjectDto projectDto) { + return new Response<>(projectService.update(projectDto)); } - private void filterEmptyDeadlines(ProjectDto projectDto) { - projectDto.setDeadlines(projectDto.getDeadlines().stream() - .filter(dto -> dto.getDate() != null || !isEmpty(dto.getDescription())) - .collect(Collectors.toList())); + @DeleteMapping("/{project-id}") + public Response delete(@PathVariable("project-id") Integer projectId) { + return new Response<>(projectService.delete(projectId)); } - @ResponseBody - @PostMapping(value = "/ping") - public void ping(@RequestParam("projectId") int projectId) throws IOException { + @PostMapping("ping/{project-id}") + public void ping(@PathVariable("project-id") int projectId) { projectService.ping(projectId); } } diff --git a/src/main/java/ru/ulstu/activity/project/model/ProjectDashboardDto.java b/src/main/java/ru/ulstu/activity/project/model/ProjectDashboardDto.java new file mode 100644 index 0000000..ce3c46b --- /dev/null +++ b/src/main/java/ru/ulstu/activity/project/model/ProjectDashboardDto.java @@ -0,0 +1,27 @@ +package ru.ulstu.activity.project.model; + +import ru.ulstu.activity.api.model.ActivityDashboardDto; +import ru.ulstu.activity.common.model.ScienceGroupMemberDto; + +import java.util.List; + +import static ru.ulstu.core.util.StreamApiUtils.convert; + +public class ProjectDashboardDto extends ActivityDashboardDto { + private final Project.ProjectStatus status; + private final List executors; + + public ProjectDashboardDto(Project project) { + super(project.getId(), project.getTitle()); + this.status = project.getStatus(); + this.executors = convert(project.getExecutors(), ScienceGroupMemberDto::new); + } + + public Project.ProjectStatus getStatus() { + return status; + } + + public List getExecutors() { + return executors; + } +} diff --git a/src/main/java/ru/ulstu/activity/project/model/ProjectDto.java b/src/main/java/ru/ulstu/activity/project/model/ProjectDto.java index 59af93d..e30547f 100644 --- a/src/main/java/ru/ulstu/activity/project/model/ProjectDto.java +++ b/src/main/java/ru/ulstu/activity/project/model/ProjectDto.java @@ -2,7 +2,7 @@ package ru.ulstu.activity.project.model; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import org.thymeleaf.util.StringUtils; +import ru.ulstu.activity.api.model.ActivityDto; import ru.ulstu.activity.deadline.model.Deadline; import ru.ulstu.activity.file.model.FileDataDto; import ru.ulstu.activity.grant.model.GrantDto; @@ -14,13 +14,10 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import static ru.ulstu.core.util.StreamApiUtils.convert; -public class ProjectDto { - private Integer id; - +public class ProjectDto extends ActivityDto { @NotEmpty private String title; private Project.ProjectStatus status; @@ -35,15 +32,6 @@ public class ProjectDto { private List grantIds; private List grants; - private final static int MAX_EXECUTORS_LENGTH = 40; - - public ProjectDto() { - } - - public ProjectDto(String title) { - this.title = title; - } - @JsonCreator public ProjectDto(@JsonProperty("id") Integer id, @JsonProperty("title") String title, @@ -57,7 +45,7 @@ public class ProjectDto { @JsonProperty("executors") List executors, @JsonProperty("grantIds") List grantIds, @JsonProperty("grants") List grants) { - this.id = id; + super(id); this.title = title; this.status = status; this.description = description; @@ -73,8 +61,8 @@ public class ProjectDto { public ProjectDto(Project project) { - Set users = new HashSet(project.getExecutors()); - this.id = project.getId(); + super(project.getId()); + Set users = new HashSet<>(project.getExecutors()); this.title = project.getTitle(); this.status = project.getStatus(); this.description = project.getDescription(); @@ -88,14 +76,6 @@ public class ProjectDto { this.grants = convert(project.getGrants(), GrantDto::new); } - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - public String getTitle() { return title; } @@ -176,13 +156,6 @@ public class ProjectDto { this.executors = executors; } - public String getExecutorsString() { - return StringUtils.abbreviate(executors - .stream() - .map(executor -> executor.getLastName()) - .collect(Collectors.joining(", ")), MAX_EXECUTORS_LENGTH); - } - public List getGrantIds() { return grantIds; } diff --git a/src/main/java/ru/ulstu/activity/project/model/ProjectListDto.java b/src/main/java/ru/ulstu/activity/project/model/ProjectListDto.java new file mode 100644 index 0000000..b1cd440 --- /dev/null +++ b/src/main/java/ru/ulstu/activity/project/model/ProjectListDto.java @@ -0,0 +1,27 @@ +package ru.ulstu.activity.project.model; + +import ru.ulstu.activity.api.model.ActivityListDto; +import ru.ulstu.activity.common.model.ScienceGroupMemberDto; + +import java.util.List; + +import static ru.ulstu.core.util.StreamApiUtils.convert; + +public class ProjectListDto extends ActivityListDto { + private final Project.ProjectStatus status; + private final List executors; + + public ProjectListDto(Project project) { + super(project.getId(), project.getTitle()); + this.status = project.getStatus(); + this.executors = convert(project.getExecutors(), ScienceGroupMemberDto::new); + } + + public Project.ProjectStatus getStatus() { + return status; + } + + public List getExecutors() { + return executors; + } +} diff --git a/src/main/java/ru/ulstu/activity/project/repository/ProjectRepository.java b/src/main/java/ru/ulstu/activity/project/repository/ProjectRepository.java index 059cd3c..d74b188 100644 --- a/src/main/java/ru/ulstu/activity/project/repository/ProjectRepository.java +++ b/src/main/java/ru/ulstu/activity/project/repository/ProjectRepository.java @@ -1,8 +1,14 @@ package ru.ulstu.activity.project.repository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import ru.ulstu.activity.api.ActivityRepository; import ru.ulstu.activity.project.model.Project; -public interface ProjectRepository extends JpaRepository { - +public interface ProjectRepository extends JpaRepository, ActivityRepository { + @Query("SELECT p FROM Project p WHERE p.status NOT IN (:statuses)") + Page findAllWithoutStatuses(Pageable pageable, @Param("statuses") Project.ProjectStatus... statuses); } diff --git a/src/main/java/ru/ulstu/activity/project/service/ProjectNotificationService.java b/src/main/java/ru/ulstu/activity/project/service/ProjectNotificationService.java new file mode 100644 index 0000000..3bbf821 --- /dev/null +++ b/src/main/java/ru/ulstu/activity/project/service/ProjectNotificationService.java @@ -0,0 +1,20 @@ +package ru.ulstu.activity.project.service; + +import org.springframework.stereotype.Service; +import ru.ulstu.activity.common.service.ActivityNotificationService; +import ru.ulstu.activity.project.model.Project; +import ru.ulstu.user.service.MailService; + +@Service +public class ProjectNotificationService extends ActivityNotificationService { + + private final MailService mailService; + + public ProjectNotificationService(MailService mailService) { + this.mailService = mailService; + } + + public void sendCreateNotification(Project project) { + throw new RuntimeException("not implemented yet"); + } +} diff --git a/src/main/java/ru/ulstu/activity/project/service/ProjectService.java b/src/main/java/ru/ulstu/activity/project/service/ProjectService.java index e9d6316..34e99a4 100644 --- a/src/main/java/ru/ulstu/activity/project/service/ProjectService.java +++ b/src/main/java/ru/ulstu/activity/project/service/ProjectService.java @@ -1,100 +1,68 @@ package ru.ulstu.activity.project.service; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.thymeleaf.util.StringUtils; +import ru.ulstu.activity.common.service.ActivityService; import ru.ulstu.activity.deadline.service.DeadlineService; -import ru.ulstu.activity.file.model.FileDataDto; import ru.ulstu.activity.file.service.FileService; -import ru.ulstu.activity.grant.model.GrantDto; -import ru.ulstu.activity.grant.repository.GrantRepository; +import ru.ulstu.activity.grant.service.GrantService; import ru.ulstu.activity.ping.service.PingService; import ru.ulstu.activity.project.model.Project; +import ru.ulstu.activity.project.model.ProjectDashboardDto; import ru.ulstu.activity.project.model.ProjectDto; +import ru.ulstu.activity.project.model.ProjectListDto; import ru.ulstu.activity.project.repository.ProjectRepository; -import ru.ulstu.activity.timeline.service.EventService; +import ru.ulstu.core.jpa.OffsetablePageRequest; +import ru.ulstu.core.model.response.PageableItems; import ru.ulstu.user.model.User; import ru.ulstu.user.service.UserService; import java.io.IOException; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import static java.util.stream.Collectors.toList; -import static org.springframework.util.ObjectUtils.isEmpty; +import static ru.ulstu.activity.project.model.Project.ProjectStatus.CLOSED; +import static ru.ulstu.activity.project.model.Project.ProjectStatus.FAILED; import static ru.ulstu.activity.project.model.Project.ProjectStatus.TECHNICAL_TASK; -import static ru.ulstu.core.util.StreamApiUtils.convert; +import static ru.ulstu.core.util.StreamApiUtils.convertPageable; @Service -public class ProjectService { - private final static int MAX_DISPLAY_SIZE = 40; - +public class ProjectService extends ActivityService { private final ProjectRepository projectRepository; private final DeadlineService deadlineService; - private final GrantRepository grantRepository; + private final GrantService grantService; private final FileService fileService; - private final EventService eventService; private final UserService userService; private final PingService pingService; public ProjectService(ProjectRepository projectRepository, + ProjectNotificationService projectNotificationService, DeadlineService deadlineService, - GrantRepository grantRepository, + GrantService grantService, FileService fileService, - EventService eventService, UserService userService, PingService pingService) { + super(projectRepository, projectNotificationService, pingService); this.projectRepository = projectRepository; this.deadlineService = deadlineService; - this.grantRepository = grantRepository; + this.grantService = grantService; this.fileService = fileService; - this.eventService = eventService; this.userService = userService; this.pingService = pingService; } - public List findAll() { - return projectRepository.findAll(); - } - - public List findAllDto() { - List projects = convert(findAll(), ProjectDto::new); - projects.forEach(projectDto -> projectDto.setTitle(StringUtils.abbreviate(projectDto.getTitle(), MAX_DISPLAY_SIZE))); - return projects; - } - - public ProjectDto findOneDto(Integer id) { - return new ProjectDto(projectRepository.getOne(id)); - } - - public List getProjectStatuses() { - return Arrays.asList(Project.ProjectStatus.values()); + public PageableItems findAllActiveDto(int offset, int count) { + return convertPageable(findAllActive(offset, count), ProjectDashboardDto::new); } - @Transactional - public Project create(ProjectDto projectDto) throws IOException { - Project newProject = copyFromDto(new Project(), projectDto); - newProject = projectRepository.save(newProject); - eventService.createFromObject(newProject, Collections.emptyList(), false, "проекта"); - return newProject; + private PageableItems findAllActive(int offset, int count) { + Page activeProjectPage = projectRepository.findAllWithoutStatuses(new OffsetablePageRequest(offset, count), CLOSED, FAILED); + return new PageableItems<>(activeProjectPage.getTotalElements(), activeProjectPage.getContent()); } @Transactional - private Project update(ProjectDto projectDto) throws IOException { - Project project = projectRepository.getOne(projectDto.getId()); - projectRepository.save(copyFromDto(project, projectDto)); - eventService.updateProjectDeadlines(project); - for (FileDataDto file : projectDto.getFiles().stream() - .filter(f -> f.isDeleted() && f.getId() != null) - .collect(toList())) { - fileService.delete(file.getId()); - } - return project; - } - - @Transactional - public boolean delete(Integer projectId) throws IOException { + public boolean delete(Integer projectId) { if (projectRepository.existsById(projectId)) { Project project = projectRepository.getOne(projectId); projectRepository.delete(project); @@ -103,12 +71,12 @@ public class ProjectService { return false; } - private Project copyFromDto(Project project, ProjectDto projectDto) throws IOException { + protected Project copyFromDto(Project project, ProjectDto projectDto) throws IOException { project.setDescription(projectDto.getDescription()); project.setStatus(projectDto.getStatus() == null ? TECHNICAL_TASK : projectDto.getStatus()); project.setTitle(projectDto.getTitle()); if (projectDto.getGrant() != null && projectDto.getGrant().getId() != null) { - project.setGrant(grantRepository.getOne(projectDto.getGrant().getId())); + project.setGrant(grantService.findById(projectDto.getGrant().getId())); } project.setRepository(projectDto.getRepository()); project.setDeadlines(deadlineService.saveOrCreate(projectDto.getDeadlines())); @@ -117,17 +85,24 @@ public class ProjectService { .collect(toList()))); project.getGrants().clear(); if (projectDto.getGrantIds() != null && !projectDto.getGrantIds().isEmpty()) { - projectDto.getGrantIds().forEach(grantIds -> project.getGrants().add(grantRepository.findGrantById(grantIds))); + projectDto.getGrantIds().forEach(grantIds -> project.getGrants().add(grantService.findById(grantIds))); } return project; } - public Project save(ProjectDto projectDto) throws IOException { - if (isEmpty(projectDto.getId())) { - return create(projectDto); - } else { - return update(projectDto); - } + @Override + protected ProjectListDto getActivityListDto(Project entity) { + return new ProjectListDto(entity); + } + + @Override + protected Project getNewActivity() { + return new Project(); + } + + @Override + protected ProjectDto getNewActivityDto(Project entity) { + return new ProjectDto(entity); } public ProjectDto removeDeadline(ProjectDto projectDto, Integer deadlineId) { @@ -146,26 +121,7 @@ public class ProjectService { return userService.findAll(); } - @Transactional - public void ping(int projectId) { - pingService.addPing(findById(projectId)); - } - - public List getAllGrants() { - return convert(grantRepository.findAll(), GrantDto::new); + public ProjectDto findProjectById(Integer projectId) { + return getNewActivityDto(findById(projectId)); } - - private List getProjectGrants(List grantIds) { - return convert(grantRepository.findAllById(grantIds), GrantDto::new); - } - - public void attachGrant(ProjectDto projectDto) { - if (!projectDto.getGrantIds().isEmpty()) { - projectDto.getGrants().clear(); - projectDto.setGrants(getProjectGrants(projectDto.getGrantIds())); - } else { - projectDto.getGrants().clear(); - } - } - -} +} \ No newline at end of file diff --git a/src/test/java/project/ProjectServiceTest.java b/src/test/java/project/ProjectServiceTest.java index 2f59c2f..269a855 100644 --- a/src/test/java/project/ProjectServiceTest.java +++ b/src/test/java/project/ProjectServiceTest.java @@ -93,7 +93,7 @@ public class ProjectServiceTest { @Test public void findAll() { when(projectRepository.findAll()).thenReturn(projects); - assertEquals(projects, projectService.findAll()); + assertEquals(projects, projectService.findAll(0, 100).getItems()); } @Test @@ -137,8 +137,8 @@ public class ProjectServiceTest { } @Test - public void removeDeadline() throws IOException { - ProjectDto newProjectDto = new ProjectDto(); + public void removeDeadline() { + ProjectDto newProjectDto = new ProjectDto(null); newProjectDto.getRemovedDeadlineIds().add(INDEX); projectDto.getDeadlines().add(deadline); ProjectDto result = projectService.removeDeadline(projectDto, INDEX);