From f5bdf232ce2262a25e1e29e710dd1093d773cffc Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Mon, 6 Jul 2026 21:33:39 +0200 Subject: allow for unpublished posts --- .../clams/server/controller/BlogController.java | 12 ++++++++++-- .../no/eliashaugsbakk/clams/server/model/Post.java | 2 +- .../clams/server/model/PostMetaData.java | 2 +- .../clams/server/repository/BlogPostRepoSqlite.java | 21 ++++++++++----------- .../clams/server/repository/SqliteManager.java | 3 ++- .../clams/server/service/BlogSearchService.java | 5 ----- 6 files changed, 24 insertions(+), 21 deletions(-) (limited to 'clams-server/src/main/java/no/eliashaugsbakk') diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/BlogController.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/BlogController.java index b82c3fe..58ce6d4 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/BlogController.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/BlogController.java @@ -40,6 +40,12 @@ public class BlogController { } Post post = postOpt.get(); + + if (!post.isPublished()) { + ctx.status(404); + return; + } + String formattedDate = post.timePublished().atZone(OSLO_ZONE).format(DATE_FORMATTER); ctx.render("templates/post.html", Map.of( @@ -63,8 +69,9 @@ public class BlogController { } private void handleBlogIndex(Context ctx) { - - List allPosts = blogPostRepo.listPostsMetaData(); + List allPosts = blogPostRepo.listPostsMetaData().stream() + .filter(PostMetaData::isPublished) + .toList(); Map> postsByYear = groupPostsByYear(allPosts); // Manually list featured posts @@ -92,6 +99,7 @@ public class BlogController { List results = query.isEmpty() ? List.of() : blogSearchService.searchPosts(query); List resultItems = results.stream() + .filter(PostMetaData::isPublished) .map(post -> new SearchResultItem( post.title(), post.slug(), diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/model/Post.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/model/Post.java index 833c524..f5e963f 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/model/Post.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/model/Post.java @@ -2,5 +2,5 @@ package no.eliashaugsbakk.clams.server.model; import java.time.Instant; -public record Post(String title, String slug, String summary, Instant timePublished, String content) { +public record Post(String title, String slug, String summary, Instant timePublished, String content, boolean isPublished) { } diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/model/PostMetaData.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/model/PostMetaData.java index 44d667d..175fc55 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/model/PostMetaData.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/model/PostMetaData.java @@ -2,5 +2,5 @@ package no.eliashaugsbakk.clams.server.model; import java.time.Instant; -public record PostMetaData(String title, String slug, String summary, Instant timePublished, Instant lastEdit) { +public record PostMetaData(String title, String slug, String summary, Instant timePublished, Instant lastEdit, Boolean isPublished) { } diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/BlogPostRepoSqlite.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/BlogPostRepoSqlite.java index 77a7407..9da6818 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/BlogPostRepoSqlite.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/BlogPostRepoSqlite.java @@ -21,7 +21,7 @@ public class BlogPostRepoSqlite implements BlogPostRepo { @Override public List listPostsMetaData() { String sql = """ - SELECT title, slug, summary, published, last_edited + SELECT title, slug, summary, published, last_edited, is_published FROM posts ORDER BY published DESC """; @@ -36,13 +36,12 @@ public class BlogPostRepoSqlite implements BlogPostRepo { String title = resultSet.getString("title"); String slug = resultSet.getString("slug"); String summary = resultSet.getString("summary"); - Instant published = Instant.parse(resultSet.getString("published")); - String lastEditRaw = resultSet.getString("last_edited"); Instant lastEdit = (lastEditRaw != null) ? Instant.parse(lastEditRaw) : null; + boolean isPublished = resultSet.getBoolean("is_published"); - posts.add(new PostMetaData(title, slug, summary, published, lastEdit)); + posts.add(new PostMetaData(title, slug, summary, published, lastEdit, isPublished)); } return posts; @@ -55,7 +54,7 @@ public class BlogPostRepoSqlite implements BlogPostRepo { @Override public Optional getPost(String slug) { String sql = """ - SELECT title, slug, summary, content, published + SELECT title, slug, summary, content, published, is_published FROM posts WHERE slug = ? """; @@ -71,11 +70,10 @@ public class BlogPostRepoSqlite implements BlogPostRepo { String postSlug = resultSet.getString("slug"); String summary = resultSet.getString("summary"); String content = resultSet.getString("content"); + Instant published = Instant.parse(resultSet.getString("published")); + boolean isPublished = resultSet.getBoolean("is_published"); - String publishedRaw = resultSet.getString("published"); - Instant timePublished = Instant.parse(publishedRaw); - - return Optional.of(new Post(title, postSlug, summary, timePublished, content)); + return Optional.of(new Post(title, postSlug, summary, published, content, isPublished)); } return Optional.empty(); } @@ -88,7 +86,7 @@ public class BlogPostRepoSqlite implements BlogPostRepo { @Override public List searchPostsBody(String query) { String sql = """ - SELECT title, slug, summary, published, last_edited + SELECT title, slug, summary, published, last_edited, is_published FROM posts WHERE content LIKE ? ORDER BY published DESC @@ -109,8 +107,9 @@ public class BlogPostRepoSqlite implements BlogPostRepo { String summary = resultSet.getString("summary"); Instant published = Instant.parse(resultSet.getString("published")); Instant lastEdit = Instant.parse(resultSet.getString("last_edited")); + boolean isPublished = resultSet.getBoolean("is_published"); - posts.add(new PostMetaData(title, slug, summary, published, lastEdit)); + posts.add(new PostMetaData(title, slug, summary, published, lastEdit, isPublished)); } } diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/SqliteManager.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/SqliteManager.java index d83cfda..6fc5daf 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/SqliteManager.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/SqliteManager.java @@ -33,7 +33,8 @@ public class SqliteManager implements AutoCloseable { content TEXT, summary TEXT, published TEXT NOT NULL, - last_edited TEXT + last_edited TEXT, + is_published BOOLEAN ); """; diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/service/BlogSearchService.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/service/BlogSearchService.java index 26595f1..afc47f5 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/service/BlogSearchService.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/service/BlogSearchService.java @@ -36,11 +36,6 @@ public class BlogSearchService { bodyResults.forEach(post -> searchRanking.merge(post, bodyValue, Integer::sum)); - for (var item : searchRanking.entrySet()) { - IO.println(item.getKey()); - IO.println(item.getValue()); - } - return searchRanking.entrySet().stream() .sorted((e1, e2) -> Integer.compare(e2.getValue(), e1.getValue())) .map(Map.Entry::getKey) -- cgit v1.2.3