캐릭터 챗봇 #338
| @@ -48,6 +48,7 @@ class ChatRoomService( | |||||||
|     private val characterService: ChatCharacterService, |     private val characterService: ChatCharacterService, | ||||||
|     private val characterImageService: CharacterImageService, |     private val characterImageService: CharacterImageService, | ||||||
|     private val canPaymentService: kr.co.vividnext.sodalive.can.payment.CanPaymentService, |     private val canPaymentService: kr.co.vividnext.sodalive.can.payment.CanPaymentService, | ||||||
|  |     private val imageCloudFront: kr.co.vividnext.sodalive.aws.cloudfront.ImageContentCloudFront, | ||||||
|  |  | ||||||
|     @Value("\${weraser.api-key}") |     @Value("\${weraser.api-key}") | ||||||
|     private val apiKey: String, |     private val apiKey: String, | ||||||
| @@ -332,40 +333,7 @@ class ChatRoomService( | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         val messagesAsc = fetched.sortedBy { it.createdAt } |         val messagesAsc = fetched.sortedBy { it.createdAt } | ||||||
|         val items = messagesAsc.map { msg -> |         val items = messagesAsc.map { toChatMessageItemDto(it, member) } | ||||||
|             val sender = msg.participant |  | ||||||
|             val profilePath = when (sender.participantType) { |  | ||||||
|                 ParticipantType.USER -> sender.member?.profileImage |  | ||||||
|                 ParticipantType.CHARACTER -> sender.character?.imagePath |  | ||||||
|             } |  | ||||||
|             val senderImageUrl = "$imageHost/${profilePath ?: "profile/default-profile.png"}" |  | ||||||
|             val createdAtMillis = msg.createdAt?.atZone(ZoneId.systemDefault())?.toInstant()?.toEpochMilli() |  | ||||||
|                 ?: 0L |  | ||||||
|             ChatMessageItemDto( |  | ||||||
|                 messageId = msg.id!!, |  | ||||||
|                 message = msg.message, |  | ||||||
|                 profileImageUrl = senderImageUrl, |  | ||||||
|                 mine = sender.member?.id == member.id, |  | ||||||
|                 createdAt = createdAtMillis, |  | ||||||
|                 messageType = msg.messageType.name, |  | ||||||
|                 imageUrl = msg.imagePath?.let { "$imageHost/$it" }, |  | ||||||
|                 price = msg.price, |  | ||||||
|                 hasAccess = if (msg.messageType == ChatMessageType.IMAGE) { |  | ||||||
|                     if (msg.price == null) { |  | ||||||
|                         true |  | ||||||
|                     } else { |  | ||||||
|                         msg.characterImage?.id?.let { |  | ||||||
|                             characterImageService.isOwnedImageByMember( |  | ||||||
|                                 it, |  | ||||||
|                                 member.id!! |  | ||||||
|                             ) |  | ||||||
|                         } ?: true |  | ||||||
|                     } |  | ||||||
|                 } else { |  | ||||||
|                     true |  | ||||||
|                 } |  | ||||||
|             ) |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return ChatRoomEnterResponse( |         return ChatRoomEnterResponse( | ||||||
|             roomId = room.id!!, |             roomId = room.id!!, | ||||||
| @@ -512,40 +480,7 @@ class ChatRoomService( | |||||||
|         // createdAt 오름차순으로 정렬하여 반환 |         // createdAt 오름차순으로 정렬하여 반환 | ||||||
|         val messagesAsc = fetched.sortedBy { it.createdAt } |         val messagesAsc = fetched.sortedBy { it.createdAt } | ||||||
|  |  | ||||||
|         val items = messagesAsc.map { msg -> |         val items = messagesAsc.map { toChatMessageItemDto(it, member) } | ||||||
|             val sender = msg.participant |  | ||||||
|             val profilePath = when (sender.participantType) { |  | ||||||
|                 ParticipantType.USER -> sender.member?.profileImage |  | ||||||
|                 ParticipantType.CHARACTER -> sender.character?.imagePath |  | ||||||
|             } |  | ||||||
|             val senderImageUrl = "$imageHost/${profilePath ?: "profile/default-profile.png"}" |  | ||||||
|             val createdAtMillis = msg.createdAt?.atZone(ZoneId.systemDefault())?.toInstant()?.toEpochMilli() |  | ||||||
|                 ?: 0L |  | ||||||
|             ChatMessageItemDto( |  | ||||||
|                 messageId = msg.id!!, |  | ||||||
|                 message = msg.message, |  | ||||||
|                 profileImageUrl = senderImageUrl, |  | ||||||
|                 mine = sender.member?.id == member.id, |  | ||||||
|                 createdAt = createdAtMillis, |  | ||||||
|                 messageType = msg.messageType.name, |  | ||||||
|                 imageUrl = msg.imagePath?.let { "$imageHost/$it" }, |  | ||||||
|                 price = msg.price, |  | ||||||
|                 hasAccess = if (msg.messageType == ChatMessageType.IMAGE) { |  | ||||||
|                     if (msg.price == null) { |  | ||||||
|                         true |  | ||||||
|                     } else { |  | ||||||
|                         msg.characterImage?.id?.let { |  | ||||||
|                             characterImageService.isOwnedImageByMember( |  | ||||||
|                                 it, |  | ||||||
|                                 member.id!! |  | ||||||
|                             ) |  | ||||||
|                         } ?: true |  | ||||||
|                     } |  | ||||||
|                 } else { |  | ||||||
|                     true |  | ||||||
|                 } |  | ||||||
|             ) |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return ChatMessagesPageResponse( |         return ChatMessagesPageResponse( | ||||||
|             messages = items, |             messages = items, | ||||||
| @@ -643,19 +578,7 @@ class ChatRoomService( | |||||||
|                 ) |                 ) | ||||||
|             ) |             ) | ||||||
|  |  | ||||||
|             val imageDto = ChatMessageItemDto( |             val imageDto = toChatMessageItemDto(imageMsg, member) | ||||||
|                 messageId = imageMsg.id!!, |  | ||||||
|                 message = imageMsg.message, |  | ||||||
|                 profileImageUrl = senderImageUrl, |  | ||||||
|                 mine = false, |  | ||||||
|                 createdAt = imageMsg.createdAt?.atZone(ZoneId.systemDefault())?.toInstant() |  | ||||||
|                     ?.toEpochMilli() |  | ||||||
|                     ?: 0L, |  | ||||||
|                 messageType = ChatMessageType.IMAGE.name, |  | ||||||
|                 imageUrl = imageMsg.imagePath?.let { "$imageHost/$it" }, |  | ||||||
|                 price = imageMsg.price, |  | ||||||
|                 hasAccess = owned || imageMsg.price == null |  | ||||||
|             ) |  | ||||||
|             return listOf(textDto, imageDto) |             return listOf(textDto, imageDto) | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -687,6 +610,23 @@ class ChatRoomService( | |||||||
|         } else { |         } else { | ||||||
|             true |             true | ||||||
|         } |         } | ||||||
|  |         val expirationMs = 5L * 60L * 1000L | ||||||
|  |         val resolvedImageUrl: String? = if (msg.messageType == ChatMessageType.IMAGE) { | ||||||
|  |             val path = if (hasAccess) { | ||||||
|  |                 msg.characterImage?.imagePath ?: msg.imagePath | ||||||
|  |             } else { | ||||||
|  |                 msg.imagePath | ||||||
|  |             } | ||||||
|  |             path?.let { p -> | ||||||
|  |                 if (hasAccess) { | ||||||
|  |                     imageCloudFront.generateSignedURL(p, expirationMs) | ||||||
|  |                 } else { | ||||||
|  |                     "$imageHost/$p" | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|  |             null | ||||||
|  |         } | ||||||
|         return ChatMessageItemDto( |         return ChatMessageItemDto( | ||||||
|             messageId = msg.id!!, |             messageId = msg.id!!, | ||||||
|             message = msg.message, |             message = msg.message, | ||||||
| @@ -694,7 +634,7 @@ class ChatRoomService( | |||||||
|             mine = sender.member?.id == member.id, |             mine = sender.member?.id == member.id, | ||||||
|             createdAt = createdAtMillis, |             createdAt = createdAtMillis, | ||||||
|             messageType = msg.messageType.name, |             messageType = msg.messageType.name, | ||||||
|             imageUrl = msg.imagePath?.let { "$imageHost/$it" }, |             imageUrl = resolvedImageUrl, | ||||||
|             price = msg.price, |             price = msg.price, | ||||||
|             hasAccess = hasAccess |             hasAccess = hasAccess | ||||||
|         ) |         ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user