Skip to content

Commit eafdade

Browse files
authored
Merge pull request #200 from PSR-Co/feat/#199-createChatMessage
[feat] 메시지 전송 API
2 parents b42f1fa + 12cba85 commit eafdade

File tree

5 files changed

+79
-14
lines changed

5 files changed

+79
-14
lines changed

src/main/kotlin/com/psr/psr/chat/controller/ChatRoomController.kt renamed to src/main/kotlin/com/psr/psr/chat/controller/ChatController.kt

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.psr.psr.chat.controller
22

3-
import com.psr.psr.chat.service.ChatRoomService
3+
import com.psr.psr.chat.dto.request.ChatMessageReq
4+
import com.psr.psr.chat.service.ChatService
45
import com.psr.psr.global.dto.BaseResponse
56
import com.psr.psr.global.jwt.UserAccount
6-
import com.psr.psr.product.dto.request.CreateproductReq
77
import io.swagger.v3.oas.annotations.Operation
88
import io.swagger.v3.oas.annotations.Parameter
99
import io.swagger.v3.oas.annotations.media.Content
@@ -17,11 +17,11 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal
1717
import org.springframework.web.bind.annotation.*
1818

1919
@RestController
20-
@RequestMapping("/chatRooms")
21-
@Tag(name = "ChatRoom", description = "채팅방 API")
20+
@RequestMapping("/chat")
21+
@Tag(name = "Chat", description = "채팅 API")
2222
@SecurityRequirement(name = "Bearer")
23-
class ChatRoomController(
24-
private val chatRoomService: ChatRoomService
23+
class ChatController(
24+
private val chatService: ChatService
2525
) {
2626

2727
/**
@@ -37,11 +37,11 @@ class ChatRoomController(
3737
content = arrayOf(Content(schema = Schema(implementation = BaseResponse::class)))
3838
)]
3939
)
40-
@PostMapping("/{orderId}")
40+
@PostMapping("/rooms/{orderId}")
4141
fun createChatRoom(@AuthenticationPrincipal userAccount: UserAccount,
4242
@Parameter(description = "(Long) 요청 id", example = "1") @PathVariable orderId: Long
4343
): BaseResponse<Unit> {
44-
return BaseResponse(chatRoomService.createChatRoom(userAccount.getUser(), orderId))
44+
return BaseResponse(chatService.createChatRoom(userAccount.getUser(), orderId))
4545
}
4646

4747
/**
@@ -57,11 +57,32 @@ class ChatRoomController(
5757
content = arrayOf(Content(schema = Schema(implementation = BaseResponse::class)))
5858
)]
5959
)
60-
@PatchMapping("/{chatRoomId}")
60+
@PatchMapping("/rooms/{chatRoomId}")
6161
fun leaveChatRoom(@AuthenticationPrincipal userAccount: UserAccount,
6262
@Parameter(description = "(Long) 채팅방 id", example = "1") @PathVariable chatRoomId: Long
6363
): BaseResponse<Unit> {
64-
return BaseResponse(chatRoomService.leaveChatRoom(userAccount.getUser(), chatRoomId));
64+
return BaseResponse(chatService.leaveChatRoom(userAccount.getUser(), chatRoomId));
65+
}
66+
67+
/**
68+
* 메시지 전송
69+
*/
70+
@Operation(summary = "메시지 전송(박소정)", description = "채팅방에 메시지를 전송한다.")
71+
@ApiResponses(
72+
value = [
73+
ApiResponse(responseCode = "200", description = "요청에 성공했습니다."),
74+
ApiResponse(
75+
responseCode = "404",
76+
description = "해당 요청을 찾을 수 없습니다.",
77+
content = arrayOf(Content(schema = Schema(implementation = BaseResponse::class)))
78+
)]
79+
)
80+
@PostMapping("/{chatRoomId}")
81+
fun createChatMessage(@AuthenticationPrincipal userAccount: UserAccount,
82+
@Parameter(description = "(Long) 채팅방 id", example = "1") @PathVariable chatRoomId: Long,
83+
@RequestBody @Valid request: ChatMessageReq
84+
): BaseResponse<Unit> {
85+
return BaseResponse(chatService.createChatMessage(userAccount.getUser(), chatRoomId, request))
6586
}
6687

6788

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.psr.psr.chat.dto.request
2+
3+
4+
import io.swagger.v3.oas.annotations.media.Schema
5+
import jakarta.validation.constraints.NotBlank
6+
7+
data class ChatMessageReq(
8+
9+
@Schema(description = "메세지", example = "안녕하세요~")
10+
@field:NotBlank(message = "메세지를 입력해주세요.")
11+
val message: String
12+
13+
)
14+

src/main/kotlin/com/psr/psr/chat/entity/ChatMessage.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull
88
@Entity
99
data class ChatMessage(
1010
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
11-
var id: Long,
11+
var id: Long? = null,
1212

1313
@ManyToOne
1414
@JoinColumn(nullable = false, name = "sender_user_id")
@@ -21,4 +21,14 @@ data class ChatMessage(
2121
@NotNull
2222
var message: String
2323

24-
) : BaseEntity()
24+
) : BaseEntity() {
25+
companion object {
26+
fun toEntity(user: User, chatRoom: ChatRoom, message: String): ChatMessage {
27+
return ChatMessage(
28+
senderUser = user,
29+
chatRoom = chatRoom,
30+
message = message
31+
)
32+
}
33+
}
34+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.psr.psr.chat.repository
2+
3+
import com.psr.psr.chat.entity.ChatMessage
4+
import org.springframework.data.jpa.repository.JpaRepository
5+
import org.springframework.stereotype.Repository
6+
7+
@Repository
8+
interface ChatMessageRepository : JpaRepository<ChatMessage, Long> {
9+
}

src/main/kotlin/com/psr/psr/chat/service/ChatRoomService.kt renamed to src/main/kotlin/com/psr/psr/chat/service/ChatService.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.psr.psr.chat.service
22

3+
import com.psr.psr.chat.dto.request.ChatMessageReq
4+
import com.psr.psr.chat.entity.ChatMessage
35
import com.psr.psr.chat.entity.ChatRoom
6+
import com.psr.psr.chat.repository.ChatMessageRepository
47
import com.psr.psr.chat.repository.ChatRoomRepository
58
import com.psr.psr.global.Constant
69
import com.psr.psr.global.exception.BaseException
@@ -12,9 +15,10 @@ import org.springframework.stereotype.Service
1215
import org.springframework.transaction.annotation.Transactional
1316

1417
@Service
15-
class ChatRoomService(
18+
class ChatService(
1619
private val orderRepository: OrderRepository,
17-
private val chatRoomRepository: ChatRoomRepository
20+
private val chatRoomRepository: ChatRoomRepository,
21+
private val chatMessageRepository: ChatMessageRepository
1822
) {
1923
@Transactional
2024
fun createChatRoom(user: User, orderId: Long) {
@@ -35,4 +39,11 @@ class ChatRoomService(
3539
if(chatRoom.senderUser==null && chatRoom.receiverUser==null)
3640
chatRoomRepository.delete(chatRoom)
3741
}
42+
43+
@Transactional
44+
fun createChatMessage(user: User, chatRoomId: Long, request: ChatMessageReq) {
45+
val chatRoom: ChatRoom = chatRoomRepository.findByIdAndStatus(chatRoomId, Constant.UserStatus.ACTIVE_STATUS)
46+
?: throw BaseException(BaseResponseCode.NOT_FOUND_CHATROOM)
47+
chatMessageRepository.save(ChatMessage.toEntity(user, chatRoom, request.message))
48+
}
3849
}

0 commit comments

Comments
 (0)