클라이언트 메시지 다국어 처리
공개 API 변경 없음.
This commit is contained in:
@@ -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