2019-07-20 14:31:44 +04:00

95 lines
3.9 KiB
Java

package ru.ulstu.activity.project.service;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import ru.ulstu.activity.common.service.ActivityService;
import ru.ulstu.activity.deadline.service.DeadlineService;
import ru.ulstu.activity.file.service.FileService;
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.timeline.model.Event;
import ru.ulstu.activity.timeline.service.EventService;
import ru.ulstu.core.jpa.OffsetablePageRequest;
import ru.ulstu.core.model.response.PageableItems;
import java.io.IOException;
import java.util.List;
import static java.util.stream.Collectors.toList;
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.convertPageable;
@Service
public class ProjectService extends ActivityService<ProjectListDto, Project, ProjectDto> {
private final ProjectRepository projectRepository;
private final DeadlineService deadlineService;
private final FileService fileService;
private final PingService pingService;
private final EventService eventService;
public ProjectService(ProjectRepository projectRepository,
ProjectNotificationService projectNotificationService,
DeadlineService deadlineService,
FileService fileService,
PingService pingService, EventService eventService) {
super(projectRepository, projectNotificationService, pingService, eventService);
this.projectRepository = projectRepository;
this.deadlineService = deadlineService;
this.fileService = fileService;
this.pingService = pingService;
this.eventService = eventService;
}
@Override
public PageableItems<ProjectDashboardDto> findAllActiveDto(int offset, int count) {
return convertPageable(findAllActive(offset, count), ProjectDashboardDto::new);
}
@Override
public PageableItems<Project> findAllActive(int offset, int count) {
Page<Project> activeProjectPage = projectRepository.findAllWithoutStatuses(new OffsetablePageRequest(offset, count), CLOSED, FAILED);
return new PageableItems<>(activeProjectPage.getTotalElements(), activeProjectPage.getContent());
}
@Override
protected List<Event> getEvents(Project entity) {
return eventService.findByProject(entity);
}
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());
project.setRepository(projectDto.getRepository());
project.setDeadlines(deadlineService.saveOrCreate(projectDto.getDeadlines()));
project.setFiles(fileService.saveOrCreate(projectDto.getFiles().stream()
.filter(f -> !f.isDeleted())
.collect(toList())));
project.getGrants().clear();
return project;
}
@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 findProjectById(Integer projectId) {
return getNewActivityDto(findById(projectId));
}
}