package ru.ulstu.fc.project.service; import org.springframework.stereotype.Service; import ru.ulstu.fc.project.model.Project; import ru.ulstu.fc.project.model.ProjectForm; 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; @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 Project getById(Integer id) { Project project = projectRepository .findById(id) .orElseThrow(() -> new RuntimeException("Project not found by id")); checkUserProjectWithThrow(project, userService.getCurrentUser()); return project; } public Project save(ProjectForm projectForm) { return save(new Project(projectForm)); } 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(ProjectForm projectForm) { getById(projectForm.getId()); projectRepository.deleteById(projectForm.getId()); } private void checkUserProjectWithThrow(Project project, User currentUser) { if (!isUserProject(project, currentUser)) { throw new RuntimeException("User can not get access to project"); } } private boolean isUserProject(Project project, User currentUser) { return (currentUser.equals(project.getUser())); } }