From e831b8a4e03df7770b227cee6dd50efd96244211 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Wed, 10 Sep 2025 14:47:08 +0200 Subject: [PATCH] implemented storage of new wiki page version, prepared page display for several versions Signed-off-by: Stephan Richter --- .../srsoftware/umbrella/core/model/WikiPage.java | 8 ++++++++ frontend/src/App.svelte | 1 + frontend/src/routes/wiki/View.svelte | 15 ++++++++++++--- translations/src/main/resources/de.json | 2 ++ .../de/srsoftware/umbrella/wiki/SqliteDb.java | 12 +++++++++--- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java b/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java index aca670a..64aa4f0 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java @@ -26,6 +26,10 @@ public class WikiPage implements Mappable { this.content = content; } + public String content(){ + return content; + } + public String id(){ return id; } @@ -74,6 +78,10 @@ public class WikiPage implements Mappable { ); } + public int version(){ + return version; + } + public List versions(){ return versions; } diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 9596275..0b4e6d0 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -91,6 +91,7 @@ + Not found! diff --git a/frontend/src/routes/wiki/View.svelte b/frontend/src/routes/wiki/View.svelte index 8adc0a4..a49e13b 100644 --- a/frontend/src/routes/wiki/View.svelte +++ b/frontend/src/routes/wiki/View.svelte @@ -6,7 +6,7 @@ import Editor from '../../Components/MarkdownEditor.svelte'; let error = $state(null); - let { id } = $props(); + let { id, version } = $props(); let page = $state(null); async function loadPage(){ @@ -28,13 +28,13 @@ body:JSON.stringify(data) }); if (res.ok){ - return true; error = null; + page = await res.json(); + return true; } else { error = await res.text(); return false; } - } onMount(loadPage); @@ -44,5 +44,14 @@ {error} {/if} {#if page} +{t('version')} +{#each Array.from({ length: page.version }, (_, i) => page.version - i) as v} + + {#if v == page.version}[{/if} + {v} + {#if v == page.version}]{/if} +   + +{/each} patch({content:s})}> {/if} \ No newline at end of file diff --git a/translations/src/main/resources/de.json b/translations/src/main/resources/de.json index c6eae8f..894cddc 100644 --- a/translations/src/main/resources/de.json +++ b/translations/src/main/resources/de.json @@ -264,6 +264,8 @@ "welcome" : "Willkommen, {0}", "wiki": "Wiki", + "version": "Version", + "year": "Jahr", "your_password_reset_token" : "Ihr Token zum Erstellen eines neuen Passworts", "your_profile": "dein Profil" diff --git a/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java b/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java index 2231ce8..08b51c5 100644 --- a/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java +++ b/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java @@ -12,6 +12,7 @@ import java.sql.SQLException; import java.util.*; import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL; +import static de.srsoftware.tools.jdbc.Query.insertInto; import static de.srsoftware.tools.jdbc.Query.select; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.Constants.ERROR_FAILED_CREATE_TABLE; @@ -81,11 +82,11 @@ public class SqliteDb extends BaseDb implements WikiDb { @Override public WikiPage load(String id) { try { - var rs = select(ALL).from(TABLE_PAGES).where(ID,Condition.equal(id)).sort(VERSION).limit(1).exec(db); + var rs = select(ALL).from(TABLE_PAGES).where(ID,Condition.equal(id)).sort(VERSION+" DESC").limit(1).exec(db); WikiPage page = null; if (rs.next()) page = WikiPage.of(rs); rs.close(); - if (page == null) throw notFound("Failed to load wiki page \"{0}\" from databse!",id); + if (page == null) throw notFound("Failed to load wiki page \"{0}\" from database!",id); rs = select(VERSION).from(TABLE_PAGES).where(ID,Condition.equal(id)).sort(VERSION).exec(db); var versions = page.versions(); while (rs.next()) versions.add(rs.getInt(VERSION)); @@ -118,6 +119,11 @@ public class SqliteDb extends BaseDb implements WikiDb { @Override public WikiPage save(WikiPage page) { - throw UmbrellaException.unprocessable("save(Wikipage) not implemented"); + try { + insertInto(TABLE_PAGES,ID,VERSION,CONTENT).values(page.id(),page.version(),page.content()).execute(db).close(); + return page; + } catch (SQLException e) { + throw databaseException("Failed to write wiki page \"{0}\" to database",page.id(),e); + } } } \ No newline at end of file