20240712 (금) Hercute팀 - 메추리알(MCRA) 채팅부분 1차 완료
2024. 7. 12. 16:38ㆍTIL
최근 자바 공부때문에 조금 신경을 많이 못썻는데 마침 1주차 과제를 대충 완료한 시점이라 채팅부분도 내가 마저 완료해보았다.
package com.hercute.mcrabe.domain.chat.chatroom.service
import com.hercute.mcrabe.domain.chat.chatroom.dto.ChatRoomResponse
import com.hercute.mcrabe.domain.chat.chatroom.dto.SendMessageRequest
import com.hercute.mcrabe.domain.chat.chatroom.model.ChatMessage
import com.hercute.mcrabe.domain.chat.chatroom.model.ChatRoom
import com.hercute.mcrabe.domain.chat.chatroom.repository.message.ChatMessageRepository
import com.hercute.mcrabe.domain.chat.chatroom.repository.room.ChatRoomRepository
import com.hercute.mcrabe.domain.members.repository.MemberRepository
import com.hercute.mcrabe.global.error.exception.ModelNotFoundException
import com.hercute.mcrabe.global.infra.security.jwt.UserPrincipal
import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service
@Service
class ChatRoomServiceImpl(
private val memberRepository: MemberRepository,
private val chatRoomRepository: ChatRoomRepository,
private val chatMessageRepository: ChatMessageRepository
):ChatRoomService {
override fun createChatRoom(memberAId: Long, memberBId: Long) {
val memberA = memberRepository.findByIdOrNull(memberAId)
?: throw ModelNotFoundException("member", memberAId)
val memberB = memberRepository.findByIdOrNull(memberBId)
?: throw ModelNotFoundException("member", memberBId)
val chatRoom = ChatRoom(
memberA = memberA,
memberB = memberB
)
chatRoomRepository.save(chatRoom)
}
override fun leaveChatRoom(memberId: Long, chatRoomId: Long) {
val member = memberRepository.findByIdOrNull(memberId)
?: throw ModelNotFoundException("member", memberId)
val chatRoom = chatRoomRepository.findByIdOrNull(chatRoomId)
?: throw ModelNotFoundException("chat room", chatRoomId)
if (chatRoom.memberA.id == member.id) {
chatRoom.memberA.isDeleted = true
}
else if (chatRoom.memberB.id == member.id) {
chatRoom.memberB.isDeleted = true
}
chatRoomRepository.save(chatRoom)
}
override fun getChatRoom(chatRoomId: Long): ChatRoomResponse {
val chatRoom = chatRoomRepository.findByIdOrNull(chatRoomId)
?: throw ModelNotFoundException("chat room", chatRoomId)
return ChatRoomResponse.from(chatRoom)
}
override fun sendMessage(memberId: Long, chatRoomId: Long, request: SendMessageRequest) {
val member = memberRepository.findByIdOrNull(memberId)
?: throw ModelNotFoundException("member", memberId)
val chatRoom = chatRoomRepository.findByIdOrNull(chatRoomId)
?: throw ModelNotFoundException("chat room", chatRoomId)
val message = ChatMessage (
member = member,
chatRoom = chatRoom,
message = request.message
)
chatMessageRepository.save(message)
}
}
일단 기본적으로 채팅방 생성, 채팅방 떠나기, 메세지보내기 정도를 생각해보았고,
만들다가 채팅방 조회기능도 하나 만들어두면 좋을것 같아서
@GetMapping("/{chatRoomId}")
fun getChatRoom (
@PathVariable chatRoomId: Long,
): ResponseEntity<ChatRoomResponse> {
return ResponseEntity
.status(HttpStatus.OK)
.body(chatRoomService.getChatRoom(chatRoomId))
}
메소드를 하나 제작하였다.
채팅방 관련부분은 코드보다는 실제로 채팅창기능을 구현하는 과정이 더 중요할것 같다.
'TIL' 카테고리의 다른 글
20240801 (목) 한달 인턴 과제 및 온보딩 진행 - 시큐리티 관련 오류 해결 (0) | 2024.08.01 |
---|---|
20240716 (화) - JAVA CRUD 연습중.. (0) | 2024.07.16 |
20240710 (수) 자바계산기 레벨2 제작 완료 (0) | 2024.07.10 |
20240709 (화) 자바계산기 제작과정 (0) | 2024.07.09 |
20240705 (금) Hercute팀 - 메추리알(MCRA) 코딩 5일차 (0) | 2024.07.05 |