Browse Source

implemented storage of new wiki page version, prepared page display for several versions

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
module/wiki
Stephan Richter 2 months ago
parent
commit
e831b8a4e0
  1. 8
      core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java
  2. 1
      frontend/src/App.svelte
  3. 15
      frontend/src/routes/wiki/View.svelte
  4. 2
      translations/src/main/resources/de.json
  5. 12
      wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java

8
core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java

@ -26,6 +26,10 @@ public class WikiPage implements Mappable { @@ -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 { @@ -74,6 +78,10 @@ public class WikiPage implements Mappable {
);
}
public int version(){
return version;
}
public List<Integer> versions(){
return versions;
}

1
frontend/src/App.svelte

@ -91,6 +91,7 @@ @@ -91,6 +91,7 @@
<Route path="/user/oidc/edit/:serviceName" component={EditService} />
<Route path="/wiki" component={WikiIndex} />
<Route path="/wiki/:id/view" component={WikiPage} />
<Route path="/wiki/:id/version/:version" component={WikiPage} />
<Route>
Not found!
</Route>

15
frontend/src/routes/wiki/View.svelte

@ -6,7 +6,7 @@ @@ -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 @@ @@ -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 @@ @@ -44,5 +44,14 @@
<span class="error">{error}</span>
{/if}
{#if page}
<span class="version">{t('version')}</span>
{#each Array.from({ length: page.version }, (_, i) => page.version - i) as v}
<span class="version">
{#if v == page.version}[{/if}
<a href={`/wiki/${id}/version/${v}`}>{v}</a>
{#if v == page.version}]{/if}
&nbsp;
</span>
{/each}
<Editor editable={true} value={page.content} onSet={s => patch({content:s})}></Editor>
{/if}

2
translations/src/main/resources/de.json

@ -264,6 +264,8 @@ @@ -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"

12
wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java

@ -12,6 +12,7 @@ import java.sql.SQLException; @@ -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 { @@ -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 { @@ -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);
}
}
}
Loading…
Cancel
Save