package ru.ulstu.fc.project.service; import org.springframework.stereotype.Service; import ru.ulstu.fc.project.model.Project; import ru.ulstu.fc.project.model.ProjectDto; import ru.ulstu.fc.project.repository.ProjectRepository; import ru.ulstu.fc.user.model.User; import ru.ulstu.fc.user.service.UserService; import java.util.List; import java.util.stream.Collectors; @Service public class ProjectService { private final ProjectRepository projectRepository; private final UserService userService; public ProjectService(ProjectRepository projectRepository, UserService userService) { this.projectRepository = projectRepository; this.userService = userService; } public List getCurrentUserProjects() { return projectRepository.findAllByUserId(userService.getCurrentUser().getId()); } public List getCurrentUserProjectsDto() { return getCurrentUserProjects().stream().map(ProjectDto::new).collect(Collectors.toList()); } public Project getById(Integer id) { Project project = projectRepository .findById(id) .orElseThrow(() -> new RuntimeException("Project not found by id")); checkIsCurrentUserProjectWithThrow(project); return project; } public ProjectDto save(ProjectDto projectDto) { return new ProjectDto(save(new Project(projectDto))); } public Project save(Project projectToSave) { User currentUser = userService.getCurrentUser(); if (projectToSave.getId() == null) { projectToSave.setUser(currentUser); return projectRepository.save(projectToSave); } Project dbProject = getById(projectToSave.getId()); dbProject.setName(projectToSave.getName()); return projectRepository.save(dbProject); } public void delete(ProjectDto projectDto) { getById(projectDto.getId()); projectRepository.deleteById(projectDto.getId()); } public void checkIsCurrentUserProjectWithThrow(Project project) { if (!isUserProject(project, userService.getCurrentUser())) { throw new RuntimeException("User can not get access to project"); } } private boolean isUserProject(Project project, User currentUser) { return (currentUser.equals(project.getUser())); } }