Skip to content

Commit 8ec0564

Browse files
authored
feat(be): userChat add dto (#58)
1 parent 1e1cb14 commit 8ec0564

File tree

9 files changed

+99
-24
lines changed

9 files changed

+99
-24
lines changed

src/main/kotlin/com/back/koreaTravelGuide/domain/userChat/chatmessage/controller/ChatMessageController.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.back.koreaTravelGuide.domain.userChat.chatmessage.controller
22

33
import com.back.koreaTravelGuide.common.ApiResponse
4+
import com.back.koreaTravelGuide.domain.userChat.chatmessage.dto.ChatMessageResponse
5+
import com.back.koreaTravelGuide.domain.userChat.chatmessage.dto.ChatMessageSendRequest
46
import com.back.koreaTravelGuide.domain.userChat.chatmessage.service.ChatMessageService
57
import org.springframework.http.ResponseEntity
68
import org.springframework.messaging.simp.SimpMessagingTemplate
@@ -23,26 +25,28 @@ class ChatMessageController(
2325
@PathVariable roomId: Long,
2426
@RequestParam(required = false) after: Long?,
2527
@RequestParam(defaultValue = "50") limit: Int,
26-
): ResponseEntity<ApiResponse<Any>> {
28+
): ResponseEntity<ApiResponse<List<ChatMessageResponse>>> {
2729
val messages =
2830
if (after == null) {
2931
messageService.getlistbefore(roomId, limit)
3032
} else {
3133
messageService.getlistafter(roomId, after)
3234
}
33-
return ResponseEntity.ok(ApiResponse(msg = "메시지 조회", data = messages))
35+
val responseMessages = messages.map(ChatMessageResponse::from)
36+
return ResponseEntity.ok(ApiResponse(msg = "메시지 조회", data = responseMessages))
3437
}
3538

3639
@PostMapping("/{roomId}/messages")
3740
fun sendMessage(
3841
@PathVariable roomId: Long,
39-
@RequestBody req: ChatMessageService.SendMessageReq,
40-
): ResponseEntity<ApiResponse<Any>> {
41-
val saved = messageService.send(roomId, req)
42+
@RequestBody req: ChatMessageSendRequest,
43+
): ResponseEntity<ApiResponse<ChatMessageResponse>> {
44+
val saved = messageService.send(roomId, req.senderId, req.content)
45+
val response = ChatMessageResponse.from(saved)
4246
messagingTemplate.convertAndSend(
4347
"/topic/userchat/$roomId",
44-
ApiResponse(msg = "메시지 전송", data = saved),
48+
ApiResponse(msg = "메시지 전송", data = response),
4549
)
46-
return ResponseEntity.status(201).body(ApiResponse(msg = "메시지 전송", data = saved))
50+
return ResponseEntity.status(201).body(ApiResponse(msg = "메시지 전송", data = response))
4751
}
4852
}

src/main/kotlin/com/back/koreaTravelGuide/domain/userChat/chatmessage/controller/ChatMessageSocketController.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.back.koreaTravelGuide.domain.userChat.chatmessage.controller
22

