From 65701dee742370f7a692ff1ac4db56369d85b659 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Wed, 13 Aug 2025 08:50:54 +0200 Subject: [PATCH] working on legacy note rendering --- frontend/src/routes/notes/Index.svelte | 2 +- legacy/build.gradle.kts | 1 + .../umbrella/legacy/NotesLegacy.java | 49 ++++++++++++++----- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/frontend/src/routes/notes/Index.svelte b/frontend/src/routes/notes/Index.svelte index 161ea5e..60ccfc0 100644 --- a/frontend/src/routes/notes/Index.svelte +++ b/frontend/src/routes/notes/Index.svelte @@ -12,7 +12,7 @@ let error = $state(null); let loader = { offset : 0, - limit : 5, + limit : 20, active : true } let note = $state({source:null,rendered:null}); diff --git a/legacy/build.gradle.kts b/legacy/build.gradle.kts index 68df3be..d972331 100644 --- a/legacy/build.gradle.kts +++ b/legacy/build.gradle.kts @@ -4,6 +4,7 @@ dependencies{ implementation(project(":core")) implementation(project(":user")) implementation("de.srsoftware:tools.mime:1.1.2") + implementation("de.srsoftware:tools.web:1.3.16") implementation("org.bitbucket.b_c:jose4j:0.9.6") implementation("org.xerial:sqlite-jdbc:3.49.0.0") } \ No newline at end of file diff --git a/legacy/src/main/java/de/srsoftware/umbrella/legacy/NotesLegacy.java b/legacy/src/main/java/de/srsoftware/umbrella/legacy/NotesLegacy.java index 909f9f5..22812d4 100644 --- a/legacy/src/main/java/de/srsoftware/umbrella/legacy/NotesLegacy.java +++ b/legacy/src/main/java/de/srsoftware/umbrella/legacy/NotesLegacy.java @@ -1,16 +1,25 @@ /* © SRSoftware 2025 */ package de.srsoftware.umbrella.legacy; -import static de.srsoftware.umbrella.core.Constants.URI; -import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException; -import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.unprocessable; import com.sun.net.httpserver.HttpExchange; import de.srsoftware.configuration.Configuration; import de.srsoftware.tools.Path; +import de.srsoftware.tools.Tag; import de.srsoftware.umbrella.core.BaseHandler; import de.srsoftware.umbrella.core.ModuleRegistry; +import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.UmbrellaUser; + import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; + +import static de.srsoftware.umbrella.core.Constants.URI; +import static de.srsoftware.umbrella.core.Util.mapValues; +import static de.srsoftware.umbrella.core.Util.markdown; +import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.invalidFieldException; public class NotesLegacy extends BaseHandler { private final ModuleRegistry registry; @@ -43,15 +52,29 @@ public class NotesLegacy extends BaseHandler { @Override public boolean doPost(Path path, HttpExchange ex) throws IOException { - addCors(ex); - var data = formData(ex); - var noteService = registry.noteService(); - if (!(data.get(URI) instanceof String uri)) throw missingFieldException(URI); - var parts = uri.split(":",2); - if (parts.length<2) throw unprocessable("Expected URI to contain colon (:)!"); - String module = parts[0]; - String entityId = parts[1]; - var notes = noteService.getNotes(module,entityId); - return super.doPost(path, ex); + var params = formData(ex); + if (!(params.get(URI) instanceof String uri)) throw invalidFieldException(URI,"URI of the form \"module:entry-id\""); + var parts = uri.split(":"); + if (parts.length<2) throw invalidFieldException(URI,"URI of the form \"module:entry-id\""); + var module = parts[0]; + var entryId = parts[1]; + var notes = registry.noteService().getNotes(module,entryId); + var authors = new HashMap (); + var users = registry.userService(); + for (var note : notes.values()) { + var userId = note.authorId(); + authors.computeIfAbsent(userId,k -> users.loadUser(userId)); + } + var html = new Tag("div"); + for (var note : notes.values()){ + var author = authors.get(note.authorId()); + var authorName = author != null ? author.name() : ""; + new Tag("fieldset") + .add(new Tag("legend").content(authorName)) + .add(new Tag("legend").content(note.timestamp().format(DateTimeFormatter.ISO_DATE_TIME))) + .add(new Tag("div").content(markdown(note.text()))) + .addTo(html); + } + return sendContent(ex,html.toString(2)); } }