package de.ph87.data.series; import de.ph87.data.*; import de.ph87.data.unit.*; import lombok.*; import lombok.extern.slf4j.*; import org.springframework.stereotype.*; import org.springframework.transaction.annotation.*; import java.util.function.*; @Slf4j @Service @Transactional @RequiredArgsConstructor public class SeriesService { private final SeriesRepository seriesRepository; @SuppressWarnings("unused") public SeriesDto modify(final long id, @NonNull final Consumer modifier) { final Series series = getById(id); modifier.accept(series); return publish(series, Action.CHANGED); } @SuppressWarnings("unused") public void delete(final long id) { final Series series = getById(id); seriesRepository.delete(series); publish(series, Action.DELETED); } private Series getById(final long id) { return seriesRepository.findById(id).orElseThrow(); } public SeriesDto getDtoById(final long id) { return toDto(getById(id)); } private SeriesDto publish(@NonNull final Series series, @NonNull final Action action) { final SeriesDto dto = toDto(series); log.info("Series {}: {}", action, series); return dto; } private SeriesDto toDto(@NonNull final Series series) { return new SeriesDto(series); } public Series getOrCreate(@NonNull final String name, @NonNull final Unit unit) { return seriesRepository .findByName(name) .orElseGet(() -> { final Series series = seriesRepository.save(new Series(name, unit)); publish(series, Action.CREATED); return series; }); } }