ProjectCommandService.java

package de.mirkosertic.powerstaff.project.command;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BeanPropertyBindingResult;

import java.util.Optional;

@Service
@Transactional
public class ProjectCommandService {

    private final ProjectRepository projectRepository;
    private final ProjectValidator projectValidator;

    public ProjectCommandService(final ProjectRepository projectRepository,
                                 final ProjectValidator projectValidator) {
        this.projectRepository = projectRepository;
        this.projectValidator = projectValidator;
    }

    public Project save(final Project project) {
        final var errors = new BeanPropertyBindingResult(project, "project");
        projectValidator.validate(project, errors);
        if (errors.hasErrors()) {
            throw new BothFKsException();
        }
        return projectRepository.save(project);
    }

    @Transactional(readOnly = true)
    public Optional<Project> findById(final long id) {
        return projectRepository.findById(id);
    }

    public void deleteById(final long id) {
        projectRepository.deleteById(id);
    }
}