diff --git a/src/main/kotlin/wanijo/wanijo2/domain/document.kt b/src/main/kotlin/wanijo/wanijo2/domain/document.kt index e30c8cc..869a862 100644 --- a/src/main/kotlin/wanijo/wanijo2/domain/document.kt +++ b/src/main/kotlin/wanijo/wanijo2/domain/document.kt @@ -28,6 +28,12 @@ data class Document( labelFields = labelFields + field, updatedAt = ZonedDateTime.now() ) + + fun withoutLabel(fieldId: FieldId) = + copy( + updatedAt = ZonedDateTime.now(), + labelFields = labelFields.filter { it.id != fieldId }.toSet() + ) } @Table("T_DOCUMENT") diff --git a/src/main/kotlin/wanijo/wanijo2/domain/event/DeleteLabelFieldCommand.kt b/src/main/kotlin/wanijo/wanijo2/domain/event/DeleteLabelFieldCommand.kt new file mode 100644 index 0000000..d2b6e48 --- /dev/null +++ b/src/main/kotlin/wanijo/wanijo2/domain/event/DeleteLabelFieldCommand.kt @@ -0,0 +1,12 @@ +package wanijo.wanijo2.domain.event + +import jakarta.validation.constraints.Min +import wanijo.wanijo2.domain.DocumentId +import wanijo.wanijo2.domain.FieldId + +data class DeleteLabelFieldCommand( + @Min(1) + val documentId: DocumentId, + @Min(1) + val labelFieldId: FieldId +) diff --git a/src/main/kotlin/wanijo/wanijo2/domain/fields.kt b/src/main/kotlin/wanijo/wanijo2/domain/fields.kt index e31e593..21a80c9 100644 --- a/src/main/kotlin/wanijo/wanijo2/domain/fields.kt +++ b/src/main/kotlin/wanijo/wanijo2/domain/fields.kt @@ -4,10 +4,12 @@ import org.springframework.data.annotation.Id import org.springframework.data.relational.core.mapping.Table import java.time.ZonedDateTime +typealias FieldId = Long + @Table("T_LABEL_FIELD") data class LabelField( @Id - val id: Long = 0, + val id: FieldId = 0, val order: Int = 0, val name: String, val value: String = "", @@ -18,7 +20,7 @@ data class LabelField( @Table("T_DATE_FIELD") data class DateField( @Id - val id: Long = 0, + val id: FieldId = 0, val order: Int = 0, val name: String, val value: ZonedDateTime, diff --git a/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteLabelFieldHandler.kt b/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteLabelFieldHandler.kt new file mode 100644 index 0000000..3f9000e --- /dev/null +++ b/src/main/kotlin/wanijo/wanijo2/domain/handler/DeleteLabelFieldHandler.kt @@ -0,0 +1,18 @@ +package wanijo.wanijo2.domain.handler + +import org.springframework.stereotype.Service +import wanijo.wanijo2.domain.DocumentDao +import wanijo.wanijo2.domain.event.DeleteLabelFieldCommand +import wanijo.wanijo2.http.DocumentNotFound + +@Service +class DeleteLabelFieldHandler( + val dao: DocumentDao +) { + + fun exec(command: DeleteLabelFieldCommand) { + val doc = dao.findById(command.documentId) ?: throw DocumentNotFound() + dao.save(doc.withoutLabel(command.labelFieldId)) + } + +} diff --git a/src/main/kotlin/wanijo/wanijo2/http/controller/DeleteLabelFieldController.kt b/src/main/kotlin/wanijo/wanijo2/http/controller/DeleteLabelFieldController.kt new file mode 100644 index 0000000..db5fd18 --- /dev/null +++ b/src/main/kotlin/wanijo/wanijo2/http/controller/DeleteLabelFieldController.kt @@ -0,0 +1,27 @@ +package wanijo.wanijo2.http.controller + +import jakarta.validation.Valid +import org.springframework.stereotype.Controller +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.PostMapping +import wanijo.wanijo2.domain.DocumentId +import wanijo.wanijo2.domain.event.DeleteLabelFieldCommand +import wanijo.wanijo2.domain.handler.DeleteLabelFieldHandler + +@Controller +class DeleteLabelFieldController( + val handler: DeleteLabelFieldHandler +) { + + @PostMapping("/document/{id}/field/label/delete") + fun removeLabelField( + @PathVariable + id: DocumentId, + @Valid + command: DeleteLabelFieldCommand + ): String { + handler.exec(command) + return "redirect:/document/$id" + } + +} diff --git a/src/main/kotlin/wanijo/wanijo2/http/controller/RemoveLabelFieldController.kt b/src/main/kotlin/wanijo/wanijo2/http/controller/RemoveLabelFieldController.kt deleted file mode 100644 index 1e15ecd..0000000 --- a/src/main/kotlin/wanijo/wanijo2/http/controller/RemoveLabelFieldController.kt +++ /dev/null @@ -1,7 +0,0 @@ -package wanijo.wanijo2.http.controller - -import org.springframework.stereotype.Controller - -@Controller -class RemoveLabelFieldController { -} diff --git a/src/main/resources/templates/show.html b/src/main/resources/templates/show.html index 25145b8..df61acb 100644 --- a/src/main/resources/templates/show.html +++ b/src/main/resources/templates/show.html @@ -67,7 +67,8 @@
- + +