From 688764d2f7f6f0f405c85a294a63d93992cc6c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EA=B2=BD?= Date: Thu, 8 Feb 2024 03:16:38 +0900 Subject: [PATCH] =?UTF-8?q?add=20::=20=EC=A1=B0=EA=B8=B0=EA=B7=80=EA=B0=80?= =?UTF-8?q?=EC=8B=A0=EC=B2=AD=20=EC=A4=91=EB=B3=B5=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/AlreadyApplyingForEarlyReturnException.kt | 8 ++++++++ .../persistence/EarlyReturnPersistenceAdapter.kt | 3 +++ .../persistence/repository/EarlyReturnRepository.kt | 4 +++- .../domain/application/port/out/EarlyReturnPort.kt | 4 +++- .../port/out/ExistsEarlyReturnByUsernamePort.kt | 5 +++++ .../application/service/CreateEarlyReturnService.kt | 8 ++++++++ .../dsm/pick2024/global/error/exception/ErrorCode.kt | 2 ++ 7 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/dsm/pick2024/domain/application/exception/AlreadyApplyingForEarlyReturnException.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/application/port/out/ExistsEarlyReturnByUsernamePort.kt diff --git a/src/main/kotlin/dsm/pick2024/domain/application/exception/AlreadyApplyingForEarlyReturnException.kt b/src/main/kotlin/dsm/pick2024/domain/application/exception/AlreadyApplyingForEarlyReturnException.kt new file mode 100644 index 00000000..722b96f7 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/application/exception/AlreadyApplyingForEarlyReturnException.kt @@ -0,0 +1,8 @@ +package dsm.pick2024.domain.application.exception + +import dsm.pick2024.global.error.exception.ErrorCode +import dsm.pick2024.global.error.exception.PickException + +object AlreadyApplyingForEarlyReturnException : PickException( + ErrorCode.ALREADY_APPLYING_EARLY_RETURN +) diff --git a/src/main/kotlin/dsm/pick2024/domain/application/persistence/EarlyReturnPersistenceAdapter.kt b/src/main/kotlin/dsm/pick2024/domain/application/persistence/EarlyReturnPersistenceAdapter.kt index 86d09b09..b4e09337 100644 --- a/src/main/kotlin/dsm/pick2024/domain/application/persistence/EarlyReturnPersistenceAdapter.kt +++ b/src/main/kotlin/dsm/pick2024/domain/application/persistence/EarlyReturnPersistenceAdapter.kt @@ -15,4 +15,7 @@ class EarlyReturnPersistenceAdapter( override fun save(earlyReturn: EarlyReturn) { earlyReturnRepository.save(earlyReturnMapper.toEntity(earlyReturn)) } + + override fun existsByUsername(username: String) = + earlyReturnRepository.existsByUsername(username) } diff --git a/src/main/kotlin/dsm/pick2024/domain/application/persistence/repository/EarlyReturnRepository.kt b/src/main/kotlin/dsm/pick2024/domain/application/persistence/repository/EarlyReturnRepository.kt index 5970bc1f..c888868a 100644 --- a/src/main/kotlin/dsm/pick2024/domain/application/persistence/repository/EarlyReturnRepository.kt +++ b/src/main/kotlin/dsm/pick2024/domain/application/persistence/repository/EarlyReturnRepository.kt @@ -4,4 +4,6 @@ import dsm.pick2024.domain.application.entity.EarlyReturnJpaEntity import org.springframework.data.jpa.repository.JpaRepository import java.util.UUID -interface EarlyReturnRepository : JpaRepository +interface EarlyReturnRepository : JpaRepository { + fun existsByUsername(username: String): Boolean +} diff --git a/src/main/kotlin/dsm/pick2024/domain/application/port/out/EarlyReturnPort.kt b/src/main/kotlin/dsm/pick2024/domain/application/port/out/EarlyReturnPort.kt index 881e2346..6a8fe4af 100644 --- a/src/main/kotlin/dsm/pick2024/domain/application/port/out/EarlyReturnPort.kt +++ b/src/main/kotlin/dsm/pick2024/domain/application/port/out/EarlyReturnPort.kt @@ -1,3 +1,5 @@ package dsm.pick2024.domain.application.port.out -interface EarlyReturnPort : SaveEarlyReturnPort +interface EarlyReturnPort : + SaveEarlyReturnPort, + ExistsEarlyReturnByUsernamePort diff --git a/src/main/kotlin/dsm/pick2024/domain/application/port/out/ExistsEarlyReturnByUsernamePort.kt b/src/main/kotlin/dsm/pick2024/domain/application/port/out/ExistsEarlyReturnByUsernamePort.kt new file mode 100644 index 00000000..71f97579 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/application/port/out/ExistsEarlyReturnByUsernamePort.kt @@ -0,0 +1,5 @@ +package dsm.pick2024.domain.application.port.out + +interface ExistsEarlyReturnByUsernamePort { + fun existsByUsername(username: String): Boolean? +} diff --git a/src/main/kotlin/dsm/pick2024/domain/application/service/CreateEarlyReturnService.kt b/src/main/kotlin/dsm/pick2024/domain/application/service/CreateEarlyReturnService.kt index 97d2d269..a9e8ad03 100644 --- a/src/main/kotlin/dsm/pick2024/domain/application/service/CreateEarlyReturnService.kt +++ b/src/main/kotlin/dsm/pick2024/domain/application/service/CreateEarlyReturnService.kt @@ -2,7 +2,9 @@ package dsm.pick2024.domain.application.service import dsm.pick2024.domain.application.domain.EarlyReturn import dsm.pick2024.domain.application.enums.Status +import dsm.pick2024.domain.application.exception.AlreadyApplyingForEarlyReturnException import dsm.pick2024.domain.application.port.`in`.CreateEarlyReturnUseCase +import dsm.pick2024.domain.application.port.out.ExistsEarlyReturnByUsernamePort import dsm.pick2024.domain.application.port.out.SaveEarlyReturnPort import dsm.pick2024.domain.application.presentation.dto.request.CreateEarlyReturnRequest import dsm.pick2024.domain.user.port.`in`.UserFacadeUseCase @@ -12,12 +14,18 @@ import org.springframework.transaction.annotation.Transactional @Service class CreateEarlyReturnService( private val saveEarlyReturnPort: SaveEarlyReturnPort, + private val existsEarlyReturnByUsernamePort: ExistsEarlyReturnByUsernamePort, private val userFacadeUseCase: UserFacadeUseCase ) : CreateEarlyReturnUseCase { @Transactional override fun createEarlyReturn(request: CreateEarlyReturnRequest) { val user = userFacadeUseCase.currentUser() + + if (existsEarlyReturnByUsernamePort.existsByUsername(user.name) == true) { + throw AlreadyApplyingForEarlyReturnException + } + saveEarlyReturnPort.save( EarlyReturn( username = user.name, diff --git a/src/main/kotlin/dsm/pick2024/global/error/exception/ErrorCode.kt b/src/main/kotlin/dsm/pick2024/global/error/exception/ErrorCode.kt index 66f1c830..f0bfe909 100644 --- a/src/main/kotlin/dsm/pick2024/global/error/exception/ErrorCode.kt +++ b/src/main/kotlin/dsm/pick2024/global/error/exception/ErrorCode.kt @@ -17,6 +17,8 @@ enum class ErrorCode( SELF_STUDY_NOT_FOUND(404, "Self Study Not Found"), EXISTS_SELF_STUDY_TEACHER(409, "Exists Self Study Teacher"), + ALREADY_APPLYING_EARLY_RETURN(409, "Already applying For Early Return Application"), + ALREADY_APPLYING_MOVEMENT(409, "Already applying for movement"), INVALID_TOKEN(401, "Invalid Token"),