From 7a395a9906dcc9dbfc5a9d90090207d6109c1874 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 2 Jan 2025 22:46:57 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=B1=20-=20=EC=98=A4=EB=94=94=EC=85=98=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=20API=20-=20=EA=B8=B0=EC=A1=B4=EC=97=90=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=ED=95=9C=20=EB=82=B4=EC=97=AD=EC=9D=B4=20?= =?UTF-8?q?=EC=9E=88=EC=9C=BC=EB=A9=B4=20false=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=ED=9B=84=20=EC=A7=80=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/audition/AuditionApplicant.kt | 2 +- .../applicant/AuditionApplicantRepository.kt | 13 +++++++++++++ .../audition/applicant/AuditionApplicantService.kt | 10 ++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/audition/AuditionApplicant.kt b/src/main/kotlin/kr/co/vividnext/sodalive/audition/AuditionApplicant.kt index 21dc568..fcba813 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/audition/AuditionApplicant.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/audition/AuditionApplicant.kt @@ -11,7 +11,7 @@ import javax.persistence.ManyToOne data class AuditionApplicant( val phoneNumber: String, var voicePath: String? = null, - val isActive: Boolean = true + var isActive: Boolean = true ) : BaseEntity() { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "role_id", nullable = false) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/audition/applicant/AuditionApplicantRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/audition/applicant/AuditionApplicantRepository.kt index 23f88ac..c20599f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/audition/applicant/AuditionApplicantRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/audition/applicant/AuditionApplicantRepository.kt @@ -20,6 +20,8 @@ interface AuditionApplicantQueryRepository { offset: Long, limit: Long ): List + + fun findActiveApplicantByMemberIdAndRoleId(memberId: Long, roleId: Long): AuditionApplicant? } class AuditionApplicantQueryRepositoryImpl( @@ -90,4 +92,15 @@ class AuditionApplicantQueryRepositoryImpl( .orderBy(orderBy) .fetch() } + + override fun findActiveApplicantByMemberIdAndRoleId(memberId: Long, roleId: Long): AuditionApplicant? { + return queryFactory + .selectFrom(auditionApplicant) + .where( + auditionApplicant.isActive.isTrue + .and(auditionApplicant.member.id.eq(memberId)) + .and(auditionApplicant.role.id.eq(roleId)) + ) + .fetchFirst() + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/audition/applicant/AuditionApplicantService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/audition/applicant/AuditionApplicantService.kt index d27f7ca..971bd01 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/audition/applicant/AuditionApplicantService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/audition/applicant/AuditionApplicantService.kt @@ -53,6 +53,16 @@ class AuditionApplicantService( val auditionRole = roleRepository.findByIdOrNull(id = request.roleId) ?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.") + val existingApplicant = repository.findActiveApplicantByMemberIdAndRoleId( + memberId = member.id!!, + roleId = auditionRole.id!! + ) + + if (existingApplicant != null) { + existingApplicant.isActive = false + repository.save(existingApplicant) + } + val applicant = AuditionApplicant(phoneNumber = request.phoneNumber) applicant.role = auditionRole applicant.member = member