From 38bab59e0fd9ea03c56fcd65a52a9c0e0545e4d3 Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Mon, 29 Dec 2025 18:43:03 +0100 Subject: [PATCH 1/3] update updatedAt when tagging --- src/main/kotlin/wanijo/wanijo2/domain/document.kt | 5 +++++ .../wanijo2/domain/handler/AssignTaggingHandler.kt | 10 +++++++++- .../wanijo2/domain/handler/DeleteTaggingHandler.kt | 10 +++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/wanijo/wanijo2/domain/document.kt b/src/main/kotlin/wanijo/wanijo2/domain/document.kt index 951f6eb..87eb19f 100644 --- a/src/main/kotlin/wanijo/wanijo2/domain/document.kt +++ b/src/main/kotlin/wanijo/wanijo2/domain/document.kt @@ -53,6 +53,11 @@ data class Document( updatedAt = Instant.now(), dateFields = dateFields.filter { it.id != fieldId }.toSet() ) + + fun updated() = + copy( + updatedAt = Instant.now() + ) } @Table("T_DOCUMENT") diff --git a/src/main/kotlin/wanijo/wanijo2/domain/handler/AssignTaggingHandler.kt b/src/main/kotlin/wanijo/wanijo2/domain/handler/AssignTaggingHandler.kt index f3b154d..56f43e8 100644 --- a/src/main/kotlin/wanijo/wanijo2/domain/handler/AssignTaggingHandler.kt +++ b/src/main/kotlin/wanijo/wanijo2/domain/handler/AssignTaggingHandler.kt @@ -1,13 +1,16 @@ package wanijo.wanijo2.domain.handler import org.springframework.stereotype.Service +import wanijo.wanijo2.domain.DocumentDao import wanijo.wanijo2.domain.DocumentTagging import wanijo.wanijo2.domain.DocumentTaggingDao import wanijo.wanijo2.domain.event.AssignTaggingCommand +import wanijo.wanijo2.http.DocumentNotFound @Service class AssignTaggingHandler( - val taggingDao: DocumentTaggingDao + val taggingDao: DocumentTaggingDao, + val documentDao: DocumentDao ) { fun exec(command: AssignTaggingCommand) { @@ -17,6 +20,11 @@ class AssignTaggingHandler( command.tagId ) ) + documentDao.save( + (documentDao + .findById(command.documentId) ?: throw DocumentNotFound()) + .updated() + ) } } diff --git a/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteTaggingHandler.kt b/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteTaggingHandler.kt index 2a770f8..1b75946 100644 --- a/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteTaggingHandler.kt +++ b/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteTaggingHandler.kt @@ -1,12 +1,15 @@ package wanijo.wanijo2.domain.handler import org.springframework.stereotype.Service +import wanijo.wanijo2.domain.DocumentDao import wanijo.wanijo2.domain.DocumentTaggingDao import wanijo.wanijo2.domain.event.DeleteTaggingCommand +import wanijo.wanijo2.http.DocumentNotFound @Service class DeleteTaggingHandler( - val taggingDao: DocumentTaggingDao + val taggingDao: DocumentTaggingDao, + val documentDao: DocumentDao ) { fun exec(command: DeleteTaggingCommand) { @@ -14,6 +17,11 @@ class DeleteTaggingHandler( command.documentId, command.tagId ) + documentDao.save( + (documentDao + .findById(command.documentId) ?: throw DocumentNotFound()) + .updated() + ) } } From 67dc59c0e96a12c232c7518440ccd6cae81b5609 Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Mon, 29 Dec 2025 18:43:24 +0100 Subject: [PATCH 2/3] refactorings --- .../wanijo2/http/controller/ShowController.kt | 9 +++---- src/main/resources/static/stylesheet.css | 24 ++++++++++++++++++- src/main/resources/templates/new.html | 4 ++-- src/main/resources/templates/show.html | 4 ++-- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/wanijo/wanijo2/http/controller/ShowController.kt b/src/main/kotlin/wanijo/wanijo2/http/controller/ShowController.kt index a6d50db..12b9cda 100644 --- a/src/main/kotlin/wanijo/wanijo2/http/controller/ShowController.kt +++ b/src/main/kotlin/wanijo/wanijo2/http/controller/ShowController.kt @@ -18,6 +18,9 @@ class ShowController( val tagDao: TagDao ) { + val markdownParser: Parser = Parser.builder().build() + val htmlRenderer: HtmlRenderer = HtmlRenderer.builder().build() + @GetMapping("/document/{id}") fun show( model: Model, @@ -26,11 +29,9 @@ class ShowController( val document = docDao.findById(id) ?: throw DocumentNotFound() model["document"] = document - - val descHtml = Parser.builder().build().parse(document.description).let { - HtmlRenderer.builder().build().render(it) + model["descHtml"] = markdownParser.parse(document.description).let { + htmlRenderer.render(it) } - model["descHtml"] = descHtml val documentTags = tagDao.ofDocument(id) model["documentTags"] = documentTags.sortedBy { it.name.lowercase() } diff --git a/src/main/resources/static/stylesheet.css b/src/main/resources/static/stylesheet.css index 88d98c3..8fe2e26 100644 --- a/src/main/resources/static/stylesheet.css +++ b/src/main/resources/static/stylesheet.css @@ -74,7 +74,10 @@ main { .tag-block { border: 1px solid var(--light-grey); border-left: .5rem solid AccentColor; - padding: .2rem .2rem .2rem .5rem; + + [type=submit] { + padding: .5rem; + } } fieldset { @@ -132,6 +135,25 @@ form { } } +form.vert { + display: grid; + grid-template-columns: 100%; + grid-auto-flow: row; + row-gap: 1rem; + + label { + grid-column: 1; + } + + input, textarea, select, button, .form__widget { + grid-column: 1; + } + + textarea { + min-height: 20rem; + } +} + .form-link { display: inline; diff --git a/src/main/resources/templates/new.html b/src/main/resources/templates/new.html index 6c58ebe..724920f 100644 --- a/src/main/resources/templates/new.html +++ b/src/main/resources/templates/new.html @@ -8,7 +8,7 @@
-
+ @@ -24,7 +24,7 @@ - + +
@@ -87,7 +87,7 @@
- +
From 938f2ef619227bb6f1b6e9a1fc87abb1983da56d Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Mon, 29 Dec 2025 18:45:25 +0100 Subject: [PATCH 3/3] make tagging handlers transactional --- .../wanijo/wanijo2/domain/handler/AssignTaggingHandler.kt | 2 ++ .../wanijo/wanijo2/domain/handler/DeleteTaggingHandler.kt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/kotlin/wanijo/wanijo2/domain/handler/AssignTaggingHandler.kt b/src/main/kotlin/wanijo/wanijo2/domain/handler/AssignTaggingHandler.kt index 56f43e8..3eaa258 100644 --- a/src/main/kotlin/wanijo/wanijo2/domain/handler/AssignTaggingHandler.kt +++ b/src/main/kotlin/wanijo/wanijo2/domain/handler/AssignTaggingHandler.kt @@ -1,6 +1,7 @@ package wanijo.wanijo2.domain.handler import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional import wanijo.wanijo2.domain.DocumentDao import wanijo.wanijo2.domain.DocumentTagging import wanijo.wanijo2.domain.DocumentTaggingDao @@ -13,6 +14,7 @@ class AssignTaggingHandler( val documentDao: DocumentDao ) { + @Transactional fun exec(command: AssignTaggingCommand) { taggingDao.save( DocumentTagging.between( diff --git a/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteTaggingHandler.kt b/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteTaggingHandler.kt index 1b75946..062c1b2 100644 --- a/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteTaggingHandler.kt +++ b/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteTaggingHandler.kt @@ -1,6 +1,7 @@ package wanijo.wanijo2.domain.handler import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional import wanijo.wanijo2.domain.DocumentDao import wanijo.wanijo2.domain.DocumentTaggingDao import wanijo.wanijo2.domain.event.DeleteTaggingCommand @@ -12,6 +13,7 @@ class DeleteTaggingHandler( val documentDao: DocumentDao ) { + @Transactional fun exec(command: DeleteTaggingCommand) { taggingDao.delete( command.documentId,