package de.ph87.data.message.handler; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import de.ph87.data.message.IMessageHandler; import de.ph87.data.message.Message; import de.ph87.data.series.SeriesInbound; import de.ph87.data.series.SeriesService; import de.ph87.data.unit.Unit; import lombok.Getter; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.ToString; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; @Slf4j @Service @RequiredArgsConstructor public class SimpleJsonHandler implements IMessageHandler { private final ObjectMapper objectMapper; private final SeriesService seriesService; @Override public void handle(@NonNull final Message message) { try { final Inbound inbound = objectMapper.readValue(message.payload, Inbound.class); seriesService.receive(new SeriesInbound(message.topic, inbound.date, inbound.value, inbound.unit)); } catch (JsonProcessingException e) { log.debug("Failed to parse inbound message: topic={}, message={}, error={}", message.topic, message, e.toString()); } } @Getter @ToString private static class Inbound { public final ZonedDateTime date; public final double value; public final Unit unit; public Inbound(final long timestamp, final double value, final Unit unit) { this.date = ZonedDateTime.ofInstant(Instant.ofEpochSecond(timestamp), ZoneId.systemDefault()); this.value = value; this.unit = unit; } } }