package refactor: electricity, consumption
This commit is contained in:
parent
b25b3377b8
commit
5ba7f3d4d6
16
src/main/java/de/ph87/data/common/DateTimeHelpers.java
Normal file
16
src/main/java/de/ph87/data/common/DateTimeHelpers.java
Normal file
@ -0,0 +1,16 @@
|
||||
package de.ph87.data.common;
|
||||
|
||||
import lombok.NonNull;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
public class DateTimeHelpers {
|
||||
|
||||
@NonNull
|
||||
public static ZonedDateTime ZDT(final long epochSeconds) {
|
||||
return ZonedDateTime.ofInstant(Instant.ofEpochSecond(epochSeconds), ZoneId.systemDefault());
|
||||
}
|
||||
|
||||
}
|
||||
@ -11,9 +11,9 @@ import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import static de.ph87.data.grid.GridReceiver.GRID_DELIVERY_SERIES_NAME;
|
||||
import static de.ph87.data.grid.GridReceiver.GRID_PURCHASE_SERIES_NAME;
|
||||
import static de.ph87.data.photovoltaic.PhotovoltaicMqttReceiver.PHOTOVOLTAIC_ENERGY_SERIES_NAME;
|
||||
import static de.ph87.data.electricity.grid.GridReceiver.GRID_DELIVERY_SERIES_NAME;
|
||||
import static de.ph87.data.electricity.grid.GridReceiver.GRID_PURCHASE_SERIES_NAME;
|
||||
import static de.ph87.data.electricity.photovoltaic.PhotovoltaicReceiver.PHOTOVOLTAIC_ENERGY_SERIES_NAME;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
package de.ph87.data.electricity;
|
||||
|
||||
public class ElectricityHelpers {
|
||||
|
||||
public static double energyToKWh(final double energy, final String energyUnit) {
|
||||
return switch (energyUnit) {
|
||||
case "mWh" -> energy / 1000000;
|
||||
case "Wh" -> energy / 1000;
|
||||
case "kWh" -> energy;
|
||||
case "MWh" -> energy * 1000;
|
||||
case "GWh" -> energy * 1000000;
|
||||
default -> throw new RuntimeException();
|
||||
};
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public static double powerToW(final double power, final String powerUnit) {
|
||||
return switch (powerUnit) {
|
||||
case "mW" -> power / 1000;
|
||||
case "W" -> power;
|
||||
case "kW" -> power * 1000;
|
||||
case "MW" -> power * 1000000;
|
||||
case "GW" -> power * 1000000000;
|
||||
default -> throw new RuntimeException();
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,11 +1,11 @@
|
||||
package de.ph87.data.grid;
|
||||
package de.ph87.data.electricity.grid;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
import static de.ph87.data.series.period.consumption.ConsumptionController.ZDT;
|
||||
import static de.ph87.data.common.DateTimeHelpers.ZDT;
|
||||
|
||||
@Getter
|
||||
@ToString
|
||||
@ -1,9 +1,9 @@
|
||||
package de.ph87.data.grid;
|
||||
package de.ph87.data.electricity.grid;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import de.ph87.data.mqtt.MqttEvent;
|
||||
import de.ph87.data.series.measure.MeasureEvent;
|
||||
import de.ph87.data.series.consumption.ConsumptionEvent;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -11,6 +11,8 @@ import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import static de.ph87.data.electricity.ElectricityHelpers.energyToKWh;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@ -39,33 +41,10 @@ public class GridReceiver {
|
||||
}
|
||||
|
||||
final double purchaseKWh = energyToKWh(inbound.purchaseWh, "Wh");
|
||||
applicationEventPublisher.publishEvent(new MeasureEvent(GRID_PURCHASE_SERIES_NAME, inbound.meter, inbound.date, purchaseKWh));
|
||||
applicationEventPublisher.publishEvent(new ConsumptionEvent(GRID_PURCHASE_SERIES_NAME, inbound.meter, inbound.date, purchaseKWh));
|
||||
|
||||
final double deliveryKWh = energyToKWh(inbound.deliveryWh, "Wh");
|
||||
applicationEventPublisher.publishEvent(new MeasureEvent(GRID_DELIVERY_SERIES_NAME, inbound.meter, inbound.date, deliveryKWh));
|
||||
}
|
||||
|
||||
public static double energyToKWh(final double energy, final String energyUnit) {
|
||||
return switch (energyUnit) {
|
||||
case "mWh" -> energy / 1000000;
|
||||
case "Wh" -> energy / 1000;
|
||||
case "kWh" -> energy;
|
||||
case "MWh" -> energy * 1000;
|
||||
case "GWh" -> energy * 1000000;
|
||||
default -> throw new RuntimeException();
|
||||
};
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public static double powerToW(final double power, final String powerUnit) {
|
||||
return switch (powerUnit) {
|
||||
case "mW" -> power / 1000;
|
||||
case "W" -> power;
|
||||
case "kW" -> power * 1000;
|
||||
case "MW" -> power * 1000000;
|
||||
case "GW" -> power * 1000000000;
|
||||
default -> throw new RuntimeException();
|
||||
};
|
||||
applicationEventPublisher.publishEvent(new ConsumptionEvent(GRID_DELIVERY_SERIES_NAME, inbound.meter, inbound.date, deliveryKWh));
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.data.photovoltaic;
|
||||
package de.ph87.data.electricity.photovoltaic;
|
||||
|
||||
import de.ph87.data.mqtt.MqttEvent;
|
||||
import de.ph87.data.series.measure.MeasureEvent;
|
||||
import de.ph87.data.series.consumption.ConsumptionEvent;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -13,12 +13,13 @@ import java.time.ZonedDateTime;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static de.ph87.data.series.period.consumption.ConsumptionController.ZDT;
|
||||
import static de.ph87.data.common.DateTimeHelpers.ZDT;
|
||||
import static de.ph87.data.electricity.ElectricityHelpers.energyToKWh;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class PhotovoltaicMqttReceiver {
|
||||
public class PhotovoltaicReceiver {
|
||||
|
||||
public static final String PHOTOVOLTAIC_ENERGY_SERIES_NAME = "photovoltaic.energyKWh";
|
||||
|
||||
@ -42,30 +43,7 @@ public class PhotovoltaicMqttReceiver {
|
||||
final double energy = Double.parseDouble(matcher.group("energy"));
|
||||
final String energyUnit = matcher.group("energyUnit");
|
||||
final double energyKWh = energyToKWh(energy, energyUnit);
|
||||
applicationEventPublisher.publishEvent(new MeasureEvent(PHOTOVOLTAIC_ENERGY_SERIES_NAME, serial, date, energyKWh));
|
||||
}
|
||||
|
||||
public static double energyToKWh(final double energy, final String energyUnit) {
|
||||
return switch (energyUnit) {
|
||||
case "mWh" -> energy / 1000000;
|
||||
case "Wh" -> energy / 1000;
|
||||
case "kWh" -> energy;
|
||||
case "MWh" -> energy * 1000;
|
||||
case "GWh" -> energy * 1000000;
|
||||
default -> throw new RuntimeException();
|
||||
};
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public static double powerToW(final double power, final String powerUnit) {
|
||||
return switch (powerUnit) {
|
||||
case "mW" -> power / 1000;
|
||||
case "W" -> power;
|
||||
case "kW" -> power * 1000;
|
||||
case "MW" -> power * 1000000;
|
||||
case "GW" -> power * 1000000000;
|
||||
default -> throw new RuntimeException();
|
||||
};
|
||||
applicationEventPublisher.publishEvent(new ConsumptionEvent(PHOTOVOLTAIC_ENERGY_SERIES_NAME, serial, date, energyKWh));
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package de.ph87.data.series;
|
||||
|
||||
import de.ph87.data.series.period.Period;
|
||||
import de.ph87.data.series.consumption.period.Period;
|
||||
import jakarta.annotation.Nullable;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.*;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package de.ph87.data.series;
|
||||
|
||||
import de.ph87.data.series.measure.MeasureEvent;
|
||||
import de.ph87.data.series.measure.MeasureEventTooOld;
|
||||
import de.ph87.data.series.period.PeriodService;
|
||||
import de.ph87.data.series.consumption.ConsumptionEvent;
|
||||
import de.ph87.data.series.consumption.ConsumptionEventTooOld;
|
||||
import de.ph87.data.series.consumption.period.PeriodService;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -22,9 +22,9 @@ public class SeriesService {
|
||||
|
||||
private final PeriodService periodService;
|
||||
|
||||
@EventListener(MeasureEvent.class)
|
||||
public void onMeasureEvent(@NonNull final MeasureEvent event) {
|
||||
log.debug("Handling MeasureEvent: {}", event);
|
||||
@EventListener(ConsumptionEvent.class)
|
||||
public void onConsumptionEvent(@NonNull final ConsumptionEvent event) {
|
||||
log.debug("Handling ConsumptionEvent: {}", event);
|
||||
final Optional<Series> seriesOptional = seriesRepository.findByNameOrAliasesContains(event.getName(), event.getName());
|
||||
if (seriesOptional.isEmpty()) {
|
||||
log.warn("No series found with name or alias: \"{}\"", event.getName());
|
||||
@ -34,8 +34,8 @@ public class SeriesService {
|
||||
final Series series = seriesOptional.get();
|
||||
log.debug("Series found: {}", series);
|
||||
try {
|
||||
periodService.onMeasureEvent(series, event);
|
||||
} catch (MeasureEventTooOld e) {
|
||||
periodService.onConsumptionEvent(series, event);
|
||||
} catch (ConsumptionEventTooOld e) {
|
||||
log.warn(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
package de.ph87.data.series.period.consumption;
|
||||
package de.ph87.data.series.consumption;
|
||||
|
||||
import de.ph87.data.series.period.Period;
|
||||
import de.ph87.data.series.period.consumption.unit.Unit;
|
||||
import de.ph87.data.series.consumption.period.Period;
|
||||
import de.ph87.data.series.consumption.unit.Unit;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
import static de.ph87.data.series.period.consumption.slice.SliceService.DL;
|
||||
import static de.ph87.data.series.consumption.slice.SliceService.DL;
|
||||
|
||||
@Entity
|
||||
@Getter
|
||||
@ -1,8 +1,9 @@
|
||||
package de.ph87.data.series.period.consumption;
|
||||
package de.ph87.data.series.consumption;
|
||||
|
||||
import de.ph87.data.series.period.consumption.slice.Slice;
|
||||
import de.ph87.data.series.period.consumption.slice.SliceService;
|
||||
import de.ph87.data.series.period.consumption.unit.Unit;
|
||||
import de.ph87.data.common.DateTimeHelpers;
|
||||
import de.ph87.data.series.consumption.slice.Slice;
|
||||
import de.ph87.data.series.consumption.slice.SliceService;
|
||||
import de.ph87.data.series.consumption.unit.Unit;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -10,8 +11,6 @@ import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.server.ResponseStatusException;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -53,7 +52,7 @@ public class ConsumptionController {
|
||||
@NonNull
|
||||
@GetMapping("{seriesId}/{unitName}/between/{beginEpochSeconds}/{endEpochSeconds}")
|
||||
public List<List<Number>> between(@PathVariable final long seriesId, @PathVariable final String unitName, @PathVariable final long beginEpochSeconds, @PathVariable final long endEpochSeconds) {
|
||||
return between(seriesId, Unit.valueOf(unitName), ZDT(beginEpochSeconds), ZDT(endEpochSeconds));
|
||||
return between(seriesId, Unit.valueOf(unitName), DateTimeHelpers.ZDT(beginEpochSeconds), DateTimeHelpers.ZDT(endEpochSeconds));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@ -78,9 +77,4 @@ public class ConsumptionController {
|
||||
return numbers;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static ZonedDateTime ZDT(final long epochSeconds) {
|
||||
return ZonedDateTime.ofInstant(Instant.ofEpochSecond(epochSeconds), ZoneId.systemDefault());
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package de.ph87.data.series.consumption;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
@Getter
|
||||
@ToString
|
||||
@RequiredArgsConstructor
|
||||
public class ConsumptionEvent {
|
||||
|
||||
@NonNull
|
||||
private final String name;
|
||||
|
||||
@NonNull
|
||||
private final String periodName;
|
||||
|
||||
@NonNull
|
||||
private final ZonedDateTime date;
|
||||
|
||||
private final double value;
|
||||
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package de.ph87.data.series.consumption;
|
||||
|
||||
import de.ph87.data.series.consumption.period.Period;
|
||||
import lombok.NonNull;
|
||||
|
||||
public class ConsumptionEventTooOld extends Exception {
|
||||
|
||||
public ConsumptionEventTooOld(@NonNull final Period period, @NonNull final ConsumptionEvent event) {
|
||||
super("Date of received Event older than last stored one: event=%s, period=%s".formatted(event, period));
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,8 +1,7 @@
|
||||
package de.ph87.data.series.period.consumption;
|
||||
package de.ph87.data.series.consumption;
|
||||
|
||||
import de.ph87.data.series.Series;
|
||||
import de.ph87.data.series.period.Period;
|
||||
import de.ph87.data.series.period.consumption.unit.Unit;
|
||||
import de.ph87.data.series.consumption.period.Period;
|
||||
import de.ph87.data.series.consumption.unit.Unit;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
@ -20,6 +19,4 @@ public interface ConsumptionRepository extends CrudRepository<Consumption, Consu
|
||||
|
||||
List<Consumption> findAllByIdPeriodAndIdUnitAndIdAlignedGreaterThanEqualAndIdAlignedLessThanEqualOrderByIdAlignedAsc(@NonNull Period period, @NonNull Unit unit, @NonNull ZonedDateTime begin, @NonNull ZonedDateTime end);
|
||||
|
||||
void deleteAllByIdPeriodSeries(Series oil);
|
||||
|
||||
}
|
||||
@ -1,8 +1,7 @@
|
||||
package de.ph87.data.series.period.consumption;
|
||||
package de.ph87.data.series.consumption;
|
||||
|
||||
import de.ph87.data.series.measure.MeasureEvent;
|
||||
import de.ph87.data.series.period.Period;
|
||||
import de.ph87.data.series.period.consumption.unit.Unit;
|
||||
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;
|
||||
@ -20,7 +19,7 @@ public class ConsumptionService {
|
||||
|
||||
private final ConsumptionRepository consumptionRepository;
|
||||
|
||||
public void onMeasureEvent(@NonNull final Period period, @NonNull final MeasureEvent event) {
|
||||
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);
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.data.series.period;
|
||||
package de.ph87.data.series.consumption.period;
|
||||
|
||||
import de.ph87.data.series.Series;
|
||||
import de.ph87.data.series.measure.MeasureEvent;
|
||||
import de.ph87.data.series.consumption.ConsumptionEvent;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.*;
|
||||
|
||||
@ -47,7 +47,7 @@ public class Period {
|
||||
@Column(nullable = false)
|
||||
private double lastValue;
|
||||
|
||||
public Period(@NonNull final Series series, @NonNull final MeasureEvent event) {
|
||||
public Period(@NonNull final Series series, @NonNull final ConsumptionEvent event) {
|
||||
this.series = series;
|
||||
this.name = event.getPeriodName();
|
||||
this.firstDate = event.getDate();
|
||||
@ -1,6 +1,5 @@
|
||||
package de.ph87.data.series.period;
|
||||
package de.ph87.data.series.consumption.period;
|
||||
|
||||
import de.ph87.data.series.Series;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
@ -11,6 +10,4 @@ public interface PeriodRepository extends CrudRepository<Period, Long> {
|
||||
|
||||
List<Period> findAllBySeriesIdAndLastDateGreaterThanAndFirstDateLessThan(long seriesId, @NonNull ZonedDateTime wantedEnd, @NonNull ZonedDateTime wantedBegin);
|
||||
|
||||
void deleteAllBySeries(Series oil);
|
||||
|
||||
}
|
||||
@ -1,10 +1,10 @@
|
||||
package de.ph87.data.series.period;
|
||||
package de.ph87.data.series.consumption.period;
|
||||
|
||||
import de.ph87.data.series.Series;
|
||||
import de.ph87.data.series.SeriesMode;
|
||||
import de.ph87.data.series.measure.MeasureEvent;
|
||||
import de.ph87.data.series.measure.MeasureEventTooOld;
|
||||
import de.ph87.data.series.period.consumption.ConsumptionService;
|
||||
import de.ph87.data.series.consumption.ConsumptionEvent;
|
||||
import de.ph87.data.series.consumption.ConsumptionEventTooOld;
|
||||
import de.ph87.data.series.consumption.ConsumptionService;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -21,19 +21,19 @@ public class PeriodService {
|
||||
|
||||
private final ConsumptionService consumptionService;
|
||||
|
||||
public void onMeasureEvent(@NonNull final Series series, @NonNull final MeasureEvent event) throws MeasureEventTooOld {
|
||||
public void onConsumptionEvent(@NonNull final Series series, @NonNull final ConsumptionEvent event) throws ConsumptionEventTooOld {
|
||||
final Period period = getOrCreatePeriod(series, event);
|
||||
period.setLastDate(event.getDate());
|
||||
period.setLastValue(event.getValue());
|
||||
consumptionService.onMeasureEvent(period, event);
|
||||
consumptionService.onConsumptionEvent(period, event);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private Period getOrCreatePeriod(@NonNull final Series series, @NonNull final MeasureEvent event) throws MeasureEventTooOld {
|
||||
private Period getOrCreatePeriod(@NonNull final Series series, @NonNull final ConsumptionEvent event) throws ConsumptionEventTooOld {
|
||||
if (series.getPeriod() != null) {
|
||||
log.debug("Last Period exists: {}", series.getPeriod());
|
||||
if (isEventTooOld(series.getPeriod(), event)) {
|
||||
throw new MeasureEventTooOld(series.getPeriod(), event);
|
||||
throw new ConsumptionEventTooOld(series.getPeriod(), event);
|
||||
}
|
||||
if (isPeriodValid(series.getPeriod(), event)) {
|
||||
log.debug("Last Period still VALID.");
|
||||
@ -49,11 +49,11 @@ public class PeriodService {
|
||||
return newPeriod;
|
||||
}
|
||||
|
||||
private static boolean isEventTooOld(@NonNull final Period period, @NonNull final MeasureEvent event) {
|
||||
private static boolean isEventTooOld(@NonNull final Period period, @NonNull final ConsumptionEvent event) {
|
||||
return !period.getLastDate().isBefore(event.getDate());
|
||||
}
|
||||
|
||||
private boolean isPeriodValid(@NonNull final Period period, @NonNull final MeasureEvent event) {
|
||||
private boolean isPeriodValid(@NonNull final Period period, @NonNull final ConsumptionEvent event) {
|
||||
if (!period.getName().equals(event.getPeriodName())) {
|
||||
log.debug("Period name changed: old={}, new={}", period.getName(), event.getPeriodName());
|
||||
return false;
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.data.series.period.consumption.slice;
|
||||
package de.ph87.data.series.consumption.slice;
|
||||
|
||||
import de.ph87.data.series.period.consumption.Consumption;
|
||||
import de.ph87.data.series.period.consumption.unit.Unit;
|
||||
import de.ph87.data.series.consumption.Consumption;
|
||||
import de.ph87.data.series.consumption.unit.Unit;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.Setter;
|
||||
@ -1,10 +1,10 @@
|
||||
package de.ph87.data.series.period.consumption.slice;
|
||||
package de.ph87.data.series.consumption.slice;
|
||||
|
||||
import de.ph87.data.series.period.Period;
|
||||
import de.ph87.data.series.period.PeriodRepository;
|
||||
import de.ph87.data.series.period.consumption.Consumption;
|
||||
import de.ph87.data.series.period.consumption.ConsumptionRepository;
|
||||
import de.ph87.data.series.period.consumption.unit.Unit;
|
||||
import de.ph87.data.series.consumption.Consumption;
|
||||
import de.ph87.data.series.consumption.ConsumptionRepository;
|
||||
import de.ph87.data.series.consumption.period.Period;
|
||||
import de.ph87.data.series.consumption.period.PeriodRepository;
|
||||
import de.ph87.data.series.consumption.unit.Unit;
|
||||
import jakarta.annotation.Nullable;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -1,4 +1,4 @@
|
||||
package de.ph87.data.series.period.consumption.unit;
|
||||
package de.ph87.data.series.consumption.unit;
|
||||
|
||||
import lombok.NonNull;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package de.ph87.data.series.period.consumption.unit;
|
||||
package de.ph87.data.series.consumption.unit;
|
||||
|
||||
import jakarta.persistence.AttributeConverter;
|
||||
import jakarta.persistence.Converter;
|
||||
@ -15,9 +15,6 @@ public class MeasureEvent {
|
||||
@NonNull
|
||||
private final String name;
|
||||
|
||||
@NonNull
|
||||
private final String periodName;
|
||||
|
||||
@NonNull
|
||||
private final ZonedDateTime date;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user