From f1222dc41078ee462993cbd10248b8bccdbca13f Mon Sep 17 00:00:00 2001 From: Jan Date: Sun, 7 Dec 2025 20:41:27 +0100 Subject: [PATCH] Add `CalculationDumps` component and API controller for dump management in Config page --- .../src/components/UI/JsonTreeViewer.vue | 7 +- .../src/components/layout/config/Apps.vue | 2 - .../layout/config/CalculationDumps.vue | 146 ++++++++++++++++++ .../components/layout/dev/CalculationDump.vue | 2 +- .../layout/dev/CalculationDumpList.vue | 3 +- src/frontend/src/pages/Config.vue | 3 +- src/frontend/src/router.js | 3 +- .../CalculationDumpController.java | 40 +++++ .../lcc/controller/dev/DevController.java | 26 +--- 9 files changed, 197 insertions(+), 35 deletions(-) create mode 100644 src/frontend/src/components/layout/config/CalculationDumps.vue create mode 100644 src/main/java/de/avatic/lcc/controller/configuration/CalculationDumpController.java diff --git a/src/frontend/src/components/UI/JsonTreeViewer.vue b/src/frontend/src/components/UI/JsonTreeViewer.vue index 77e614a..36a3194 100644 --- a/src/frontend/src/components/UI/JsonTreeViewer.vue +++ b/src/frontend/src/components/UI/JsonTreeViewer.vue @@ -66,13 +66,10 @@ export default { \ No newline at end of file diff --git a/src/frontend/src/components/layout/dev/CalculationDump.vue b/src/frontend/src/components/layout/dev/CalculationDump.vue index f37b010..1a7318b 100644 --- a/src/frontend/src/components/layout/dev/CalculationDump.vue +++ b/src/frontend/src/components/layout/dev/CalculationDump.vue @@ -35,7 +35,7 @@ export default { components: {Box, BasicButton, ToggleSwitch, JsonTreeViewer}, async created() { - const resp = await performRequest(null, "GET", `${config.backendUrl}/dev/dump/${this.$route.params.id}`, null); + const resp = await performRequest(null, "GET", `${config.backendUrl}/dumps/dump/${this.$route.params.id}`, null); this.dump = resp.data; }, diff --git a/src/frontend/src/components/layout/dev/CalculationDumpList.vue b/src/frontend/src/components/layout/dev/CalculationDumpList.vue index 43c03ef..2fa110c 100644 --- a/src/frontend/src/components/layout/dev/CalculationDumpList.vue +++ b/src/frontend/src/components/layout/dev/CalculationDumpList.vue @@ -36,7 +36,7 @@ export default { if(query?.pageSize) params.append('limit', query.pageSize); - const resp = await performRequest(null, "GET", `${config.backendUrl}/dev/dump/${params.size === 0 ? '' : '?'}${params.toString()}`, null); + const resp = await performRequest(null, "GET", `${config.backendUrl}/dumps/dump/${params.size === 0 ? '' : '?'}${params.toString()}`, null); this.dump = resp.data; this.pagination = { page: parseInt(resp.headers.get('X-Current-Page')), pageCount: parseInt(resp.headers.get('X-Page-Count')), totalCount: parseInt(resp.headers.get('X-Total-Count'))}; @@ -92,4 +92,5 @@ export default { \ No newline at end of file diff --git a/src/frontend/src/pages/Config.vue b/src/frontend/src/pages/Config.vue index b1f175c..ff781c9 100644 --- a/src/frontend/src/pages/Config.vue +++ b/src/frontend/src/pages/Config.vue @@ -30,6 +30,7 @@ import {useActiveUserStore} from "@/store/activeuser.js"; import Apps from "@/components/layout/config/Apps.vue"; import Users from "@/components/layout/config/Users.vue"; import CalculationDumpList from "@/components/layout/dev/CalculationDumpList.vue"; +import CalculationDumps from "@/components/layout/config/CalculationDumps.vue"; export default { name: "Config", @@ -59,7 +60,7 @@ export default { }, calculationDump: { title: 'Calculation dump', - component: markRaw(CalculationDumpList), + component: markRaw(CalculationDumps), props: {isSelected: false}, }, materialsTab: { diff --git a/src/frontend/src/router.js b/src/frontend/src/router.js index 1c227e9..e914dcd 100644 --- a/src/frontend/src/router.js +++ b/src/frontend/src/router.js @@ -109,6 +109,7 @@ const router = createRouter({ }, { path: '/config', + name: 'config', component: Config, beforeEnter: async (to, from) => { const userStore = useActiveUserStore(); @@ -121,7 +122,7 @@ const router = createRouter({ }, }, { - path: '/dev/dump/:id', + path: '/dumps/dump/:id', component: CalculationDump, name: 'dev-calculation-dump' diff --git a/src/main/java/de/avatic/lcc/controller/configuration/CalculationDumpController.java b/src/main/java/de/avatic/lcc/controller/configuration/CalculationDumpController.java new file mode 100644 index 0000000..01ebff1 --- /dev/null +++ b/src/main/java/de/avatic/lcc/controller/configuration/CalculationDumpController.java @@ -0,0 +1,40 @@ +package de.avatic.lcc.controller.configuration; + +import de.avatic.lcc.dto.error.CalculationJobDumpDTO; +import de.avatic.lcc.repositories.error.DumpRepository; +import de.avatic.lcc.repositories.pagination.SearchQueryPagination; +import jakarta.validation.constraints.Min; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/dumps") +public class CalculationDumpController { + + private final DumpRepository dumpRepository; + + public CalculationDumpController(DumpRepository dumpRepository) { + this.dumpRepository = dumpRepository; + } + + @GetMapping({"/dump/{id}", "/dump/{id}/"}) + public ResponseEntity getDump(@PathVariable Integer id) { + return ResponseEntity.ok(dumpRepository.getDump(id)); + } + + @GetMapping({"/dump/", "/dump"}) + public ResponseEntity> listDumps( + @RequestParam(defaultValue = "20") @Min(1) int limit, + @RequestParam(defaultValue = "1") @Min(1) int page) { + + var dump = dumpRepository.listDumps(new SearchQueryPagination(page, limit)); + + return ResponseEntity.ok() + .header("X-Total-Count", String.valueOf(dump.getTotalElements())) + .header("X-Page-Count", String.valueOf(dump.getTotalPages())) + .header("X-Current-Page", String.valueOf(page)) + .body(dump.toList()); + } +} diff --git a/src/main/java/de/avatic/lcc/controller/dev/DevController.java b/src/main/java/de/avatic/lcc/controller/dev/DevController.java index 5fdf4d2..c094be1 100644 --- a/src/main/java/de/avatic/lcc/controller/dev/DevController.java +++ b/src/main/java/de/avatic/lcc/controller/dev/DevController.java @@ -1,7 +1,6 @@ package de.avatic.lcc.controller.dev; import de.avatic.lcc.config.filter.DevUserEmulationFilter; -import de.avatic.lcc.dto.error.CalculationJobDumpDTO; import de.avatic.lcc.dto.users.UserDTO; import de.avatic.lcc.repositories.error.DumpRepository; import de.avatic.lcc.repositories.pagination.SearchQueryPagination; @@ -21,36 +20,15 @@ import java.util.List; @RequestMapping({"/api/dev", "/api/dev/"}) public class DevController { - private final DumpRepository dumpRepository; + private final UserRepository userRepository; private final UserTransformer userTransformer; - public DevController(DumpRepository dumpRepository, UserRepository userRepository, UserTransformer userTransformer) { - - this.dumpRepository = dumpRepository; + public DevController(UserRepository userRepository, UserTransformer userTransformer) { this.userRepository = userRepository; this.userTransformer = userTransformer; } - @GetMapping({"/dump/{id}", "/dump/{id}/"}) - public ResponseEntity getDump(@PathVariable Integer id) { - return ResponseEntity.ok(dumpRepository.getDump(id)); - } - - @GetMapping({"/dump/", "/dump"}) - public ResponseEntity> listDumps( - @RequestParam(defaultValue = "20") @Min(1) int limit, - @RequestParam(defaultValue = "1") @Min(1) int page) { - - var dump = dumpRepository.listDumps(new SearchQueryPagination(page, limit)); - - return ResponseEntity.ok() - .header("X-Total-Count", String.valueOf(dump.getTotalElements())) - .header("X-Page-Count", String.valueOf(dump.getTotalPages())) - .header("X-Current-Page", String.valueOf(page)) - .body(dump.toList()); - } - @GetMapping({"/user"}) public ResponseEntity> listUser(@RequestParam(defaultValue = "20") @Min(1) int limit, @RequestParam(defaultValue = "1") @Min(1) int page) {