From 1acd5506c6c9dc015827780bab68bc2fb0c5a0f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Mon, 18 Nov 2024 13:27:40 +0100 Subject: [PATCH] property/get/{id}/value --- .../homeautomation/channel/ChannelReader.java | 12 ++++++------ .../property/PropertyController.java | 15 ++++++--------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/ph87/homeautomation/channel/ChannelReader.java b/src/main/java/de/ph87/homeautomation/channel/ChannelReader.java index 0241143..7b2bbcf 100644 --- a/src/main/java/de/ph87/homeautomation/channel/ChannelReader.java +++ b/src/main/java/de/ph87/homeautomation/channel/ChannelReader.java @@ -2,6 +2,7 @@ package de.ph87.homeautomation.channel; import de.ph87.homeautomation.property.Property; import de.ph87.homeautomation.shared.Helpers; +import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -29,12 +30,11 @@ public class ChannelReader { return findByChannel(channel).orElseThrow(RuntimeException::new); } - public Double read(final Property property) { - final Channel channel = property.getReadChannel(); - if (channel == null) { - return null; - } - return getByChannel(channel).read(property.getReadChannel().getId()); + @NonNull + public Optional read(@NonNull final Property property) { + return Optional.ofNullable(property.getReadChannel()) + .map(this::getByChannel) + .map(owner -> owner.read(property.getReadChannel().getId())); } public ChannelDto toDtoAllowNull(final Channel channel) { diff --git a/src/main/java/de/ph87/homeautomation/property/PropertyController.java b/src/main/java/de/ph87/homeautomation/property/PropertyController.java index 6f55c38..de13709 100644 --- a/src/main/java/de/ph87/homeautomation/property/PropertyController.java +++ b/src/main/java/de/ph87/homeautomation/property/PropertyController.java @@ -44,6 +44,11 @@ public class PropertyController implements ISearchController { return propertyWriter.set(id, Property::setSlug, value == null || value.isEmpty() ? null : value); } + @PostMapping("get/{id}/value") + public Double getValue(@PathVariable final long id) { + return channelReader.read(propertyReader.getById(id)).orElse(null); + } + @PostMapping("set/{id}/value") public PropertyDto setValue(@PathVariable final long id, @RequestBody final double value) { return propertyWriter.set(id, propertyWriter::writeToChannel, value); @@ -66,18 +71,10 @@ public class PropertyController implements ISearchController { @PostMapping("toggle/{id}") public PropertyDto setValue(@PathVariable final long id) { - final boolean oldState = getOldStateBoolean(id, false); + final boolean oldState = channelReader.read(propertyReader.getById(id)).map(v -> v > 0.0).orElse(false); return propertyWriter.set(id, propertyWriter::writeToChannel, oldState ? 0.0 : 1.0); } - private boolean getOldStateBoolean(final long id, final boolean orElse) { - final Double oldValue = channelReader.read(propertyReader.getById(id)); - if (oldValue == null || oldValue.isNaN()) { - return orElse; - } - return oldValue > 0.0; - } - @Override @GetMapping("searchById/{id}") public SearchResult searchById(@PathVariable final long id) {