Series: publishing (STATE) CHANGE
This commit is contained in:
parent
a0d15b1aa4
commit
7f39ee6c41
@ -1,5 +1,5 @@
|
|||||||
package de.ph87.data;
|
package de.ph87.data;
|
||||||
|
|
||||||
public enum Action {
|
public enum Action {
|
||||||
CREATED, CHANGED, DELETED
|
CREATED, CHANGED, STATE, DELETED
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package de.ph87.data.series;
|
|||||||
import de.ph87.data.*;
|
import de.ph87.data.*;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import lombok.extern.slf4j.*;
|
import lombok.extern.slf4j.*;
|
||||||
|
import org.springframework.context.*;
|
||||||
import org.springframework.stereotype.*;
|
import org.springframework.stereotype.*;
|
||||||
import org.springframework.transaction.annotation.*;
|
import org.springframework.transaction.annotation.*;
|
||||||
|
|
||||||
@ -16,6 +17,8 @@ public class SeriesService {
|
|||||||
|
|
||||||
private final SeriesRepository seriesRepository;
|
private final SeriesRepository seriesRepository;
|
||||||
|
|
||||||
|
private final ApplicationEventPublisher applicationEventPublisher;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public SeriesDto modify(final long id, @NonNull final Consumer<Series> modifier) {
|
public SeriesDto modify(final long id, @NonNull final Consumer<Series> modifier) {
|
||||||
final Series series = getById(id);
|
final Series series = getById(id);
|
||||||
@ -43,7 +46,12 @@ public class SeriesService {
|
|||||||
@NonNull
|
@NonNull
|
||||||
private SeriesDto publish(@NonNull final Series series, @NonNull final Action action) {
|
private SeriesDto publish(@NonNull final Series series, @NonNull final Action action) {
|
||||||
final SeriesDto dto = toDto(series);
|
final SeriesDto dto = toDto(series);
|
||||||
|
if (action == Action.STATE) {
|
||||||
|
log.debug("Series {}: {}", action, series);
|
||||||
|
} else {
|
||||||
log.info("Series {}: {}", action, series);
|
log.info("Series {}: {}", action, series);
|
||||||
|
}
|
||||||
|
applicationEventPublisher.publishEvent(dto);
|
||||||
return dto;
|
return dto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +61,7 @@ public class SeriesService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public Series getOrCreate(@NonNull final SeriesInbound inbound, @NonNull final SeriesType type) {
|
public <R> R onInbound(@NonNull final SeriesInbound inbound, @NonNull final SeriesType type, @NonNull final Function<Series, R> mapper) {
|
||||||
final Series series = seriesRepository
|
final Series series = seriesRepository
|
||||||
.findByName(inbound.getName())
|
.findByName(inbound.getName())
|
||||||
.orElseGet(() -> {
|
.orElseGet(() -> {
|
||||||
@ -65,7 +73,9 @@ public class SeriesService {
|
|||||||
log.warn("Existing Series type does not match requested type: requested={}, series={}", type, series);
|
log.warn("Existing Series type does not match requested type: requested={}, series={}", type, series);
|
||||||
}
|
}
|
||||||
series.update(inbound);
|
series.update(inbound);
|
||||||
return series;
|
final R result = mapper.apply(series);
|
||||||
|
publish(series, Action.STATE);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import org.springframework.stereotype.*;
|
|||||||
import org.springframework.transaction.annotation.*;
|
import org.springframework.transaction.annotation.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.*;
|
||||||
import java.util.stream.*;
|
import java.util.stream.*;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -40,9 +41,8 @@ public class MeterService {
|
|||||||
private final MeterYearRepository meterYearRepository;
|
private final MeterYearRepository meterYearRepository;
|
||||||
|
|
||||||
@EventListener(MeterInbound.class)
|
@EventListener(MeterInbound.class)
|
||||||
public void onEvent(@NonNull final MeterInbound inbound) {
|
public void onInbound(@NonNull final MeterInbound inbound) {
|
||||||
final Meter meter = getOrCreate(inbound);
|
onInbound(inbound, meter -> {
|
||||||
|
|
||||||
final MeterValue.Id five = new MeterValue.Id(meter, inbound.date, Alignment.FIVE);
|
final MeterValue.Id five = new MeterValue.Id(meter, inbound.date, Alignment.FIVE);
|
||||||
meterFiveRepository.findById(five).ifPresentOrElse(existing -> existing.update(inbound.value), () -> meterFiveRepository.save(new MeterFive(five, inbound.value)));
|
meterFiveRepository.findById(five).ifPresentOrElse(existing -> existing.update(inbound.value), () -> meterFiveRepository.save(new MeterFive(five, inbound.value)));
|
||||||
|
|
||||||
@ -60,11 +60,17 @@ public class MeterService {
|
|||||||
|
|
||||||
final MeterValue.Id year = new MeterValue.Id(meter, inbound.date, Alignment.YEAR);
|
final MeterValue.Id year = new MeterValue.Id(meter, inbound.date, Alignment.YEAR);
|
||||||
meterYearRepository.findById(year).ifPresentOrElse(existing -> existing.update(inbound.value), () -> meterYearRepository.save(new MeterYear(year, inbound.value)));
|
meterYearRepository.findById(year).ifPresentOrElse(existing -> existing.update(inbound.value), () -> meterYearRepository.save(new MeterYear(year, inbound.value)));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private Meter getOrCreate(@NonNull final MeterInbound inbound) {
|
private void onInbound(@NonNull final MeterInbound inbound, @NonNull final Consumer<Meter> modifier) {
|
||||||
final Series series = seriesService.getOrCreate(inbound, SeriesType.METER);
|
final Meter meter = seriesService.onInbound(inbound, SeriesType.METER, series -> onInbound(series, inbound));
|
||||||
|
modifier.accept(meter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private Meter onInbound(@NonNull final Series series, @NonNull final MeterInbound inbound) {
|
||||||
return meterRepository.findFirstBySeriesOrderByDateDesc(series)
|
return meterRepository.findFirstBySeriesOrderByDateDesc(series)
|
||||||
.filter(m -> m.getNumber().equals(inbound.meterNumber))
|
.filter(m -> m.getNumber().equals(inbound.meterNumber))
|
||||||
.stream()
|
.stream()
|
||||||
|
|||||||
@ -37,9 +37,12 @@ public class VaryingService {
|
|||||||
private final VaryingYearRepository varyingYearRepository;
|
private final VaryingYearRepository varyingYearRepository;
|
||||||
|
|
||||||
@EventListener(VaryingInbound.class)
|
@EventListener(VaryingInbound.class)
|
||||||
public void onEvent(@NonNull final VaryingInbound inbound) {
|
public void onInbound(@NonNull final VaryingInbound inbound) {
|
||||||
final Series series = seriesService.getOrCreate(inbound, SeriesType.VARYING);
|
seriesService.onInbound(inbound, SeriesType.VARYING, series -> onInbound(series, inbound));
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private Series onInbound(@NonNull final Series series, @NonNull final VaryingInbound inbound) {
|
||||||
final Varying.Id five = new Varying.Id(series, inbound.date, Alignment.FIVE);
|
final Varying.Id five = new Varying.Id(series, inbound.date, Alignment.FIVE);
|
||||||
varyingFiveRepository.findById(five).ifPresentOrElse(existing -> existing.update(inbound.value), () -> varyingFiveRepository.save(new VaryingFive(five, inbound.value)));
|
varyingFiveRepository.findById(five).ifPresentOrElse(existing -> existing.update(inbound.value), () -> varyingFiveRepository.save(new VaryingFive(five, inbound.value)));
|
||||||
|
|
||||||
@ -57,6 +60,8 @@ public class VaryingService {
|
|||||||
|
|
||||||
final Varying.Id year = new Varying.Id(series, inbound.date, Alignment.YEAR);
|
final Varying.Id year = new Varying.Id(series, inbound.date, Alignment.YEAR);
|
||||||
varyingYearRepository.findById(year).ifPresentOrElse(existing -> existing.update(inbound.value), () -> varyingYearRepository.save(new VaryingYear(year, inbound.value)));
|
varyingYearRepository.findById(year).ifPresentOrElse(existing -> existing.update(inbound.value), () -> varyingYearRepository.save(new VaryingYear(year, inbound.value)));
|
||||||
|
|
||||||
|
return series;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user