Data/src/main/java/de/ph87/data/series/SeriesService.java

63 lines
1.6 KiB
Java

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<Series> 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;
});
}
}