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

41 lines
1.4 KiB
Java

package de.ph87.data.series;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.ZonedDateTime;
import java.util.List;
@Slf4j
@Service
@Transactional
@RequiredArgsConstructor
public class SeriesService {
private final SeriesRepository seriesRepository;
private final ApplicationEventPublisher applicationEventPublisher;
@NonNull
public Series getOrCreateByName(@NonNull final String name, @NonNull final SeriesMode mode, @NonNull final ZonedDateTime date, final double value, @NonNull final String unit) {
final Series series = seriesRepository.findByNameOrAliasesContains(name, name).orElseGet(() -> seriesRepository.save(new Series(name, mode, date, value, unit)));
if (series.getMode() != mode) {
throw new RuntimeException("'mode' argument for getOrCreateByName does not match 'mode' of existing Series: mode=%s, series=%s".formatted(mode, series));
}
series.update(date, value);
final SeriesDto dto = new SeriesDto(series);
applicationEventPublisher.publishEvent(dto);
return series;
}
@NonNull
public List<SeriesDto> findAllDto() {
return seriesRepository.findAll().stream().map(SeriesDto::new).toList();
}
}