From 14d0ae985189ec7dfb207f1498d3cdb40e6c37f0 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 22 Dec 2025 21:49:07 +0900 Subject: [PATCH] =?UTF-8?q?=EC=98=A4=EB=94=94=EC=85=98=20=EB=B0=B0?= =?UTF-8?q?=EC=97=AD=20=EB=93=B1=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=8B=A4?= =?UTF-8?q?=EA=B5=AD=EC=96=B4=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../audition/role/AdminAuditionRoleService.kt | 12 ++- .../role/CreateAuditionRoleRequest.kt | 8 +- .../role/UpdateAuditionRoleRequest.kt | 2 +- .../ratio/CreatorSettlementRatioService.kt | 12 +-- .../sodalive/admin/can/AdminCanService.kt | 10 +-- .../sodalive/i18n/SodaMessageSource.kt | 74 ++++++++++++++++++- 6 files changed, 97 insertions(+), 21 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/AdminAuditionRoleService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/AdminAuditionRoleService.kt index 5e5b24a0..f1a4b080 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/AdminAuditionRoleService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/AdminAuditionRoleService.kt @@ -31,7 +31,7 @@ class AdminAuditionRoleService( auditionScriptUrl = request.auditionScriptUrl ) val audition = auditionRepository.findByIdOrNull(id = request.auditionId) - ?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.") + ?: throw SodaException(messageKey = "admin.audition.invalid_request_retry") auditionRole.audition = audition repository.save(auditionRole) @@ -48,15 +48,19 @@ class AdminAuditionRoleService( fun updateAuditionRole(image: MultipartFile?, requestString: String) { val request = objectMapper.readValue(requestString, UpdateAuditionRoleRequest::class.java) val auditionRole = repository.findByIdOrNull(id = request.id) - ?: throw SodaException("잘못된 요청입니다.\n다시 시도해 주세요.") + ?: throw SodaException(messageKey = "admin.audition.invalid_request_retry") if (!request.name.isNullOrBlank()) { - if (request.name.length < 2) throw SodaException("배역 이름은 최소 2글자 입니다") + if (request.name.length < 2) { + throw SodaException(messageKey = "admin.audition.role.name_min_length") + } auditionRole.name = request.name } if (!request.information.isNullOrBlank()) { - if (request.information.length < 10) throw SodaException("오디션 배역 정보는 최소 10글자 입니다") + if (request.information.length < 10) { + throw SodaException(messageKey = "admin.audition.role.information_min_length") + } auditionRole.information = request.information } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/CreateAuditionRoleRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/CreateAuditionRoleRequest.kt index 1332e8f2..39c8d28f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/CreateAuditionRoleRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/CreateAuditionRoleRequest.kt @@ -10,19 +10,19 @@ data class CreateAuditionRoleRequest( ) { init { if (auditionId < 0) { - throw SodaException("캐릭터가 등록될 오디션을 선택하세요") + throw SodaException(messageKey = "admin.audition.role.audition_required") } if (name.isBlank() || name.length < 2) { - throw SodaException("캐릭터명을 입력하세요") + throw SodaException(messageKey = "admin.audition.role.name_required") } if (auditionScriptUrl.isBlank() || auditionScriptUrl.length < 10) { - throw SodaException("오디션 대본 URL을 입력하세요") + throw SodaException(messageKey = "admin.audition.role.script_url_required") } if (information.isBlank() || information.length < 10) { - throw SodaException("오디션 캐릭터 정보는 최소 10글자 입니다") + throw SodaException(messageKey = "admin.audition.role.information_required") } } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/UpdateAuditionRoleRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/UpdateAuditionRoleRequest.kt index 6454bf0a..5ddf470f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/UpdateAuditionRoleRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/audition/role/UpdateAuditionRoleRequest.kt @@ -13,7 +13,7 @@ data class UpdateAuditionRoleRequest( ) { init { if (id < 0) { - throw SodaException("잘못된 요청입니다.") + throw SodaException(messageKey = "common.error.invalid_request") } } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/ratio/CreatorSettlementRatioService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/ratio/CreatorSettlementRatioService.kt index d114f8c2..b9eddb78 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/ratio/CreatorSettlementRatioService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/ratio/CreatorSettlementRatioService.kt @@ -15,10 +15,10 @@ class CreatorSettlementRatioService( @Transactional fun createCreatorSettlementRatio(request: CreateCreatorSettlementRatioRequest) { val creator = memberRepository.findByIdOrNull(request.memberId) - ?: throw SodaException("잘못된 크리에이터 입니다.") + ?: throw SodaException(messageKey = "admin.settlement_ratio.invalid_creator") if (creator.role != MemberRole.CREATOR) { - throw SodaException("잘못된 크리에이터 입니다.") + throw SodaException(messageKey = "admin.settlement_ratio.invalid_creator") } val existing = repository.findByMemberId(request.memberId) @@ -43,12 +43,12 @@ class CreatorSettlementRatioService( @Transactional fun updateCreatorSettlementRatio(request: CreateCreatorSettlementRatioRequest) { val creator = memberRepository.findByIdOrNull(request.memberId) - ?: throw SodaException("잘못된 크리에이터 입니다.") + ?: throw SodaException(messageKey = "admin.settlement_ratio.invalid_creator") if (creator.role != MemberRole.CREATOR) { - throw SodaException("잘못된 크리에이터 입니다.") + throw SodaException(messageKey = "admin.settlement_ratio.invalid_creator") } val existing = repository.findByMemberId(request.memberId) - ?: throw SodaException("해당 크리에이터의 정산 비율 설정이 없습니다.") + ?: throw SodaException(messageKey = "admin.settlement_ratio.not_found") existing.restore() existing.updateValues( request.subsidy, @@ -62,7 +62,7 @@ class CreatorSettlementRatioService( @Transactional fun deleteCreatorSettlementRatio(memberId: Long) { val existing = repository.findByMemberId(memberId) - ?: throw SodaException("해당 크리에이터의 정산 비율 설정이 없습니다.") + ?: throw SodaException(messageKey = "admin.settlement_ratio.not_found") existing.softDelete() repository.save(existing) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanService.kt index 9e780dc0..9aac7e33 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanService.kt @@ -33,21 +33,21 @@ class AdminCanService( @Transactional fun deleteCan(id: Long) { val can = repository.findByIdOrNull(id) - ?: throw SodaException("잘못된 요청입니다.") + ?: throw SodaException(messageKey = "common.error.invalid_request") can.status = CanStatus.END_OF_SALE } @Transactional fun charge(request: AdminCanChargeRequest) { - if (request.can <= 0) throw SodaException("1 캔 이상 입력하세요.") - if (request.method.isBlank()) throw SodaException("기록내용을 입력하세요.") + if (request.can <= 0) throw SodaException(messageKey = "admin.can.min_amount") + if (request.method.isBlank()) throw SodaException(messageKey = "admin.can.method_required") val ids = request.memberIds.distinct() - if (ids.isEmpty()) throw SodaException("회원번호를 입력하세요.") + if (ids.isEmpty()) throw SodaException(messageKey = "admin.can.member_ids_required") val members = memberRepository.findAllById(ids).toList() - if (members.size != ids.size) throw SodaException("잘못된 회원번호 입니다.") + if (members.size != ids.size) throw SodaException(messageKey = "admin.can.invalid_member_ids") members.forEach { member -> val charge = Charge(0, request.can, status = ChargeStatus.ADMIN) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/i18n/SodaMessageSource.kt b/src/main/kotlin/kr/co/vividnext/sodalive/i18n/SodaMessageSource.kt index be4bf5fd..135fc869 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/i18n/SodaMessageSource.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/i18n/SodaMessageSource.kt @@ -81,12 +81,84 @@ class SodaMessageSource { ) ) + private val auditionRoleMessages = mapOf( + "admin.audition.role.name_min_length" to mapOf( + Lang.KO to "배역 이름은 최소 2글자 입니다", + Lang.EN to "Role name must be at least 2 characters.", + Lang.JA to "役名は最低2文字です。" + ), + "admin.audition.role.information_min_length" to mapOf( + Lang.KO to "오디션 배역 정보는 최소 10글자 입니다", + Lang.EN to "Audition role information must be at least 10 characters.", + Lang.JA to "オーディション役の情報は最低10文字です。" + ), + "admin.audition.role.audition_required" to mapOf( + Lang.KO to "캐릭터가 등록될 오디션을 선택하세요", + Lang.EN to "Please select an audition for the character.", + Lang.JA to "キャラクターが登録されるオーディションを選択してください。" + ), + "admin.audition.role.name_required" to mapOf( + Lang.KO to "캐릭터명을 입력하세요", + Lang.EN to "Please enter a character name.", + Lang.JA to "キャラクター名を入力してください。" + ), + "admin.audition.role.script_url_required" to mapOf( + Lang.KO to "오디션 대본 URL을 입력하세요", + Lang.EN to "Please enter the audition script URL.", + Lang.JA to "オーディション台本のURLを入力してください。" + ), + "admin.audition.role.information_required" to mapOf( + Lang.KO to "오디션 캐릭터 정보는 최소 10글자 입니다", + Lang.EN to "Audition character information must be at least 10 characters.", + Lang.JA to "オーディションキャラクター情報は最低10文字です。" + ) + ) + + private val settlementRatioMessages = mapOf( + "admin.settlement_ratio.invalid_creator" to mapOf( + Lang.KO to "잘못된 크리에이터 입니다.", + Lang.EN to "Invalid creator.", + Lang.JA to "不正なクリエイターです。" + ), + "admin.settlement_ratio.not_found" to mapOf( + Lang.KO to "해당 크리에이터의 정산 비율 설정이 없습니다.", + Lang.EN to "Settlement ratio settings not found for this creator.", + Lang.JA to "該当クリエイターの精算比率設定がありません。" + ) + ) + + private val adminCanMessages = mapOf( + "admin.can.min_amount" to mapOf( + Lang.KO to "1 캔 이상 입력하세요.", + Lang.EN to "Please enter at least 1 can.", + Lang.JA to "1缶以上入力してください。" + ), + "admin.can.method_required" to mapOf( + Lang.KO to "기록내용을 입력하세요.", + Lang.EN to "Please enter the record content.", + Lang.JA to "記録内容を入力してください。" + ), + "admin.can.member_ids_required" to mapOf( + Lang.KO to "회원번호를 입력하세요.", + Lang.EN to "Please enter member IDs.", + Lang.JA to "会員番号を入力してください。" + ), + "admin.can.invalid_member_ids" to mapOf( + Lang.KO to "잘못된 회원번호 입니다.", + Lang.EN to "Invalid member IDs.", + Lang.JA to "不正な会員番号です。" + ) + ) + fun getMessage(key: String, lang: Lang): String? { val messageGroups = listOf( commonMessages, auditionMessages, auditionRequestMessages, - auditionNotificationMessages + auditionNotificationMessages, + auditionRoleMessages, + settlementRatioMessages, + adminCanMessages ) for (messages in messageGroups) { val translations = messages[key] ?: continue