95 lines
3.9 KiB
Java
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));
|
|
}
|
|
} |