From cf0b0017f6a722af962f60c1ef6c575fb9ef78bb Mon Sep 17 00:00:00 2001 From: usbharu <64310155+usbharu@users.noreply.github.com> Date: Sat, 7 Sep 2024 16:44:30 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=80=E6=9C=89=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=82=8B=E3=82=BF=E3=82=A4=E3=83=A0=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=81=AE=E4=B8=80=E8=A6=A7=E3=82=92=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/application/model/Timeline.kt | 23 ++++++++++++ .../core/application/timeline/GetTimelines.kt | 3 ++ .../UserGetTimelinesApplicationService.kt | 37 +++++++++++++++++++ .../model/timeline/TimelineRepository.kt | 6 +++ 4 files changed, 69 insertions(+) create mode 100644 hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/model/Timeline.kt create mode 100644 hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/timeline/GetTimelines.kt create mode 100644 hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/timeline/UserGetTimelinesApplicationService.kt diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/model/Timeline.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/model/Timeline.kt new file mode 100644 index 00000000..8abc559a --- /dev/null +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/model/Timeline.kt @@ -0,0 +1,23 @@ +package dev.usbharu.hideout.core.application.model + +import dev.usbharu.hideout.core.domain.model.timeline.TimelineVisibility + +data class Timeline( + val id: Long, + val userDetailId: Long, + val name: String, + val visibility: TimelineVisibility, + val isSystem: Boolean +) { + companion object { + fun of(timeline: dev.usbharu.hideout.core.domain.model.timeline.Timeline): Timeline { + return Timeline( + timeline.id.value, + timeline.userDetailId.id, + timeline.name.value, + timeline.visibility, + timeline.isSystem + ) + } + } +} diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/timeline/GetTimelines.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/timeline/GetTimelines.kt new file mode 100644 index 00000000..a4233829 --- /dev/null +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/timeline/GetTimelines.kt @@ -0,0 +1,3 @@ +package dev.usbharu.hideout.core.application.timeline + +data class GetTimelines(val userDetailId: Long) diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/timeline/UserGetTimelinesApplicationService.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/timeline/UserGetTimelinesApplicationService.kt new file mode 100644 index 00000000..f6cf8e5c --- /dev/null +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/application/timeline/UserGetTimelinesApplicationService.kt @@ -0,0 +1,37 @@ +package dev.usbharu.hideout.core.application.timeline + +import dev.usbharu.hideout.core.application.model.Timeline +import dev.usbharu.hideout.core.application.shared.AbstractApplicationService +import dev.usbharu.hideout.core.application.shared.Transaction +import dev.usbharu.hideout.core.domain.model.support.principal.Principal +import dev.usbharu.hideout.core.domain.model.timeline.TimelineRepository +import dev.usbharu.hideout.core.domain.model.timeline.TimelineVisibility +import dev.usbharu.hideout.core.domain.model.userdetails.UserDetailId +import org.slf4j.LoggerFactory +import org.springframework.stereotype.Service + +@Service +class UserGetTimelinesApplicationService(transaction: Transaction, private val timelineRepository: TimelineRepository) : + AbstractApplicationService>( + transaction, logger + ) { + override suspend fun internalExecute(command: GetTimelines, principal: Principal): List { + + val userDetailId = UserDetailId(command.userDetailId) + + val timelineVisibility = if (userDetailId == principal.userDetailId) { + listOf(TimelineVisibility.PUBLIC, TimelineVisibility.UNLISTED, TimelineVisibility.PRIVATE) + } else { + listOf(TimelineVisibility.PUBLIC) + } + + val timelineList = + timelineRepository.findAllByUserDetailIdAndVisibilityIn(userDetailId, timelineVisibility) + + return timelineList.map { Timeline.of(it) } + } + + companion object { + private val logger = LoggerFactory.getLogger(UserGetTimelinesApplicationService::class.java) + } +} \ No newline at end of file diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineRepository.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineRepository.kt index 28fdb0f1..c0d4242f 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineRepository.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/domain/model/timeline/TimelineRepository.kt @@ -1,5 +1,7 @@ package dev.usbharu.hideout.core.domain.model.timeline +import dev.usbharu.hideout.core.domain.model.userdetails.UserDetailId + interface TimelineRepository { suspend fun save(timeline: Timeline): Timeline suspend fun delete(timeline: Timeline) @@ -7,4 +9,8 @@ interface TimelineRepository { suspend fun findByIds(ids: List): List suspend fun findById(id: TimelineId): Timeline? + suspend fun findAllByUserDetailIdAndVisibilityIn( + userDetailId: UserDetailId, + visibility: List + ): List }