33
import com.back.koreaTravelGuide.common.ApiResponse
4+
import com.back.koreaTravelGuide.domain.userChat.chatmessage.dto.ChatMessageResponse
5+
import com.back.koreaTravelGuide.domain.userChat.chatmessage.dto.ChatMessageSendRequest
46
import com.back.koreaTravelGuide.domain.userChat.chatmessage.service.ChatMessageService
57
import org.springframework.messaging.handler.annotation.DestinationVariable
68
import org.springframework.messaging.handler.annotation.MessageMapping
@@ -16,12 +18,13 @@ class ChatMessageSocketController(
1618
@MessageMapping("/userchat/{roomId}/messages")
1719
fun handleMessage(
1820
@DestinationVariable roomId: Long,
19-
@Payload req: ChatMessageService.SendMessageReq,
21+
@Payload req: ChatMessageSendRequest,
2022
) {
21-
val saved = chatMessageService.send(roomId, req)
23+
val saved = chatMessageService.send(roomId, req.senderId, req.content)
24+
val response = ChatMessageResponse.from(saved)
2225
messagingTemplate.convertAndSend(
2326
"/topic/userchat/$roomId",
24-
ApiResponse(msg = "메시지 전송", data = saved),
27+
ApiResponse(msg = "메시지 전송", data = response),
2528
)
2629
}
2730
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.back.koreaTravelGuide.domain.userChat.chatmessage.dto
2+
3+
import com.back.koreaTravelGuide.domain.userChat.chatmessage.entity.ChatMessage
4+
import java.time.Instant
5+
6+
data class ChatMessageResponse(
7+
val id: Long?,
8+
val roomId: Long,
9+
val senderId: Long,
10+
val content: String,
11+
val createdAt: Instant,
12+
) {
13+
companion object {
14+
fun from(message: ChatMessage): ChatMessageResponse {
15+
return ChatMessageResponse(
16+
id = message.id,
17+
roomId = message.roomId,
18+
senderId = message.senderId,
19+
content = message.content,
20+
createdAt = message.createdAt,
21+
)
22+
}
23+
}
24+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.back.koreaTravelGuide.domain.userChat.chatmessage.dto
2+
3+
data class ChatMessageSendRequest(
4+
val senderId: Long,
5+
val content: String,
6+
)

src/main/kotlin/com/back/koreaTravelGuide/domain/userChat/chatmessage/service/ChatMessageService.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ class ChatMessageService(
1111
private val messageRepository: ChatMessageRepository,
1212
private val roomRepository: ChatRoomRepository,
1313
) {
14-
data class SendMessageReq(val senderId: Long, val content: String)
15-
1614
@Transactional(readOnly = true)
1715
fun getlistbefore(
1816
roomId: Long,
@@ -28,9 +26,10 @@ class ChatMessageService(
2826
@Transactional
2927
fun send(
3028
roomId: Long,
31-
req: SendMessageReq,
29+
senderId: Long,
30+
content: String,
3231
): ChatMessage {
33-
val saved = messageRepository.save(ChatMessage(roomId = roomId, senderId = req.senderId, content = req.content))
32+
val saved = messageRepository.save(ChatMessage(roomId = roomId, senderId = senderId, content = content))
3433
roomRepository.findById(roomId).ifPresent {
3534
roomRepository.save(it.copy(updatedAt = saved.createdAt, lastMessageId = saved.id))
3635
}
Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.back.koreaTravelGuide.domain.userChat.chatroom.controller
22

33
import com.back.koreaTravelGuide.common.ApiResponse
4+
import com.back.koreaTravelGuide.domain.userChat.chatroom.dto.ChatRoomDeleteRequest
5+
import com.back.koreaTravelGuide.domain.userChat.chatroom.dto.ChatRoomResponse
6+
import com.back.koreaTravelGuide.domain.userChat.chatroom.dto.ChatRoomStartRequest
47
import com.back.koreaTravelGuide.domain.userChat.chatroom.service.ChatRoomService
58
import org.springframework.http.ResponseEntity
69
import org.springframework.web.bind.annotation.DeleteMapping
@@ -16,23 +19,19 @@ import org.springframework.web.bind.annotation.RestController
1619
class ChatRoomController(
1720
private val roomService: ChatRoomService,
1821
) {
19-
data class StartChatReq(val guideId: Long, val userId: Long)
20-
21-
data class DeleteChatReq(val userId: Long)
22-
2322
// 같은 페어는 방 재사용
2423
@PostMapping("/start")
2524
fun startChat(
26-
@RequestBody req: StartChatReq,
27-
): ResponseEntity<ApiResponse<Map<String, Long>>> {
28-
val roomId = roomService.exceptOneToOneRoom(req.guideId, req.userId).id!!
29-
return ResponseEntity.ok(ApiResponse(msg = "채팅방 시작", data = mapOf("roomId" to roomId)))
25+
@RequestBody req: ChatRoomStartRequest,
26+
): ResponseEntity<ApiResponse<ChatRoomResponse>> {
27+
val room = roomService.exceptOneToOneRoom(req.guideId, req.userId)
28+
return ResponseEntity.ok(ApiResponse(msg = "채팅방 시작", data = ChatRoomResponse.from(room)))
3029
}
3130

3231
@DeleteMapping("/{roomId}")
3332
fun deleteRoom(
3433
@PathVariable roomId: Long,
35-
@RequestBody req: DeleteChatReq,
34+
@RequestBody req: ChatRoomDeleteRequest,
3635
): ResponseEntity<ApiResponse<Unit>> {
3736
roomService.deleteByOwner(roomId, req.userId)
3837
return ResponseEntity.ok(ApiResponse("채팅방 삭제 완료"))
@@ -41,5 +40,8 @@ class ChatRoomController(
4140
@GetMapping("/{roomId}")
4241
fun get(
4342
@PathVariable roomId: Long,
44-
) = ResponseEntity.ok(ApiResponse(msg = "채팅방 조회", data = roomService.get(roomId)))
43+
): ResponseEntity<ApiResponse<ChatRoomResponse>> {
44+
val room = roomService.get(roomId)
45+
return ResponseEntity.ok(ApiResponse(msg = "채팅방 조회", data = ChatRoomResponse.from(room)))
46+
}
4547
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.back.koreaTravelGuide.domain.userChat.chatroom.dto
2+
3+
data class ChatRoomDeleteRequest(
4+
val userId: Long,
5+
)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.back.koreaTravelGuide.domain.userChat.chatroom.dto
2+
3+
import com.back.koreaTravelGuide.domain.userChat.chatroom.entity.ChatRoom
4+
import java.time.Instant
5+
6+
data class ChatRoomResponse(
7+
val id: Long?,
8+
val title: String,
9+
val guideId: Long,
10+
val userId: Long,
11+
val updatedAt: Instant,
12+
val lastMessageId: Long?,
13+
) {
14+
companion object {
15+
fun from(room: ChatRoom): ChatRoomResponse {
16+
return ChatRoomResponse(
17+
id = room.id,
18+
title = room.title,
19+
guideId = room.guideId,
20+
userId = room.userId,
21+
updatedAt = room.updatedAt,
22+
lastMessageId = room.lastMessageId,
23+
)
24+
}
25+
}
26+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.back.koreaTravelGuide.domain.userChat.chatroom.dto
2+
3+
data class ChatRoomStartRequest(
4+
val guideId: Long,
5+
val userId: Long,
6+
)

0 commit comments

Comments
 (0)