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

39 lines
1.4 KiB
Java

package de.ph87.data.series.consumption;
import de.ph87.data.series.consumption.period.Period;
import de.ph87.data.series.consumption.unit.Unit;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.ZonedDateTime;
import java.util.Optional;
@Slf4j
@Service
@Transactional
@RequiredArgsConstructor
public class ConsumptionService {
private final ConsumptionRepository consumptionRepository;
public void onConsumptionEvent(@NonNull final Period period, @NonNull final ConsumptionEvent event) {
for (final Unit unit : Unit.values()) {
final ZonedDateTime aligned = unit.align(event.getDate());
final Optional<Consumption> existingOptional = consumptionRepository.findByIdPeriodAndIdUnitAndIdAligned(period, unit, aligned);
if (existingOptional.isPresent()) {
final Consumption existing = existingOptional.get();
existing.setLastDate(event.getDate());
existing.setLastValue(event.getValue());
log.debug("Existing Consumption updated: {}", existing);
} else {
final Consumption created = consumptionRepository.save(new Consumption(period, unit, aligned, event.getDate(), event.getValue()));
log.debug("New Consumption created: created={}", created);
}
}
}
}