diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt | 4 | ||||
| -rw-r--r-- | src/main/kotlin/dev/dnpm/etl/processor/web/HomeController.kt | 18 | ||||
| -rw-r--r-- | src/main/resources/templates/index.html | 25 |
3 files changed, 43 insertions, 4 deletions
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt index 0738650..028b4a3 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt @@ -20,6 +20,8 @@ package dev.dnpm.etl.processor.monitoring import org.springframework.data.annotation.Id +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable import org.springframework.data.jdbc.repository.query.Query import org.springframework.data.relational.core.mapping.Embedded import org.springframework.data.relational.core.mapping.Table @@ -59,6 +61,8 @@ interface RequestRepository : CrudRepository<Request, Long>, PagingAndSortingRep fun findByUuidEquals(uuid: String): Optional<Request> + fun findRequestByPatientId(patientId: String, pageable: Pageable): Page<Request> + @Query("SELECT count(*) AS count, status FROM request WHERE type = 'MTB_FILE' GROUP BY status ORDER BY status, count DESC;") fun countStates(): List<CountedState> diff --git a/src/main/kotlin/dev/dnpm/etl/processor/web/HomeController.kt b/src/main/kotlin/dev/dnpm/etl/processor/web/HomeController.kt index 99b9972..6a256aa 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/web/HomeController.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/web/HomeController.kt @@ -40,13 +40,29 @@ class HomeController( ) { @GetMapping - fun index(@PageableDefault(page = 0, size = 20, sort = ["processedAt"], direction = Sort.Direction.DESC) pageable: Pageable, model: Model): String { + fun index( + @PageableDefault(page = 0, size = 20, sort = ["processedAt"], direction = Sort.Direction.DESC) pageable: Pageable, + model: Model + ): String { val requests = requestRepository.findAll(pageable) model.addAttribute("requests", requests) return "index" } + @GetMapping(path = ["patient/{patientId}"]) + fun byPatient( + @PathVariable patientId: String, + @PageableDefault(page = 0, size = 20, sort = ["processedAt"], direction = Sort.Direction.DESC) pageable: Pageable, + model: Model + ): String { + val requests = requestRepository.findRequestByPatientId(patientId, pageable) + model.addAttribute("patientId", patientId) + model.addAttribute("requests", requests) + + return "index" + } + @GetMapping(path = ["/report/{id}"]) fun report(@PathVariable id: RequestId, model: Model): String { val request = requestRepository.findByUuidEquals(id.toString()).orElse(null) ?: throw NotFoundException() diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index c039b33..c8b0ea5 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -9,16 +9,30 @@ <div th:replace="~{fragments.html :: nav}"></div> <main> - <h1>Letzte Anfragen<a id="reload-notify" class="reload" title="Neue Anfragen" th:href="@{/}">⟳</a></h1> + <h1>Alle Anfragen<a id="reload-notify" class="reload" title="Neue Anfragen" th:href="@{/}">⟳</a></h1> + + <div> + <h2 th:if="${patientId != null}"> + Betreffend Patienten-Pseudonym <span class="monospace" th:text="${patientId}">***</span> + <a class="btn btn-blue" th:if="${patientId != null}" th:href="@{/}">Alle anzeigen</a> + </h2> + </div> <div class="border"> - <div class="page-control"> + <div th:if="${patientId == null}" class="page-control"> <a id="first-page-link" th:href="@{/(page=${0})}" title="Zum Anfang: Taste W" th:if="${not requests.isFirst()}">⇤</a><a th:if="${requests.isFirst()}">⇤</a> <a id="prev-page-link" th:href="@{/(page=${requests.getNumber() - 1})}" title="Seite zurück: Taste A" th:if="${not requests.isFirst()}">←</a><a th:if="${requests.isFirst()}">←</a> <span>Seite [[ ${requests.getNumber() + 1} ]] von [[ ${requests.getTotalPages()} ]]</span> <a id="next-page-link" th:href="@{/(page=${requests.getNumber() + 1})}" title="Seite vor: Taste D" th:if="${not requests.isLast()}">→</a><a th:if="${requests.isLast()}">→</a> <a id="last-page-link" th:href="@{/(page=${requests.getTotalPages() - 1})}" title="Zum Ende: Taste S" th:if="${not requests.isLast()}">⇥</a><a th:if="${requests.isLast()}">⇥</a> </div> + <div th:if="${patientId != null}" class="page-control"> + <a id="first-page-link" th:href="@{/patient/{patientId}(patientId=${patientId},page=${0})}" title="Zum Anfang: Taste W" th:if="${not requests.isFirst()}">⇤</a><a th:if="${requests.isFirst()}">⇤</a> + <a id="prev-page-link" th:href="@{/patient/{patientId}(patientId=${patientId},page=${requests.getNumber() - 1})}" title="Seite zurück: Taste A" th:if="${not requests.isFirst()}">←</a><a th:if="${requests.isFirst()}">←</a> + <span>Seite [[ ${requests.getNumber() + 1} ]] von [[ ${requests.getTotalPages()} ]]</span> + <a id="next-page-link" th:href="@{/patient/{patientId}(patientId=${patientId},page=${requests.getNumber() + 1})}" title="Seite vor: Taste D" th:if="${not requests.isLast()}">→</a><a th:if="${requests.isLast()}">→</a> + <a id="last-page-link" th:href="@{/patient/{patientId}(patientId=${patientId},page=${requests.getTotalPages() - 1})}" title="Zum Ende: Taste S" th:if="${not requests.isLast()}">⇥</a><a th:if="${requests.isLast()}">⇥</a> + </div> <table class="paged"> <thead> <tr> @@ -42,7 +56,12 @@ <a th:href="@{/report/{id}(id=${request.uuid})}">[[ ${request.uuid} ]]</a> </td> <td><time th:datetime="${request.processedAt}">[[ ${request.processedAt} ]]</time></td> - <td class="patient-id" sec:authorize="authenticated">[[ ${request.patientId} ]]</td> + <td class="patient-id" th:if="${patientId != null}" sec:authorize="authenticated"> + [[ ${request.patientId} ]] + </td> + <td class="patient-id" th:if="${patientId == null}" sec:authorize="authenticated"> + <a th:href="@{/patient/{pid}(pid=${request.patientId})}">[[ ${request.patientId} ]]</a> + </td> <td class="patient-id" sec:authorize="not authenticated">***</td> </tr> </tbody> |
