From 87e820248dbe55e83c5e193a4ab42be4b33e0e2a Mon Sep 17 00:00:00 2001 From: Sim-km Date: Sat, 15 Feb 2025 16:14:30 +0900 Subject: [PATCH] =?UTF-8?q?ASAP-411=20main=20space=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../space/exception/SpaceException.kt | 20 +++++++++++++------ .../space/port/out/SpaceManagementPort.kt | 3 +-- .../space/service/SpaceQueryService.kt | 14 ++++--------- .../space/service/SpaceQueryServiceTest.kt | 9 ++------- .../com/asap/domain/space/entity/MainSpace.kt | 8 -------- .../asap/persistence/jpa/space/SpaceMapper.kt | 6 ------ .../adapter/SpaceManagementJpaAdapter.kt | 13 ++++++------ .../space/repository/SpaceJpaRepository.kt | 16 +++++++++++++++ 8 files changed, 43 insertions(+), 46 deletions(-) delete mode 100644 Domain-Module/src/main/kotlin/com/asap/domain/space/entity/MainSpace.kt diff --git a/Application-Module/src/main/kotlin/com/asap/application/space/exception/SpaceException.kt b/Application-Module/src/main/kotlin/com/asap/application/space/exception/SpaceException.kt index ddc9b4cb..8867de34 100644 --- a/Application-Module/src/main/kotlin/com/asap/application/space/exception/SpaceException.kt +++ b/Application-Module/src/main/kotlin/com/asap/application/space/exception/SpaceException.kt @@ -11,16 +11,24 @@ sealed class SpaceException( class InvalidSpaceUpdateException( message: String = "유효하지 않는 스페이스 순서 변경 요청입니다.", ) : SpaceException( - errorCode = 1, - message = message, - ) + errorCode = 1, + message = message, + ) class SpaceNotFoundException( message: String = "해당 스페이스를 찾을 수 없습니다.", ) : SpaceException( - errorCode = 2, - message = message, - ) + errorCode = 2, + message = message, + ) + + class MainSpaceNotFoundException( + message: String = "메인 스페이스를 찾을 수 없습니다.", + ) : SpaceException( + errorCode = 3, + message = message, + httpStatus = 500 + ) companion object { const val CODE_PREFIX = "SPACE" diff --git a/Application-Module/src/main/kotlin/com/asap/application/space/port/out/SpaceManagementPort.kt b/Application-Module/src/main/kotlin/com/asap/application/space/port/out/SpaceManagementPort.kt index b9973535..720f5c92 100644 --- a/Application-Module/src/main/kotlin/com/asap/application/space/port/out/SpaceManagementPort.kt +++ b/Application-Module/src/main/kotlin/com/asap/application/space/port/out/SpaceManagementPort.kt @@ -1,11 +1,10 @@ package com.asap.application.space.port.out import com.asap.domain.common.DomainId -import com.asap.domain.space.entity.MainSpace import com.asap.domain.space.entity.Space interface SpaceManagementPort { - fun getMainSpace(userId: DomainId): MainSpace + fun getMainSpace(userId: DomainId): Space fun getSpaceNotNull( userId: DomainId, diff --git a/Application-Module/src/main/kotlin/com/asap/application/space/service/SpaceQueryService.kt b/Application-Module/src/main/kotlin/com/asap/application/space/service/SpaceQueryService.kt index 602a0beb..1940caf0 100644 --- a/Application-Module/src/main/kotlin/com/asap/application/space/service/SpaceQueryService.kt +++ b/Application-Module/src/main/kotlin/com/asap/application/space/service/SpaceQueryService.kt @@ -18,17 +18,11 @@ class SpaceQueryService( ) : GetMainSpaceUsecase, GetSpaceUsecase { override fun get(query: GetMainSpaceUsecase.Query): GetMainSpaceUsecase.Response { - val mainSpace = - spaceManagementPort.getMainSpace( - userId = DomainId(query.userId), - ) - val space = - spaceManagementPort.getSpaceNotNull( - userId = DomainId(query.userId), - spaceId = mainSpace.id, - ) + val space = spaceManagementPort.getMainSpace( + userId = DomainId(query.userId), + ) return GetMainSpaceUsecase.Response( - id = mainSpace.id.value, + id = space.id.value, username = userManagementPort.getUserNotNull(DomainId(query.userId)).username, templateType = space.templateType, spaceName = space.name, diff --git a/Application-Module/src/test/kotlin/com/asap/application/space/service/SpaceQueryServiceTest.kt b/Application-Module/src/test/kotlin/com/asap/application/space/service/SpaceQueryServiceTest.kt index b6ca5ccc..cb532c6c 100644 --- a/Application-Module/src/test/kotlin/com/asap/application/space/service/SpaceQueryServiceTest.kt +++ b/Application-Module/src/test/kotlin/com/asap/application/space/service/SpaceQueryServiceTest.kt @@ -8,7 +8,6 @@ import com.asap.application.user.port.out.UserManagementPort import com.asap.domain.SpaceFixture import com.asap.domain.UserFixture import com.asap.domain.common.DomainId -import com.asap.domain.space.entity.MainSpace import io.kotest.core.spec.style.BehaviorSpec import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe @@ -30,10 +29,6 @@ class SpaceQueryServiceTest : ) given("메인 스페이스 조회 요청이 들어왔을 때") { - val mainSpace = - MainSpace( - id = DomainId.generate(), - ) val user = UserFixture.createUser() val query = GetMainSpaceUsecase.Query( @@ -42,13 +37,13 @@ class SpaceQueryServiceTest : val space = SpaceFixture.createSpace( userId = user.id, ) - every { spaceManagementPort.getMainSpace(any()) } returns mainSpace + every { spaceManagementPort.getMainSpace(any()) } returns space every { userManagementPort.getUserNotNull(any()) } returns user every { spaceManagementPort.getSpaceNotNull(any(), any()) } returns space `when`("유저 아이디가 주어진다면") { val response = spaceQueryService.get(query) then("메인 스페이스를 반환한다") { - response.id shouldBe mainSpace.id.value + response.id shouldBe space.id.value response.username shouldBe user.username response.templateType shouldBe space.templateType response.spaceName shouldBe space.name diff --git a/Domain-Module/src/main/kotlin/com/asap/domain/space/entity/MainSpace.kt b/Domain-Module/src/main/kotlin/com/asap/domain/space/entity/MainSpace.kt deleted file mode 100644 index 71eb56c0..00000000 --- a/Domain-Module/src/main/kotlin/com/asap/domain/space/entity/MainSpace.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.asap.domain.space.entity - -import com.asap.domain.common.DomainId - -data class MainSpace( - val id: DomainId -) { -} \ No newline at end of file diff --git a/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/SpaceMapper.kt b/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/SpaceMapper.kt index f6c8a095..9c7b1fe8 100644 --- a/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/SpaceMapper.kt +++ b/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/SpaceMapper.kt @@ -1,16 +1,10 @@ package com.asap.persistence.jpa.space import com.asap.domain.common.DomainId -import com.asap.domain.space.entity.MainSpace import com.asap.domain.space.entity.Space import com.asap.persistence.jpa.space.entity.SpaceEntity object SpaceMapper { - fun toMainSpace(spaceEntity: SpaceEntity): MainSpace = - MainSpace( - id = DomainId(spaceEntity.id), - ) - fun toSpace(spaceEntity: SpaceEntity) = Space( id = DomainId(spaceEntity.id), diff --git a/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/adapter/SpaceManagementJpaAdapter.kt b/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/adapter/SpaceManagementJpaAdapter.kt index 4f12b165..8a22d4be 100644 --- a/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/adapter/SpaceManagementJpaAdapter.kt +++ b/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/adapter/SpaceManagementJpaAdapter.kt @@ -4,7 +4,6 @@ import com.asap.application.space.exception.SpaceException import com.asap.application.space.port.out.SpaceManagementPort import com.asap.common.event.EventPublisher import com.asap.domain.common.DomainId -import com.asap.domain.space.entity.MainSpace import com.asap.domain.space.entity.Space import com.asap.persistence.jpa.space.SpaceMapper import com.asap.persistence.jpa.space.repository.* @@ -15,14 +14,14 @@ class SpaceManagementJpaAdapter( private val spaceJpaRepository: SpaceJpaRepository, private val eventPublisher: EventPublisher, ) : SpaceManagementPort { - override fun getMainSpace(userId: DomainId): MainSpace = + override fun getMainSpace(userId: DomainId): Space = spaceJpaRepository - .findAllActiveSpaceByUserId(userId.value) - .first { - it.isMain - }.let { - SpaceMapper.toMainSpace(it) + .findActiveMainSpace(userId.value) + ?.let { + SpaceMapper.toSpace(it) } + ?: throw SpaceException.MainSpaceNotFoundException() + override fun getSpaceNotNull( userId: DomainId, diff --git a/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/repository/SpaceJpaRepository.kt b/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/repository/SpaceJpaRepository.kt index 4cbfefd3..9a95af83 100644 --- a/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/repository/SpaceJpaRepository.kt +++ b/Infrastructure-Module/Persistence/src/main/kotlin/com/asap/persistence/jpa/space/repository/SpaceJpaRepository.kt @@ -63,6 +63,18 @@ interface SpaceJpaRepository : JpaRepository { entityStatus: EntityStatus, ): List + @Query(""" + SELECT s + FROM SpaceEntity s + WHERE s.isMain = true + AND s.userId = :userId + AND s.spaceStatus = :entityStatus + """) + fun findMainSpace( + userId: String, + entityStatus: EntityStatus + ): SpaceEntity? + @Modifying @Query( """ @@ -105,4 +117,8 @@ fun SpaceJpaRepository.findActiveSpaceByIdAndUserId( userId: String, ): SpaceEntity? = findByIdAndUserId(id, userId, EntityStatus.ACTIVE) +fun SpaceJpaRepository.findActiveMainSpace( + userId: String, +): SpaceEntity? = findMainSpace(userId, EntityStatus.ACTIVE) + fun SpaceJpaRepository.countActiveSpaceByUserId(userId: String): Long = countByUserId(userId, EntityStatus.ACTIVE)