From 540fe0eaa55268f2b299c16818e10c7e92d00a05 Mon Sep 17 00:00:00 2001 From: usbharu <64310155+usbharu@users.noreply.github.com> Date: Sun, 11 Aug 2024 01:22:43 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A8=A9=E9=99=90=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E7=AD=89=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accounts/GetAccountApplicationService.kt | 8 +++---- .../DeleteFilterV1ApplicationService.kt | 22 +++++++++++-------- .../filter/GetFilterV1ApplicationService.kt | 7 +++++- .../status/GetStatusApplicationService.kt | 12 +++++----- .../exposedquery/ExposedStatusQueryService.kt | 3 ++- .../mastodon/query/StatusQueryService.kt | 3 ++- 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/accounts/GetAccountApplicationService.kt b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/accounts/GetAccountApplicationService.kt index d2611534..04d274a4 100644 --- a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/accounts/GetAccountApplicationService.kt +++ b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/accounts/GetAccountApplicationService.kt @@ -16,9 +16,9 @@ package dev.usbharu.hideout.mastodon.application.accounts -import dev.usbharu.hideout.core.application.shared.AbstractApplicationService +import dev.usbharu.hideout.core.application.shared.LocalUserAbstractApplicationService 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.support.principal.FromApi import dev.usbharu.hideout.mastodon.interfaces.api.generated.model.Account import dev.usbharu.hideout.mastodon.query.AccountQueryService import org.slf4j.LoggerFactory @@ -26,11 +26,11 @@ import org.springframework.stereotype.Service @Service class GetAccountApplicationService(private val accountQueryService: AccountQueryService, transaction: Transaction) : - AbstractApplicationService( + LocalUserAbstractApplicationService( transaction, logger ) { - override suspend fun internalExecute(command: GetAccount, principal: Principal): Account { + override suspend fun internalExecute(command: GetAccount, principal: FromApi): Account { return accountQueryService.findById(command.accountId.toLong()) ?: throw Exception("Account not found") } diff --git a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/filter/DeleteFilterV1ApplicationService.kt b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/filter/DeleteFilterV1ApplicationService.kt index 2a722f01..919d51ef 100644 --- a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/filter/DeleteFilterV1ApplicationService.kt +++ b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/filter/DeleteFilterV1ApplicationService.kt @@ -16,26 +16,30 @@ package dev.usbharu.hideout.mastodon.application.filter -import dev.usbharu.hideout.core.application.shared.AbstractApplicationService +import dev.usbharu.hideout.core.application.exception.PermissionDeniedException +import dev.usbharu.hideout.core.application.shared.LocalUserAbstractApplicationService import dev.usbharu.hideout.core.application.shared.Transaction import dev.usbharu.hideout.core.domain.model.filter.FilterKeywordId import dev.usbharu.hideout.core.domain.model.filter.FilterRepository -import dev.usbharu.hideout.core.domain.model.support.principal.Principal +import dev.usbharu.hideout.core.domain.model.support.principal.FromApi import org.slf4j.LoggerFactory import org.springframework.stereotype.Service @Service class DeleteFilterV1ApplicationService(private val filterRepository: FilterRepository, transaction: Transaction) : - AbstractApplicationService( + LocalUserAbstractApplicationService( transaction, logger ) { + override suspend fun internalExecute(command: DeleteFilterV1, principal: FromApi) { + val filter = filterRepository.findByFilterKeywordId(FilterKeywordId(command.filterKeywordId)) + ?: throw IllegalArgumentException("Filter ${command.filterKeywordId} not found") + if (principal.userDetailId != filter.userDetailId) { + throw PermissionDeniedException() + } + filterRepository.delete(filter) + } + companion object { private val logger = LoggerFactory.getLogger(DeleteFilterV1ApplicationService::class.java) } - - override suspend fun internalExecute(command: DeleteFilterV1, principal: Principal) { - val filter = filterRepository.findByFilterKeywordId(FilterKeywordId(command.filterKeywordId)) - ?: throw Exception("Not Found") - filterRepository.delete(filter) - } } \ No newline at end of file diff --git a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/filter/GetFilterV1ApplicationService.kt b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/filter/GetFilterV1ApplicationService.kt index 057b7b1a..e79c8513 100644 --- a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/filter/GetFilterV1ApplicationService.kt +++ b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/filter/GetFilterV1ApplicationService.kt @@ -16,6 +16,7 @@ package dev.usbharu.hideout.mastodon.application.filter +import dev.usbharu.hideout.core.application.exception.PermissionDeniedException import dev.usbharu.hideout.core.application.shared.AbstractApplicationService import dev.usbharu.hideout.core.application.shared.Transaction import dev.usbharu.hideout.core.domain.model.filter.FilterContext.* @@ -34,7 +35,11 @@ class GetFilterV1ApplicationService(private val filterRepository: FilterReposito ) { override suspend fun internalExecute(command: GetFilterV1, principal: Principal): V1Filter { val filter = filterRepository.findByFilterKeywordId(FilterKeywordId(command.filterKeywordId)) - ?: throw Exception("Not Found") + ?: throw IllegalArgumentException("Filter ${command.filterKeywordId} not found") + + if (filter.userDetailId != principal.userDetailId) { + throw PermissionDeniedException() + } val filterKeyword = filter.filterKeywords.find { it.id.id == command.filterKeywordId } return V1Filter( diff --git a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/status/GetStatusApplicationService.kt b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/status/GetStatusApplicationService.kt index 63bccc23..3121de94 100644 --- a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/status/GetStatusApplicationService.kt +++ b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/application/status/GetStatusApplicationService.kt @@ -16,9 +16,9 @@ package dev.usbharu.hideout.mastodon.application.status -import dev.usbharu.hideout.core.application.shared.AbstractApplicationService +import dev.usbharu.hideout.core.application.shared.LocalUserAbstractApplicationService 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.support.principal.FromApi import dev.usbharu.hideout.mastodon.interfaces.api.generated.model.Status import dev.usbharu.hideout.mastodon.query.StatusQueryService import org.slf4j.LoggerFactory @@ -28,7 +28,7 @@ import org.springframework.stereotype.Service class GetStatusApplicationService( private val statusQueryService: StatusQueryService, transaction: Transaction, -) : AbstractApplicationService( +) : LocalUserAbstractApplicationService( transaction, logger ) { @@ -36,7 +36,9 @@ class GetStatusApplicationService( val logger = LoggerFactory.getLogger(GetStatusApplicationService::class.java)!! } - override suspend fun internalExecute(command: GetStatus, principal: Principal): Status { - return statusQueryService.findByPostId(command.id.toLong()) ?: throw Exception("Not fount") + override suspend fun internalExecute(command: GetStatus, principal: FromApi): Status { + return statusQueryService.findByPostId(command.id.toLong()) + ?: throw IllegalArgumentException("Post ${command.id} not found.") + } } \ No newline at end of file diff --git a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/infrastructure/exposedquery/ExposedStatusQueryService.kt b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/infrastructure/exposedquery/ExposedStatusQueryService.kt index 98a8a4c4..2d3a4bc7 100644 --- a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/infrastructure/exposedquery/ExposedStatusQueryService.kt +++ b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/infrastructure/exposedquery/ExposedStatusQueryService.kt @@ -19,6 +19,7 @@ package dev.usbharu.hideout.mastodon.infrastructure.exposedquery import dev.usbharu.hideout.core.domain.model.emoji.CustomEmoji import dev.usbharu.hideout.core.domain.model.media.* import dev.usbharu.hideout.core.domain.model.post.Visibility +import dev.usbharu.hideout.core.domain.model.support.principal.Principal import dev.usbharu.hideout.core.infrastructure.exposedrepository.* import dev.usbharu.hideout.mastodon.interfaces.api.generated.model.Account import dev.usbharu.hideout.mastodon.interfaces.api.generated.model.MediaAttachment @@ -117,7 +118,7 @@ class StatusQueryServiceImpl : StatusQueryService { return statuses } - override suspend fun findByPostId(id: Long): Status? { + override suspend fun findByPostId(id: Long, principal: Principal?): Status? { val map = Posts .leftJoin(PostsMedia) .leftJoin(Actors) diff --git a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/query/StatusQueryService.kt b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/query/StatusQueryService.kt index dc7cc88e..34bf05da 100644 --- a/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/query/StatusQueryService.kt +++ b/hideout-mastodon/src/main/kotlin/dev/usbharu/hideout/mastodon/query/StatusQueryService.kt @@ -16,6 +16,7 @@ package dev.usbharu.hideout.mastodon.query +import dev.usbharu.hideout.core.domain.model.support.principal.Principal import dev.usbharu.hideout.mastodon.interfaces.api.generated.model.Status interface StatusQueryService { @@ -33,7 +34,7 @@ interface StatusQueryService { includeFollowers: Boolean = false, ): List - suspend fun findByPostId(id: Long): Status? + suspend fun findByPostId(id: Long, principal: Principal? = null): Status? } data class StatusQuery(