diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/event/timeline/TimelineEvent.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/event/timeline/TimelineEvent.kt new file mode 100644 index 00000000..781752fe --- /dev/null +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/event/timeline/TimelineEvent.kt @@ -0,0 +1,16 @@ +package dev.usbharu.hideout.core.domain.event.timeline + +import dev.usbharu.hideout.core.domain.model.timeline.Timeline +import dev.usbharu.hideout.core.domain.shared.domainevent.DomainEvent +import dev.usbharu.hideout.core.domain.shared.domainevent.DomainEventBody + +class TimelineEventFactory(private val timeline: Timeline) { + fun createEvent(timelineEvent: TimelineEvent): DomainEvent = + DomainEvent.create(timelineEvent.eventName, TimelineEventBody(timeline)) +} + +class TimelineEventBody(timeline: Timeline) : DomainEventBody(mapOf("timeline" to timeline)) + +enum class TimelineEvent(val eventName: String) { + CHANGE_VISIBILITY("ChangeVisibility") +} \ No newline at end of file diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/Timeline.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/Timeline.kt index 89c9e2f7..1a421254 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/Timeline.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/Timeline.kt @@ -1,3 +1,30 @@ package dev.usbharu.hideout.core.domain.model.timeline -class Timeline(val id: TimelineId, val name: TimelineName, val visibility: TimelineVisibility, val isSystem: Boolean) \ No newline at end of file +import dev.usbharu.hideout.core.domain.event.timeline.TimelineEvent +import dev.usbharu.hideout.core.domain.event.timeline.TimelineEventFactory +import dev.usbharu.hideout.core.domain.model.userdetails.UserDetail +import dev.usbharu.hideout.core.domain.model.userdetails.UserDetailId +import dev.usbharu.hideout.core.domain.shared.domainevent.DomainEventStorable + +class Timeline( + val id: TimelineId, + val userDetailId: UserDetailId, + name: TimelineName, + visibility: TimelineVisibility, + val isSystem: Boolean +) : DomainEventStorable() { + var visibility = visibility + private set + + fun setVisibility(visibility: TimelineVisibility, userDetail: UserDetail) { + check(isSystem.not()) + require(userDetailId == userDetail.id) + this.visibility = visibility + addDomainEvent(TimelineEventFactory(this).createEvent(TimelineEvent.CHANGE_VISIBILITY)) + } + + var name = name + private set + + +} \ No newline at end of file diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineId.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineId.kt index 953eda15..c93738d8 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineId.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineId.kt @@ -1,5 +1,4 @@ package dev.usbharu.hideout.core.domain.model.timeline -class TimelineId { - -} +@JvmInline +value class TimelineId(val value: Long) diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineName.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineName.kt index 6d096c8d..a8dd2f87 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineName.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineName.kt @@ -1,5 +1,4 @@ package dev.usbharu.hideout.core.domain.model.timeline -class TimelineName { - -} +@JvmInline +value class TimelineName(val value: String) diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timelinebuilder/TimelineBuilderId.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timelinebuilder/TimelineBuilderId.kt index 7312beb8..e54b4ab2 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timelinebuilder/TimelineBuilderId.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timelinebuilder/TimelineBuilderId.kt @@ -1,5 +1,4 @@ package dev.usbharu.hideout.core.domain.model.timelinebuilder -class TimelineBuilderId { - -} +@JvmInline +value class TimelineBuilderId(val value: Long)