draft for links
parent
9af57be306
commit
05ac0ba8a1
@ -0,0 +1,13 @@
|
|||||||
|
package wanijo.wanijo2.domain.event
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.Min
|
||||||
|
import wanijo.wanijo2.domain.Direction
|
||||||
|
import wanijo.wanijo2.domain.DocumentId
|
||||||
|
|
||||||
|
data class AddLinkCommand(
|
||||||
|
@Min(1)
|
||||||
|
val documentId: DocumentId,
|
||||||
|
@Min.List(Min(1))
|
||||||
|
val otherDocuments: List<DocumentId>,
|
||||||
|
val direction: Direction
|
||||||
|
)
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
package wanijo.wanijo2.domain
|
||||||
|
|
||||||
|
import org.springframework.data.annotation.Id
|
||||||
|
import org.springframework.data.jdbc.core.mapping.AggregateReference
|
||||||
|
import org.springframework.data.relational.core.mapping.Table
|
||||||
|
import org.springframework.data.repository.Repository
|
||||||
|
import java.time.Instant
|
||||||
|
|
||||||
|
typealias LinkId = Long
|
||||||
|
|
||||||
|
@Table("T_LINK")
|
||||||
|
data class Link(
|
||||||
|
@Id
|
||||||
|
val id: LinkId = 0,
|
||||||
|
val from: AggregateReference<Document, DocumentId>,
|
||||||
|
val to: AggregateReference<Document, DocumentId>,
|
||||||
|
val createdAt: Instant = Instant.now(),
|
||||||
|
)
|
||||||
|
|
||||||
|
enum class Direction {
|
||||||
|
OUTGOING,
|
||||||
|
INCOMING
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LinkDao : Repository<Link, LinkId> {}
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
package wanijo.wanijo2.http.controller
|
||||||
|
|
||||||
|
import org.springframework.data.domain.Sort
|
||||||
|
import org.springframework.stereotype.Controller
|
||||||
|
import org.springframework.ui.Model
|
||||||
|
import org.springframework.ui.set
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable
|
||||||
|
import wanijo.wanijo2.domain.Direction
|
||||||
|
import wanijo.wanijo2.domain.DocumentBriefDao
|
||||||
|
import wanijo.wanijo2.domain.DocumentId
|
||||||
|
import wanijo.wanijo2.domain.event.AddLinkCommand
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
class LinkController(
|
||||||
|
val documentBriefDao: DocumentBriefDao,
|
||||||
|
) {
|
||||||
|
|
||||||
|
@GetMapping("/document/{id}/link/add")
|
||||||
|
fun addLabel(
|
||||||
|
@PathVariable
|
||||||
|
id: DocumentId,
|
||||||
|
model: Model
|
||||||
|
): String {
|
||||||
|
model["document"] = documentBriefDao.findById(id)
|
||||||
|
model["documents"] = documentBriefDao.findAll(Sort.by(Sort.Direction.ASC, "name"))
|
||||||
|
|
||||||
|
model["addForm"] = AddLinkCommand(
|
||||||
|
id,
|
||||||
|
emptyList(),
|
||||||
|
Direction.OUTGOING
|
||||||
|
)
|
||||||
|
|
||||||
|
return "addLink"
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@PostMapping("/document/{id}/field/label/add")
|
||||||
|
fun addLabel(
|
||||||
|
@PathVariable
|
||||||
|
id: DocumentId,
|
||||||
|
@Valid
|
||||||
|
command: AddLabelFieldCommand
|
||||||
|
): String {
|
||||||
|
addLabelFieldHandler.exec(command)
|
||||||
|
return "redirect:/document/$id"
|
||||||
|
}*/
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
CREATE TABLE t_link
|
||||||
|
(
|
||||||
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
|
document_from INT NOT NULL,
|
||||||
|
document_to INT NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
|
||||||
|
|
||||||
|
CONSTRAINT fk_link_document_from
|
||||||
|
FOREIGN KEY (document_from)
|
||||||
|
REFERENCES t_document (id),
|
||||||
|
|
||||||
|
CONSTRAINT fk_link_document_to
|
||||||
|
FOREIGN KEY (document_to)
|
||||||
|
REFERENCES t_document (id)
|
||||||
|
);
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org"
|
||||||
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
|
layout:decorate="~{base}"
|
||||||
|
lang="">
|
||||||
|
<head>
|
||||||
|
<title th:text="${document.name}"></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main id="content" layout:fragment="content">
|
||||||
|
<a th:href="@{/document/{id}(id=${document.id})}"><< zurück</a>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<span class="low-key-hint">verknüpfung für</span>
|
||||||
|
<th:block th:text="${document.name}"/>
|
||||||
|
<span class="low-key-hint">hinzufügen</span>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<form th:action="@{/document/{id}/link/add(id=${document.id})}"
|
||||||
|
th:object="${addForm}"
|
||||||
|
method="post">
|
||||||
|
<input type="hidden" th:field="*{documentId}">
|
||||||
|
|
||||||
|
<label for="otherDocuments">dokumente</label>
|
||||||
|
<select th:field="*{otherDocuments}" multiple id="otherDocuments">
|
||||||
|
<option th:each="doc: ${documents}"
|
||||||
|
th:value="${doc.id}"
|
||||||
|
th:if="${doc.id != document.id}"
|
||||||
|
th:text="${doc.name}"></option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<button type="submit" value="OUTGOING" name="direction">
|
||||||
|
ausgehend
|
||||||
|
</button>
|
||||||
|
<button type="submit" value="INCOMING" name="direction">
|
||||||
|
eingehend
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
Reference in New Issue