feat(user-creator-chat): DM 생성 수신자 필드를 일반화한다

This commit is contained in:
2026-09-14 14:50:44 +09:00
parent 70f717aa6d
commit de1a9eb114
3 changed files with 56 additions and 3 deletions
@@ -28,7 +28,7 @@ class UserCreatorChatController(
@RequestBody request: CreateUserCreatorChatRoomRequest @RequestBody request: CreateUserCreatorChatRoomRequest
) = run { ) = run {
if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") if (member == null) throw SodaException(messageKey = "common.error.bad_credentials")
ApiResponse.ok(service.createOrGetRoom(member, request.creatorId)) ApiResponse.ok(service.createOrGetRoom(member, request.recipientMemberId()))
} }
@GetMapping("/{roomId}/open") @GetMapping("/{roomId}/open")
@@ -1,8 +1,18 @@
package kr.co.vividnext.sodalive.v2.usercreatorchat.dto package kr.co.vividnext.sodalive.v2.usercreatorchat.dto
import kr.co.vividnext.sodalive.common.SodaException
data class CreateUserCreatorChatRoomRequest( data class CreateUserCreatorChatRoomRequest(
val creatorId: Long val recipientId: Long? = null,
) val creatorId: Long? = null
) {
fun recipientMemberId(): Long {
if (recipientId != null && creatorId != null && recipientId != creatorId) {
throw SodaException(messageKey = "common.error.invalid_request")
}
return recipientId ?: creatorId ?: throw SodaException(messageKey = "common.error.invalid_request")
}
}
data class CreateUserCreatorChatRoomResponse( data class CreateUserCreatorChatRoomResponse(
val roomId: Long val roomId: Long
@@ -1,7 +1,13 @@
package kr.co.vividnext.sodalive.v2.usercreatorchat package kr.co.vividnext.sodalive.v2.usercreatorchat
import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.v2.usercreatorchat.controller.UserCreatorChatController import kr.co.vividnext.sodalive.v2.usercreatorchat.controller.UserCreatorChatController
import kr.co.vividnext.sodalive.v2.usercreatorchat.dto.CreateUserCreatorChatRoomRequest
import kr.co.vividnext.sodalive.v2.usercreatorchat.dto.CreateUserCreatorChatRoomResponse
import kr.co.vividnext.sodalive.v2.usercreatorchat.service.UserCreatorChatService import kr.co.vividnext.sodalive.v2.usercreatorchat.service.UserCreatorChatService
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertThrows
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.mockito.Mockito import org.mockito.Mockito
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
@@ -23,4 +29,41 @@ class UserCreatorChatControllerMappingTest {
mockMvc.perform(post("/api/v2/user-creator-chat/rooms/10/messages/text")) mockMvc.perform(post("/api/v2/user-creator-chat/rooms/10/messages/text"))
.andExpect(status().isNotFound) .andExpect(status().isNotFound)
} }
@Test
fun shouldCreateRoomWithRecipientId() {
val service = Mockito.mock(UserCreatorChatService::class.java)
val controller = UserCreatorChatController(service)
val member = Member(email = "creator@test.com", password = "pw", nickname = "creator").apply { id = 10L }
Mockito.`when`(service.createOrGetRoom(member, 20L))
.thenReturn(CreateUserCreatorChatRoomResponse(roomId = 30L))
val response = controller.createOrGetRoom(
member,
CreateUserCreatorChatRoomRequest(recipientId = 20L, creatorId = null)
)
Mockito.verify(service).createOrGetRoom(member, 20L)
assertEquals(30L, response.data!!.roomId)
}
@Test
fun shouldCreateRoomWithLegacyCreatorId() {
val request = CreateUserCreatorChatRoomRequest(recipientId = null, creatorId = 20L)
assertEquals(20L, request.recipientMemberId())
}
@Test
fun shouldRejectMissingOrConflictingRecipientIds() {
val missing = assertThrows(SodaException::class.java) {
CreateUserCreatorChatRoomRequest(recipientId = null, creatorId = null).recipientMemberId()
}
assertEquals("common.error.invalid_request", missing.messageKey)
val conflict = assertThrows(SodaException::class.java) {
CreateUserCreatorChatRoomRequest(recipientId = 20L, creatorId = 21L).recipientMemberId()
}
assertEquals("common.error.invalid_request", conflict.messageKey)
}
} }