From 8cbc11810c99bacb92b4bc55f36e1f00104f08d3 Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Mon, 27 Jul 2026 17:06:00 +0200 Subject: fix overwriting of timePublished when updating post --- .../no/eliashaugsbakk/clams/server/controller/PostController.java | 6 +++++- .../src/main/java/no/eliashaugsbakk/clams/server/model/Post.java | 6 +++++- .../no/eliashaugsbakk/clams/server/repository/PostsRepoSqlite.java | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) (limited to 'clams-server/src') diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/PostController.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/PostController.java index f3aa406..155c271 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/PostController.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/controller/PostController.java @@ -21,8 +21,12 @@ public class PostController { } public void handlePutPost(Context ctx) { + String slug = ctx.pathParam("slug"); PostDTO updatedPost = ctx.bodyAsClass(PostDTO.class); - postsRepo.updatePost(new Post(updatedPost, ctx.pathParam("slug"))); + + postsRepo.getPost(slug) + .map(existing -> Post.fromUpdated(existing, updatedPost)) + .ifPresentOrElse(postsRepo::updatePost, () -> ctx.status(404)); } public void handleDeletePost(Context ctx) { 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 dcf0e54..0c3f19c 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 @@ -5,8 +5,12 @@ import java.time.Instant; public record Post(String title, String slug, String summary, Instant timePublished, Instant lastEdited, String content, boolean isPublished) { public Post(PostDTO postDTO, String slug) { - this(postDTO.title(), slug, postDTO.summary(), Instant.now(), Instant.now(), postDTO.content(), postDTO.isPublished()); } + + public static Post fromUpdated(Post existing, PostDTO postDTO) { + return new Post(postDTO.title(), existing.slug(), postDTO.summary(), existing.timePublished(), Instant.now(), + postDTO.content(), postDTO.isPublished()); + } } diff --git a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/PostsRepoSqlite.java b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/PostsRepoSqlite.java index 6943d97..5f79745 100644 --- a/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/PostsRepoSqlite.java +++ b/clams-server/src/main/java/no/eliashaugsbakk/clams/server/repository/PostsRepoSqlite.java @@ -161,7 +161,7 @@ public class PostsRepoSqlite implements PostsRepo { stmt.setString(2, post.content()); stmt.setString(3, post.summary()); stmt.setString(4, post.timePublished().toString()); - stmt.setString(5, Instant.now().toString()); + stmt.setString(5, post.lastEdited().toString()); stmt.setBoolean(6, post.isPublished()); stmt.setString(7, post.slug()); -- cgit v1.2.3