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