diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentController.kt index f19e9737..8fa50be2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentController.kt @@ -23,7 +23,7 @@ class CreatorAdminContentController(private val service: CreatorAdminContentServ pageable: Pageable, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") ApiResponse.ok(service.getAudioContentList(pageable, member)) } @@ -34,7 +34,7 @@ class CreatorAdminContentController(private val service: CreatorAdminContentServ @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") ApiResponse.ok(service.searchAudioContent(searchWord, member, pageable)) } @@ -45,7 +45,7 @@ class CreatorAdminContentController(private val service: CreatorAdminContentServ @RequestPart("request") requestString: String, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") ApiResponse.ok(service.updateAudioContent(coverImage, requestString, member)) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt index aeaddddd..d0ef8fb8 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt @@ -72,7 +72,7 @@ class CreatorAdminContentService( } fun searchAudioContent(searchWord: String, member: Member, pageable: Pageable): GetCreatorAdminContentListResponse { - if (searchWord.length < 2) throw SodaException("2글자 이상 입력하세요.") + if (searchWord.length < 2) throw SodaException(messageKey = "creator.admin.content.search_word_min_length") val totalCount = repository.getAudioContentTotalCount( memberId = member.id!!, searchWord @@ -113,7 +113,7 @@ class CreatorAdminContentService( fun updateAudioContent(coverImage: MultipartFile?, requestString: String, member: Member) { val request = objectMapper.readValue(requestString, UpdateCreatorAdminContentRequest::class.java) val audioContent = repository.getAudioContent(memberId = member.id!!, audioContentId = request.id) - ?: throw SodaException("잘못된 콘텐츠 입니다.") + ?: throw SodaException(messageKey = "creator.admin.content.invalid_content") if (coverImage != null) { val metadata = ObjectMetadata() @@ -157,7 +157,7 @@ class CreatorAdminContentService( } if (request.price != null) { - if (request.price < 5) throw SodaException("콘텐츠의 최소금액은 5캔 입니다.") + if (request.price < 5) throw SodaException(messageKey = "creator.admin.content.min_price") val contentPriceChangeLog = ContentPriceChangeLog(prevPrice = audioContent.price) contentPriceChangeLog.audioContent = audioContent diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/category/CreatorAdminCategoryController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/category/CreatorAdminCategoryController.kt index 37aaecaa..2bd65bb9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/category/CreatorAdminCategoryController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/category/CreatorAdminCategoryController.kt @@ -21,7 +21,7 @@ class CreatorAdminCategoryController(private val service: CreatorAdminCategorySe @RequestParam(value = "search_word") searchWord: String, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") ApiResponse.ok( service.searchContentNotInCategory( @@ -38,7 +38,7 @@ class CreatorAdminCategoryController(private val service: CreatorAdminCategorySe @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") ApiResponse.ok( service.getContentInCategory( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberController.kt index 3f142632..bd942a89 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberController.kt @@ -24,7 +24,7 @@ class CreatorAdminMemberController(private val service: CreatorAdminMemberServic @RequestHeader("Authorization") token: String, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") ApiResponse.ok(service.logout(token.removePrefix("Bearer "), member.id!!)) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberService.kt index 8ba6b002..9bfd9b76 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberService.kt @@ -3,6 +3,8 @@ package kr.co.vividnext.sodalive.creator.admin.member import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.fcm.PushTokenService +import kr.co.vividnext.sodalive.i18n.LangContext +import kr.co.vividnext.sodalive.i18n.SodaMessageSource import kr.co.vividnext.sodalive.jwt.TokenProvider import kr.co.vividnext.sodalive.member.MemberRepository import kr.co.vividnext.sodalive.member.MemberRole @@ -27,6 +29,8 @@ class CreatorAdminMemberService( private val authenticationManagerBuilder: AuthenticationManagerBuilder, private val pushTokenService: PushTokenService, + private val messageSource: SodaMessageSource, + private val langContext: LangContext, @Value("\${cloud.aws.cloud-front.host}") private val cloudFrontHost: String @@ -36,7 +40,7 @@ class CreatorAdminMemberService( fun login(request: LoginRequest): ApiResponse { return ApiResponse.ok( - message = "로그인 되었습니다.", + message = messageSource.getMessage("creator.admin.member.login_success", langContext.lang), data = login(request.email, request.password) ) } @@ -44,7 +48,7 @@ class CreatorAdminMemberService( @Transactional fun logout(token: String, memberId: Long) { val member = repository.findByIdOrNull(memberId) - ?: throw SodaException("로그인 정보를 확인해주세요.") + ?: throw SodaException(messageKey = "common.error.bad_credentials") member.pushToken = null pushTokenService.logout(memberId = memberId) @@ -52,7 +56,7 @@ class CreatorAdminMemberService( val lock = getOrCreateLock(memberId = memberId) lock.write { val memberToken = tokenRepository.findByIdOrNull(memberId) - ?: throw SodaException("로그인 정보를 확인해주세요.") + ?: throw SodaException(messageKey = "common.error.bad_credentials") memberToken.tokenSet.remove(token) tokenRepository.save(memberToken) @@ -60,13 +64,14 @@ class CreatorAdminMemberService( } private fun login(email: String, password: String): LoginResponse { - val member = repository.findByEmail(email = email) ?: throw SodaException("로그인 정보를 확인해주세요.") + val member = repository.findByEmail(email = email) + ?: throw SodaException(messageKey = "common.error.bad_credentials") if (!member.isActive) { - throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.") + throw SodaException(messageKey = "creator.admin.member.inactive_account") } if (member.role != MemberRole.CREATOR) { - throw SodaException("로그인 정보를 확인해주세요.") + throw SodaException(messageKey = "common.error.bad_credentials") } val authenticationToken = UsernamePasswordAuthenticationToken(email, password) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt index c9480a4b..1476fa06 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt @@ -2,6 +2,8 @@ package kr.co.vividnext.sodalive.creator.admin.signature import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.SodaException +import kr.co.vividnext.sodalive.i18n.LangContext +import kr.co.vividnext.sodalive.i18n.SodaMessageSource import kr.co.vividnext.sodalive.live.signature.SignatureCanSortType import kr.co.vividnext.sodalive.member.Member import org.springframework.data.domain.Pageable @@ -18,14 +20,18 @@ import org.springframework.web.multipart.MultipartFile @RestController @PreAuthorize("hasRole('CREATOR')") @RequestMapping("/creator-admin/signature") -class CreatorAdminSignatureController(private val service: CreatorAdminSignatureService) { +class CreatorAdminSignatureController( + private val service: CreatorAdminSignatureService, + private val messageSource: SodaMessageSource, + private val langContext: LangContext +) { @GetMapping fun getSignatureCanList( pageable: Pageable, @RequestParam("sort-type", required = false) sortType: SignatureCanSortType?, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") ApiResponse.ok( data = service.getSignatureList( @@ -44,7 +50,7 @@ class CreatorAdminSignatureController(private val service: CreatorAdminSignature @RequestParam("isAdult", required = false) isAdult: Boolean? = false, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") ApiResponse.ok( service.createSignature( @@ -54,7 +60,7 @@ class CreatorAdminSignatureController(private val service: CreatorAdminSignature isAdult = isAdult ?: false, memberId = member.id!! ), - "등록되었습니다." + messageSource.getMessage("creator.admin.signature.created", langContext.lang) ) } @@ -68,9 +74,9 @@ class CreatorAdminSignatureController(private val service: CreatorAdminSignature @RequestParam("isAdult", required = false) isAdult: Boolean?, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") if (can == null && time == null && image == null && isActive == null && isAdult == null) { - throw SodaException("변경사항이 없습니다.") + throw SodaException(messageKey = "creator.admin.signature.no_changes") } ApiResponse.ok( @@ -83,7 +89,11 @@ class CreatorAdminSignatureController(private val service: CreatorAdminSignature isAdult = isAdult, memberId = member.id!! ), - if (isActive == false) "삭제되었습니다." else "수정되었습니다." + if (isActive == false) { + messageSource.getMessage("creator.admin.signature.deleted", langContext.lang) + } else { + messageSource.getMessage("creator.admin.signature.updated", langContext.lang) + } ) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt index 6aee5be1..40b6825f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt @@ -44,11 +44,11 @@ class CreatorAdminSignatureService( @Transactional fun createSignature(can: Int, time: Int, image: MultipartFile, memberId: Long, isAdult: Boolean) { - if (can <= 0) throw SodaException("1캔 이상 설정할 수 있습니다.") - if (time < 3 || time > 20) throw SodaException("시간은 3초 이상 20초 이하로 설정할 수 있습니다.") + if (can <= 0) throw SodaException(messageKey = "creator.admin.signature.min_can") + if (time < 3 || time > 20) throw SodaException(messageKey = "creator.admin.signature.time_range") val member = memberRepository.findCreatorByIdOrNull(memberId = memberId) - ?: throw SodaException("잘못된 접근입니다.") + ?: throw SodaException(messageKey = "creator.admin.signature.invalid_access") val signatureCan = SignatureCan(can = can, time = time, isAdult = isAdult) signatureCan.creator = member @@ -77,15 +77,15 @@ class CreatorAdminSignatureService( isAdult: Boolean? ) { val signatureCan = repository.findSignatureByIdOrNull(id = id, memberId = memberId) - ?: throw SodaException("잘못된 요청입니다.") + ?: throw SodaException(messageKey = "creator.admin.signature.invalid_request") if (can != null) { - if (can <= 0) throw SodaException("1캔 이상 설정할 수 있습니다.") + if (can <= 0) throw SodaException(messageKey = "creator.admin.signature.min_can") signatureCan.can = can } if (time != null) { - if (time < 3 || time > 20) throw SodaException("시간은 3초 이상 20초 이하로 설정할 수 있습니다.") + if (time < 3 || time > 20) throw SodaException(messageKey = "creator.admin.signature.time_range") signatureCan.time = time } 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 90faed6d..7e188525 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/i18n/SodaMessageSource.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/i18n/SodaMessageSource.kt @@ -1098,6 +1098,80 @@ class SodaMessageSource { ) ) + private val creatorAdminMemberMessages = mapOf( + "creator.admin.member.login_success" to mapOf( + Lang.KO to "로그인 되었습니다.", + Lang.EN to "Logged in.", + Lang.JA to "ログインしました。" + ), + "creator.admin.member.inactive_account" to mapOf( + Lang.KO to "탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.", + Lang.EN to "This account has been deactivated.\nPlease contact customer support.", + Lang.JA to "退会したアカウントです。\nカスタマーサポートにお問い合わせください。" + ) + ) + + private val creatorAdminSignatureMessages = mapOf( + "creator.admin.signature.created" to mapOf( + Lang.KO to "등록되었습니다.", + Lang.EN to "Successfully registered.", + Lang.JA to "登録されました。" + ), + "creator.admin.signature.updated" to mapOf( + Lang.KO to "수정되었습니다.", + Lang.EN to "Updated.", + Lang.JA to "更新されました。" + ), + "creator.admin.signature.deleted" to mapOf( + Lang.KO to "삭제되었습니다.", + Lang.EN to "Deleted.", + Lang.JA to "削除されました。" + ), + "creator.admin.signature.no_changes" to mapOf( + Lang.KO to "변경사항이 없습니다.", + Lang.EN to "No changes to update.", + Lang.JA to "変更事項がありません。" + ), + "creator.admin.signature.min_can" to mapOf( + Lang.KO to "1캔 이상 설정할 수 있습니다.", + Lang.EN to "You can set at least 1 can.", + Lang.JA to "1缶以上設定できます。" + ), + "creator.admin.signature.time_range" to mapOf( + Lang.KO to "시간은 3초 이상 20초 이하로 설정할 수 있습니다.", + Lang.EN to "Time must be between 3 and 20 seconds.", + Lang.JA to "時間は3秒以上20秒以下に設定できます。" + ), + "creator.admin.signature.invalid_access" to mapOf( + Lang.KO to "잘못된 접근입니다.", + Lang.EN to "Invalid access.", + Lang.JA to "不正なアクセスです。" + ), + "creator.admin.signature.invalid_request" to mapOf( + Lang.KO to "잘못된 요청입니다.", + Lang.EN to "Invalid request.", + Lang.JA to "不正なリクエストです。" + ) + ) + + private val creatorAdminContentMessages = mapOf( + "creator.admin.content.search_word_min_length" to mapOf( + Lang.KO to "2글자 이상 입력하세요.", + Lang.EN to "Please enter at least 2 characters.", + Lang.JA to "2文字以上入力してください。" + ), + "creator.admin.content.invalid_content" to mapOf( + Lang.KO to "잘못된 콘텐츠 입니다.", + Lang.EN to "Invalid content.", + Lang.JA to "不正なコンテンツです。" + ), + "creator.admin.content.min_price" to mapOf( + Lang.KO to "콘텐츠의 최소금액은 5캔 입니다.", + Lang.EN to "Minimum price for content is 5 cans.", + Lang.JA to "コンテンツの最低価格は5缶です。" + ) + ) + private val creatorCommunityMessages = mapOf( "creator.community.paid_post_image_required" to mapOf( Lang.KO to "유료 게시글 등록을 위해서는 이미지가 필요합니다.", @@ -1185,6 +1259,9 @@ class SodaMessageSource { explorerResponseMessages, explorerValidationMessages, explorerAccessMessages, + creatorAdminMemberMessages, + creatorAdminSignatureMessages, + creatorAdminContentMessages, creatorCommunityMessages ) for (messages in messageGroups) {