package de.ph87.home.device; import de.ph87.home.property.PropertyNotFound; import de.ph87.home.property.PropertyNotWritable; import de.ph87.home.property.PropertyTypeMismatch; import jakarta.annotation.Nullable; import jakarta.servlet.http.HttpServletRequest; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import tuwien.auto.calimero.KNXFormatException; import java.util.List; @Slf4j @RestController @RequiredArgsConstructor @RequestMapping("Device") public class DeviceController { private final DeviceService deviceService; @NonNull @GetMapping("getByUuid/{id}") @ExceptionHandler(KNXFormatException.class) private DeviceDto getByUuid(@PathVariable final String id, @NonNull final HttpServletRequest request) { log.debug("getByUuid: path={}", request.getServletPath()); return deviceService.getByUuidDto(id); } @NonNull @RequestMapping(value = "list", method = {RequestMethod.GET, RequestMethod.POST}) private List list(@RequestBody(required = false) @Nullable final DeviceFilter filter, @NonNull final HttpServletRequest request) throws PropertyTypeMismatch { log.debug("list: path={} filter={}", request.getServletPath(), filter); return deviceService.list(filter); } @NonNull @GetMapping("get/{uuidOrSlug}") private DeviceDto get(@PathVariable @NonNull final String uuidOrSlug, @NonNull final HttpServletRequest request) { log.debug("get: path={}", request.getServletPath()); return deviceService.getByUuidOrSlugDto(uuidOrSlug); } @Nullable @GetMapping("getState/{uuidOrSlug}") private Boolean getState(@PathVariable @NonNull final String uuidOrSlug, @NonNull final HttpServletRequest request) throws PropertyTypeMismatch { log.debug("getState: path={}", request.getServletPath()); return deviceService.getByUuidOrSlugDto(uuidOrSlug).getStateValue(); } @GetMapping("setState/{uuidOrSlug}/{state}") private void setState(@PathVariable @NonNull final String uuidOrSlug, @PathVariable final boolean state, @NonNull final HttpServletRequest request) throws PropertyNotFound, PropertyNotWritable, PropertyTypeMismatch { log.debug("setState: path={}", request.getServletPath()); deviceService.setState(uuidOrSlug, state); } }