Anton Romanov 3e9ed0561f
All checks were successful
CI fuzzy controller / container-test-job (push) Successful in 1m40s
#25 -- Fix project dto
2025-03-14 15:21:43 +04:00

70 lines
2.3 KiB
Java

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<Project> getCurrentUserProjects() {
return projectRepository.findAllByUserId(userService.getCurrentUser().getId());
}
public List<ProjectDto> 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()));
}
}