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 { 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 findAllActiveDto(int offset, int count) { return convertPageable(findAllActive(offset, count), ProjectDashboardDto::new); } @Override public PageableItems findAllActive(int offset, int count) { Page activeProjectPage = projectRepository.findAllWithoutStatuses(new OffsetablePageRequest(offset, count), CLOSED, FAILED); return new PageableItems<>(activeProjectPage.getTotalElements(), activeProjectPage.getContent()); } @Override protected List 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)); } }