From 0ec0f63359f55126d7b5c76c1e7d8052849c5005 Mon Sep 17 00:00:00 2001 From: Francesco Date: Sun, 22 Oct 2023 14:31:09 +0200 Subject: [PATCH] WIP SQL console: tabs --- .../controller/DefaultDbAdminController.java | 44 ++++++++++++++++--- .../dbadmin/internal/model/ConsoleQuery.java | 31 +++++++++++++ src/main/resources/static/css/dbadmin.css | 5 +++ src/main/resources/templates/console.html | 18 +++++--- 4 files changed, 86 insertions(+), 12 deletions(-) diff --git a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java index bce2789..c1e0986 100644 --- a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java +++ b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java @@ -20,6 +20,7 @@ package tech.ailef.dbadmin.external.controller; import java.sql.ResultSetMetaData; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -548,21 +549,52 @@ public class DefaultDbAdminController { return "help"; } - @GetMapping("/console") - public String console(Model model, @RequestParam(required=false) String query) { + @GetMapping("/console/new") + public String consoleNew(Model model) { model.addAttribute("activePage", "console"); - model.addAttribute("query", query == null ? "" : query); + + ConsoleQuery q = new ConsoleQuery(); + consoleQueryRepository.save(q); + return "redirect:/" + properties.getBaseUrl() + "/console/run/" + q.getId(); + } + + @GetMapping("/console") + public String console(Model model) { List tabs = consoleQueryRepository.findAll(); if (tabs.isEmpty()) { ConsoleQuery q = new ConsoleQuery(); consoleQueryRepository.save(q); tabs.add(q); + return "redirect:/" + properties.getBaseUrl() + "/console/run/" + q.getId(); + } else { + return "redirect:/" + properties.getBaseUrl() + "/console/run/" + tabs.get(0).getId(); } + + } + + @GetMapping("/console/run/{queryId}") + public String consoleRun(Model model, @RequestParam(required = false) String query, @PathVariable String queryId) { + ConsoleQuery activeQuery = consoleQueryRepository.findById(queryId).orElseThrow(() -> { + return new DbAdminNotFoundException("Query with ID " + queryId + " not found."); + }); + + if (query != null && !query.isBlank()) { + activeQuery.setSql(query); + } + + activeQuery.setUpdatedAt(LocalDateTime.now()); + consoleQueryRepository.save(activeQuery); + + model.addAttribute("activePage", "console"); + model.addAttribute("activeQuery", activeQuery); + + List tabs = consoleQueryRepository.findAll(); model.addAttribute("tabs", tabs); - if (query != null) { + + if (activeQuery.getSql() != null && !activeQuery.getSql().isBlank()) { try { - List results = jdbTemplate.query(query, (rs, rowNum) -> { + List results = jdbTemplate.query(activeQuery.getSql(), (rs, rowNum) -> { Map result = new HashMap<>(); ResultSetMetaData metaData = rs.getMetaData(); @@ -585,8 +617,6 @@ public class DefaultDbAdminController { } } - - return "console"; } diff --git a/src/main/java/tech/ailef/dbadmin/internal/model/ConsoleQuery.java b/src/main/java/tech/ailef/dbadmin/internal/model/ConsoleQuery.java index 714a8fe..cf7fde5 100644 --- a/src/main/java/tech/ailef/dbadmin/internal/model/ConsoleQuery.java +++ b/src/main/java/tech/ailef/dbadmin/internal/model/ConsoleQuery.java @@ -1,5 +1,7 @@ package tech.ailef.dbadmin.internal.model; +import java.time.LocalDateTime; + import org.hibernate.annotations.UuidGenerator; import jakarta.persistence.Entity; @@ -16,9 +18,15 @@ public class ConsoleQuery { private String sql; private String title; + + private LocalDateTime createdAt; + private LocalDateTime updatedAt; + public ConsoleQuery() { this.title = "Untitled Query"; + this.createdAt = LocalDateTime.now(); + this.updatedAt = LocalDateTime.now(); } public String getId() { @@ -44,5 +52,28 @@ public class ConsoleQuery { public void setTitle(String title) { this.title = title; } + + public LocalDateTime getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(LocalDateTime createdAt) { + this.createdAt = createdAt; + } + + public LocalDateTime getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(LocalDateTime updatedAt) { + this.updatedAt = updatedAt; + } + + @Override + public String toString() { + return "ConsoleQuery [id=" + id + ", sql=" + sql + ", title=" + title + ", createdAt=" + createdAt + + ", updatedAt=" + updatedAt + "]"; + } + } diff --git a/src/main/resources/static/css/dbadmin.css b/src/main/resources/static/css/dbadmin.css index 861a9ce..f7d240c 100644 --- a/src/main/resources/static/css/dbadmin.css +++ b/src/main/resources/static/css/dbadmin.css @@ -120,6 +120,7 @@ h1 a:hover { border-top-right-radius: 5px; border-top-left-radius: 5px; background-color: #FAFAFA; + overflow-x: auto; } .inner-navigation a:first-child { @@ -131,6 +132,10 @@ h1 a:hover { border-bottom: 4px solid #F0F0F0; } +.inner-navigation .inner-navigation-border a { + border-bottom: none !important; +} + .inner-navigation a { text-decoration: none; font-weight: bold; diff --git a/src/main/resources/templates/console.html b/src/main/resources/templates/console.html index 87dac96..5f0ba88 100644 --- a/src/main/resources/templates/console.html +++ b/src/main/resources/templates/console.html @@ -12,22 +12,30 @@
- +
Untitled Query +
-
+
+

+ + + +

-
+ + th:text="${activeQuery.getSql()}">
-
+