summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2022-11-02 05:33:37 +0100
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2022-11-02 05:35:27 +0100
commita84be3bc9944ec08e361e73e043ee4aa9d4d474a (patch)
tree6d7e8ba8a9f7e8923ff6dbc08444a6ba2c07e334 /src/main/java
parent2137b35a465ae9f830519c5a8bd49cb388fd552d (diff)
feat(wiki): Implement new Wiki page creation.
Change-Id: I807147f3a4d105c08a9ffda130afec36dc13228a
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java52
1 files changed, 37 insertions, 15 deletions
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java b/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
index 4100dc2..cd10267 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
@@ -13,6 +13,7 @@ import io.quarkus.security.identity.SecurityIdentity;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.TemporalAccessor;
@@ -59,16 +60,28 @@ public class WikiResource {
@Produces(TEXT_HTML)
@Authenticated
public TemplateInstance getPage(@PathParam("pageName") String pageName) {
+ WikiPageRevision page;
+
Optional<WikiPageRevision> maybePage =
WikiPageRevision.find(
"from WikiPageRevision rev join fetch rev.author where rev.title = ?1",
Sort.by("date").descending(),
pageName)
.firstResultOptional();
- if (maybePage.isEmpty()) {
- throw new NotFoundException();
+ if (maybePage.isPresent()) {
+ page = maybePage.get();
+ } else {
+ var userName = identity.getPrincipal().getName();
+ User user =
+ User.find("from BenkiUser u join u.nicknames n where ?1 = n", userName).singleResult();
+ page = new WikiPageRevision();
+ page.content = "";
+ page.title = pageName;
+ page.date = OffsetDateTime.now(ZoneOffset.UTC);
+ page.format = "html5";
+ page.author = user;
}
- var page = maybePage.get();
+
return Templates.wikiPage(page);
}
@@ -96,6 +109,8 @@ public class WikiResource {
}
var userName = identity.getPrincipal().getName();
+ User user =
+ User.find("from BenkiUser u join u.nicknames n where ?1 = n", userName).singleResult();
Optional<WikiPageRevision> maybeCurrentRevision =
WikiPageRevision.find(
@@ -103,26 +118,33 @@ public class WikiResource {
Sort.by("date").descending(),
pageName)
.firstResultOptional();
- if (maybeCurrentRevision.isEmpty()) {
- throw new NotFoundException();
+
+ final WikiPage page;
+ if (maybeCurrentRevision.isPresent()) {
+ // Update the existing page.
+ var currentRevision = maybeCurrentRevision.get();
+ page = currentRevision.page;
+
+ title = title != null ? title : currentRevision.title;
+ content = content != null ? content : currentRevision.content;
+ } else {
+ // Create a new page.
+ page = new WikiPage();
+ page.persist();
+
+ title = title != null ? title : pageName;
+ content = content != null ? content : "";
}
- var currentRevision = maybeCurrentRevision.get();
var pageRevision =
- new WikiPageRevision(
- OffsetDateTime.now(),
- title != null ? title : currentRevision.title,
- content != null ? content : currentRevision.content,
- "html5",
- currentRevision.page,
- User.find("from BenkiUser u join u.nicknames n where ?1 = n", userName).singleResult());
-
- pageRevision.persistAndFlush();
+ new WikiPageRevision(OffsetDateTime.now(), title, content, "html5", page, user);
+ pageRevision.persist();
return jsonProvider
.createObjectBuilder()
.add("status", "ok")
.add("content", pageRevision.enrichedContent())
+ .add("title", pageRevision.title)
.build();
}