Josha von Gizycki 3 days ago
commit c788004de0

@ -53,6 +53,11 @@ data class Document(
updatedAt = Instant.now(), updatedAt = Instant.now(),
dateFields = dateFields.filter { it.id != fieldId }.toSet() dateFields = dateFields.filter { it.id != fieldId }.toSet()
) )
fun updated() =
copy(
updatedAt = Instant.now()
)
} }
@Table("T_DOCUMENT") @Table("T_DOCUMENT")

@ -1,15 +1,20 @@
package wanijo.wanijo2.domain.handler package wanijo.wanijo2.domain.handler
import org.springframework.stereotype.Service 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.DocumentTagging
import wanijo.wanijo2.domain.DocumentTaggingDao import wanijo.wanijo2.domain.DocumentTaggingDao
import wanijo.wanijo2.domain.event.AssignTaggingCommand import wanijo.wanijo2.domain.event.AssignTaggingCommand
import wanijo.wanijo2.http.DocumentNotFound
@Service @Service
class AssignTaggingHandler( class AssignTaggingHandler(
val taggingDao: DocumentTaggingDao val taggingDao: DocumentTaggingDao,
val documentDao: DocumentDao
) { ) {
@Transactional
fun exec(command: AssignTaggingCommand) { fun exec(command: AssignTaggingCommand) {
taggingDao.save( taggingDao.save(
DocumentTagging.between( DocumentTagging.between(
@ -17,6 +22,11 @@ class AssignTaggingHandler(
command.tagId command.tagId
) )
) )
documentDao.save(
(documentDao
.findById(command.documentId) ?: throw DocumentNotFound())
.updated()
)
} }
} }

@ -1,19 +1,29 @@
package wanijo.wanijo2.domain.handler package wanijo.wanijo2.domain.handler
import org.springframework.stereotype.Service 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.DocumentTaggingDao
import wanijo.wanijo2.domain.event.DeleteTaggingCommand import wanijo.wanijo2.domain.event.DeleteTaggingCommand
import wanijo.wanijo2.http.DocumentNotFound
@Service @Service
class DeleteTaggingHandler( class DeleteTaggingHandler(
val taggingDao: DocumentTaggingDao val taggingDao: DocumentTaggingDao,
val documentDao: DocumentDao
) { ) {
@Transactional
fun exec(command: DeleteTaggingCommand) { fun exec(command: DeleteTaggingCommand) {
taggingDao.delete( taggingDao.delete(
command.documentId, command.documentId,
command.tagId command.tagId
) )
documentDao.save(
(documentDao
.findById(command.documentId) ?: throw DocumentNotFound())
.updated()
)
} }
} }

@ -21,6 +21,9 @@ class ShowController(
val tagDao: TagDao val tagDao: TagDao
) { ) {
val markdownParser: Parser = Parser.builder().build()
val htmlRenderer: HtmlRenderer = HtmlRenderer.builder().build()
@GetMapping("/document/{id}") @GetMapping("/document/{id}")
fun show( fun show(
model: Model, model: Model,
@ -29,11 +32,9 @@ class ShowController(
val document = docDao.findById(id) ?: throw DocumentNotFound() val document = docDao.findById(id) ?: throw DocumentNotFound()
model["document"] = document model["document"] = document
model["descHtml"] = markdownParser.parse(document.description).let {
val descHtml = Parser.builder().build().parse(document.description).let { htmlRenderer.render(it)
HtmlRenderer.builder().build().render(it)
} }
model["descHtml"] = descHtml
val documentTags = tagDao.ofDocument(id) val documentTags = tagDao.ofDocument(id)
model["documentTags"] = documentTags.sortedBy { it.name.lowercase() } model["documentTags"] = documentTags.sortedBy { it.name.lowercase() }

@ -74,7 +74,10 @@ main {
.tag-block { .tag-block {
border: 1px solid var(--light-grey); border: 1px solid var(--light-grey);
border-left: .5rem solid AccentColor; border-left: .5rem solid AccentColor;
padding: .2rem .2rem .2rem .5rem;
[type=submit] {
padding: .5rem;
}
} }
fieldset { 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 { .form-link {
display: inline; display: inline;

@ -8,7 +8,7 @@
</head> </head>
<body> <body>
<main id="content" layout:fragment="content"> <main id="content" layout:fragment="content">
<form th:action="@{/document/new}" th:object="${form}" method="post"> <form th:action="@{/document/new}" th:object="${form}" method="post" class="vert">
<label for="name">name</label> <label for="name">name</label>
<input id="name" type="text" th:field="*{name}" required> <input id="name" type="text" th:field="*{name}" required>
@ -24,7 +24,7 @@
</label> </label>
</div> </div>
<label for="tags">tags</label> <label for="tags">tags <small>(csv)</small></label>
<input id="tags" type="text" th:field="*{newTags}"> <input id="tags" type="text" th:field="*{newTags}">
<button type="submit"> <button type="submit">

@ -98,7 +98,7 @@
<form class="form-inline" th:action="@{/document/{id}/field/label/delete(id=${document.id})}" method="post"> <form class="form-inline" th:action="@{/document/{id}/field/label/delete(id=${document.id})}" method="post">
<input type="hidden" name="labelFieldId" th:value="${field.id}"> <input type="hidden" name="labelFieldId" th:value="${field.id}">
<input type="hidden" name="documentId" th:value="${document.id}"> <input type="hidden" name="documentId" th:value="${document.id}">
<button type="submit" class="warning">weg</button> <button type="submit" class="warning">löschen</button>
</form> </form>
</dt> </dt>
<dd th:text="${field.value}"></dd> <dd th:text="${field.value}"></dd>
@ -114,7 +114,7 @@
<form class="form-inline" th:action="@{/document/{id}/field/date/delete(id=${document.id})}" method="post"> <form class="form-inline" th:action="@{/document/{id}/field/date/delete(id=${document.id})}" method="post">
<input type="hidden" name="dateFieldId" th:value="${field.id}"> <input type="hidden" name="dateFieldId" th:value="${field.id}">
<input type="hidden" name="documentId" th:value="${document.id}"> <input type="hidden" name="documentId" th:value="${document.id}">
<button type="submit" class="warning">weg</button> <button type="submit" class="warning">löschen</button>
</form> </form>
</dt> </dt>
<dd th:text="${#temporals.format(field.value, 'yyyy-MM-dd HH:mm')}"></dd> <dd th:text="${#temporals.format(field.value, 'yyyy-MM-dd HH:mm')}"></dd>

Loading…
Cancel
Save