41 lines
1.4 KiB
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();
|
|
}
|
|
|
|
}
|