클라이언트 메시지 다국어 처리
공개 API 변경 없음.
This commit is contained in:
@@ -25,7 +25,7 @@ class MessageController(private val service: MessageService) {
|
||||
@RequestBody request: SendTextMessageRequest,
|
||||
@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.sendTextMessage(request, member))
|
||||
}
|
||||
@@ -36,7 +36,7 @@ class MessageController(private val service: MessageService) {
|
||||
@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.getSentTextMessages(member, pageable, timezone))
|
||||
}
|
||||
@@ -47,7 +47,7 @@ class MessageController(private val service: MessageService) {
|
||||
@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.getReceivedTextMessages(member, pageable, timezone))
|
||||
}
|
||||
@@ -58,7 +58,7 @@ class MessageController(private val service: MessageService) {
|
||||
@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.getKeepTextMessages(member, pageable, timezone))
|
||||
}
|
||||
@@ -68,7 +68,7 @@ class MessageController(private val service: MessageService) {
|
||||
@PathVariable id: Long,
|
||||
@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.keepTextMessage(id, member))
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ class MessageController(private val service: MessageService) {
|
||||
@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.sendVoiceMessage(voiceMessageFile, requestString, member))
|
||||
}
|
||||
@@ -89,7 +89,7 @@ class MessageController(private val service: MessageService) {
|
||||
@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.getSentVoiceMessages(member, pageable, timezone))
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ class MessageController(private val service: MessageService) {
|
||||
@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.getReceivedVoiceMessages(member, pageable, timezone))
|
||||
}
|
||||
@@ -110,7 +110,7 @@ class MessageController(private val service: MessageService) {
|
||||
@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.getKeepVoiceMessages(member, pageable, timezone))
|
||||
}
|
||||
@@ -120,7 +120,7 @@ class MessageController(private val service: MessageService) {
|
||||
@PathVariable id: Long,
|
||||
@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.keepVoiceMessage(id, member))
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ class MessageController(private val service: MessageService) {
|
||||
@PathVariable messageId: Long,
|
||||
@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.deleteMessage(messageId, member))
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.fcm.FcmEvent
|
||||
import kr.co.vividnext.sodalive.fcm.FcmEventType
|
||||
import kr.co.vividnext.sodalive.i18n.LangContext
|
||||
import kr.co.vividnext.sodalive.i18n.SodaMessageSource
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.MemberRepository
|
||||
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
|
||||
@@ -26,6 +28,8 @@ class MessageService(
|
||||
private val repository: MessageRepository,
|
||||
private val memberRepository: MemberRepository,
|
||||
private val blockMemberRepository: BlockMemberRepository,
|
||||
private val messageSource: SodaMessageSource,
|
||||
private val langContext: LangContext,
|
||||
|
||||
private val applicationEventPublisher: ApplicationEventPublisher,
|
||||
private val objectMapper: ObjectMapper,
|
||||
@@ -39,17 +43,21 @@ class MessageService(
|
||||
@Transactional
|
||||
fun sendTextMessage(request: SendTextMessageRequest, member: Member) {
|
||||
val recipient = memberRepository.findByIdOrNull(request.recipientId)
|
||||
?: throw SodaException("받는 사람이 없습니다.")
|
||||
?: throw SodaException(messageKey = "message.error.recipient_not_found")
|
||||
|
||||
if (!recipient.isActive) {
|
||||
throw SodaException("탈퇴한 유저에게는 메시지를 보내실 수 없습니다.")
|
||||
throw SodaException(messageKey = "message.error.recipient_inactive")
|
||||
}
|
||||
|
||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = request.recipientId)
|
||||
if (isBlocked) throw SodaException("${recipient.nickname}님의 요청으로 메시지를 보낼 수 없습니다.")
|
||||
if (isBlocked) {
|
||||
val messageTemplate = messageSource.getMessage("message.error.blocked_by_recipient", langContext.lang).orEmpty()
|
||||
val message = String.format(messageTemplate, recipient.nickname)
|
||||
throw SodaException(message = message)
|
||||
}
|
||||
|
||||
val sender = memberRepository.findByIdOrNull(member.id!!)
|
||||
?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
?: throw SodaException(messageKey = "common.error.bad_credentials")
|
||||
|
||||
val message = Message(
|
||||
textMessage = request.textMessage,
|
||||
@@ -64,8 +72,11 @@ class MessageService(
|
||||
applicationEventPublisher.publishEvent(
|
||||
FcmEvent(
|
||||
type = FcmEventType.SEND_MESSAGE,
|
||||
title = "메시지",
|
||||
message = "${sender.nickname}님으로 부터 문자메시지가 도착했습니다.",
|
||||
title = messageSource.getMessage("message.fcm.title", langContext.lang).orEmpty(),
|
||||
message = run {
|
||||
val messageTemplate = messageSource.getMessage("message.fcm.text_received", langContext.lang).orEmpty()
|
||||
String.format(messageTemplate, sender.nickname)
|
||||
},
|
||||
messageId = message.id
|
||||
)
|
||||
)
|
||||
@@ -99,17 +110,21 @@ class MessageService(
|
||||
val request = objectMapper.readValue(requestString, SendVoiceMessageRequest::class.java)
|
||||
|
||||
val recipient = memberRepository.findByIdOrNull(request.recipientId)
|
||||
?: throw SodaException("받는 사람이 없습니다.")
|
||||
?: throw SodaException(messageKey = "message.error.recipient_not_found")
|
||||
|
||||
if (!recipient.isActive) {
|
||||
throw SodaException("탈퇴한 유저에게는 메시지를 보내실 수 없습니다.")
|
||||
throw SodaException(messageKey = "message.error.recipient_inactive")
|
||||
}
|
||||
|
||||
val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = request.recipientId)
|
||||
if (isBlocked) throw SodaException("${recipient.nickname}님의 요청으로 메시지를 보낼 수 없습니다.")
|
||||
if (isBlocked) {
|
||||
val messageTemplate = messageSource.getMessage("message.error.blocked_by_recipient", langContext.lang).orEmpty()
|
||||
val message = String.format(messageTemplate, recipient.nickname)
|
||||
throw SodaException(message = message)
|
||||
}
|
||||
|
||||
val sender = memberRepository.findByIdOrNull(member.id!!)
|
||||
?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
?: throw SodaException(messageKey = "common.error.bad_credentials")
|
||||
|
||||
val message = Message(messageType = MessageType.VOICE)
|
||||
message.sender = sender
|
||||
@@ -132,8 +147,11 @@ class MessageService(
|
||||
applicationEventPublisher.publishEvent(
|
||||
FcmEvent(
|
||||
type = FcmEventType.SEND_MESSAGE,
|
||||
title = "메시지",
|
||||
message = "${sender.nickname}님으로 부터 음성메시지가 도착했습니다.",
|
||||
title = messageSource.getMessage("message.fcm.title", langContext.lang).orEmpty(),
|
||||
message = run {
|
||||
val messageTemplate = messageSource.getMessage("message.fcm.voice_received", langContext.lang).orEmpty()
|
||||
String.format(messageTemplate, sender.nickname)
|
||||
},
|
||||
messageId = message.id
|
||||
)
|
||||
)
|
||||
@@ -166,7 +184,7 @@ class MessageService(
|
||||
@Transactional
|
||||
fun deleteMessage(messageId: Long, member: Member) {
|
||||
val message = repository.findByIdOrNull(messageId)
|
||||
?: throw SodaException("해당하는 메시지가 없습니다.\n다시 확인해 주시기 바랍니다.")
|
||||
?: throw SodaException(messageKey = "message.error.not_found_retry")
|
||||
|
||||
if (message.sender!!.id!! == member.id!!) {
|
||||
message.isSenderDelete = true
|
||||
@@ -247,14 +265,14 @@ class MessageService(
|
||||
|
||||
private fun keepMessage(messageId: Long, member: Member) {
|
||||
val message = repository.findByIdOrNull(messageId)
|
||||
?: throw SodaException("잘못된 요청입니다.")
|
||||
?: throw SodaException(messageKey = "common.error.invalid_request")
|
||||
|
||||
if (message.recipient != member) {
|
||||
throw SodaException("잘못된 요청입니다.")
|
||||
throw SodaException(messageKey = "common.error.invalid_request")
|
||||
}
|
||||
|
||||
if (message.isRecipientKeep) {
|
||||
throw SodaException("이미 보관된 메시지 입니다.")
|
||||
throw SodaException(messageKey = "message.error.already_kept")
|
||||
}
|
||||
|
||||
message.isRecipientKeep = true
|
||||
|
||||
Reference in New Issue
Block a user