From 570981d5ac0d7858f6e7c7dda35591db6a0ddd21 Mon Sep 17 00:00:00 2001 From: Swordsteel Date: Mon, 18 Aug 2025 10:17:50 +0200 Subject: [PATCH] add nodes list - add NodeController - add getNodes to DeviceRegistryService - add WebClient deviceRegistryNodes to DeviceRegisterWebClientCalls.kt - add node list.html - add node to main menu and cleanup in layout.html - add node to AdminPaths.kt --- .../ltd/hlaeja/controller/NodeController.kt | 37 ++++++++++++ .../hlaeja/security/authorize/AdminPaths.kt | 1 + .../hlaeja/service/DeviceRegistryService.kt | 7 +++ .../util/DeviceRegisterWebClientCalls.kt | 10 ++++ src/main/resources/templates/layout.html | 7 ++- src/main/resources/templates/node/list.html | 57 +++++++++++++++++++ 6 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/ltd/hlaeja/controller/NodeController.kt create mode 100644 src/main/resources/templates/node/list.html diff --git a/src/main/kotlin/ltd/hlaeja/controller/NodeController.kt b/src/main/kotlin/ltd/hlaeja/controller/NodeController.kt new file mode 100644 index 0000000..49f8cbb --- /dev/null +++ b/src/main/kotlin/ltd/hlaeja/controller/NodeController.kt @@ -0,0 +1,37 @@ +package ltd.hlaeja.controller + +import jakarta.validation.constraints.Max +import jakarta.validation.constraints.Min +import ltd.hlaeja.service.DeviceRegistryService +import ltd.hlaeja.util.Pagination +import ltd.hlaeja.util.Pagination.Companion.DEFAULT_PAGE +import ltd.hlaeja.util.Pagination.Companion.DEFAULT_SIZE +import ltd.hlaeja.util.Pagination.Companion.MAX +import ltd.hlaeja.util.Pagination.Companion.MIN +import org.springframework.stereotype.Controller +import org.springframework.ui.Model +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable +import reactor.core.publisher.Mono + +@Controller +class NodeController( + private val deviceRegistryService: DeviceRegistryService, +) { + @GetMapping( + "/node", + "/node/page-{page}", + "/node/page-{page}/show-{show}", + ) + fun getNodes( + @PathVariable(required = false) @Min(MIN) page: Int = DEFAULT_PAGE, + @PathVariable(required = false) @Min(MIN) @Max(MAX) show: Int = DEFAULT_SIZE, + model: Model, + ) = deviceRegistryService.getNodes(page, show) + .collectList() + .doOnNext { items -> + model.addAttribute("items", items) + model.addAttribute("pagination", Pagination(page, show, items.size, DEFAULT_SIZE)) + } + .then(Mono.just("node/list")) +} diff --git a/src/main/kotlin/ltd/hlaeja/security/authorize/AdminPaths.kt b/src/main/kotlin/ltd/hlaeja/security/authorize/AdminPaths.kt index cdcc88b..ac1c188 100644 --- a/src/main/kotlin/ltd/hlaeja/security/authorize/AdminPaths.kt +++ b/src/main/kotlin/ltd/hlaeja/security/authorize/AdminPaths.kt @@ -6,4 +6,5 @@ fun AuthorizeExchangeSpec.adminPaths(): AuthorizeExchangeSpec.Access = pathMatch "/account/**", "/type/**", "/device/**", + "/node/**", ) diff --git a/src/main/kotlin/ltd/hlaeja/service/DeviceRegistryService.kt b/src/main/kotlin/ltd/hlaeja/service/DeviceRegistryService.kt index f6286de..4cc2540 100644 --- a/src/main/kotlin/ltd/hlaeja/service/DeviceRegistryService.kt +++ b/src/main/kotlin/ltd/hlaeja/service/DeviceRegistryService.kt @@ -2,10 +2,12 @@ package ltd.hlaeja.service import java.util.UUID import ltd.hlaeja.library.deviceRegistry.Devices +import ltd.hlaeja.library.deviceRegistry.Nodes import ltd.hlaeja.library.deviceRegistry.Type import ltd.hlaeja.library.deviceRegistry.Types import ltd.hlaeja.property.DeviceRegistryProperty import ltd.hlaeja.util.deviceRegistryDevices +import ltd.hlaeja.util.deviceRegistryNodes import ltd.hlaeja.util.deviceRegistryType import ltd.hlaeja.util.deviceRegistryTypes import ltd.hlaeja.util.deviceRegistryTypesCreate @@ -48,4 +50,9 @@ class DeviceRegistryService( page: Int, show: Int, ): Flux = webClient.deviceRegistryDevices(page, show, property) + + fun getNodes( + page: Int, + show: Int, + ): Flux = webClient.deviceRegistryNodes(page, show, property) } diff --git a/src/main/kotlin/ltd/hlaeja/util/DeviceRegisterWebClientCalls.kt b/src/main/kotlin/ltd/hlaeja/util/DeviceRegisterWebClientCalls.kt index 4599cd2..98f9f42 100644 --- a/src/main/kotlin/ltd/hlaeja/util/DeviceRegisterWebClientCalls.kt +++ b/src/main/kotlin/ltd/hlaeja/util/DeviceRegisterWebClientCalls.kt @@ -6,6 +6,7 @@ import ltd.hlaeja.exception.NoChangeException import ltd.hlaeja.exception.NotFoundException import ltd.hlaeja.exception.TypeNameDuplicateException import ltd.hlaeja.library.deviceRegistry.Devices +import ltd.hlaeja.library.deviceRegistry.Nodes import ltd.hlaeja.library.deviceRegistry.Type import ltd.hlaeja.library.deviceRegistry.Types import ltd.hlaeja.property.DeviceRegistryProperty @@ -69,3 +70,12 @@ fun WebClient.deviceRegistryDevices( .uri("${property.url}/devices/page-$page/show-$size".also(::logCall)) .retrieve() .bodyToFlux(Devices.Response::class.java) + +fun WebClient.deviceRegistryNodes( + page: Int, + size: Int, + property: DeviceRegistryProperty, +): Flux = get() + .uri("${property.url}/nodes/page-$page/show-$size".also(::logCall)) + .retrieve() + .bodyToFlux(Nodes.Response::class.java) diff --git a/src/main/resources/templates/layout.html b/src/main/resources/templates/layout.html index 3fbf822..c6ed573 100644 --- a/src/main/resources/templates/layout.html +++ b/src/main/resources/templates/layout.html @@ -33,13 +33,14 @@