63 lines
1.6 KiB
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;
|
|
});
|
|
}
|
|
|
|
}
|