Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • elasticsearch
  • 백준
  • kotlin
  • Android
  • 우아한테크코스
  • 에라토스테네스의 체
  • 내림차순
  • 코틀린 인 액션
  • kibana
  • ec2
  • rsocket
  • 프로그래머스
  • 코딩테스트
  • Wil
  • 레포지토리
  • 다이나믹 프로그래밍
  • Docker
  • grafana
  • webflux
  • spring
  • 파이썬
  • 문자열
  • 프리코스
  • java
  • til
  • 코틀린
  • 안드로이드
  • enum
  • MariaDB
  • SQL

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

[TIL - 20230430] WebSocket+Stomp 사용자들이 있는 채팅방 찾기
TIL

[TIL - 20230430] WebSocket+Stomp 사용자들이 있는 채팅방 찾기

2023. 4. 30. 18:55

 

💻문제점

사용자가 채팅을 하려고 할 때 이미 해당 사용자들로 생성된 채팅방이 있는지 찾아야 했다.

채팅방의 참여한 사용자는 리스트를 통해 저장하는데, 저장하기 전 정렬을 한다.

그래서 사용자들의 이름으로 채팅방을 찾기 위해 이름 순으로 정렬해서 넣어주고 해당 참여자들이 있는 방이 있는지 확인하려고 했다.

@PostMapping("/chat")
public ResponseDto createChatRoom(@RequestBody String receiver, String sender) {
   // @Param sender should be replaced to UserDetails.getMember();
   return chatService.createChatRoom(receiver, sender);
   // createChatRoom의 결과인 roomId와 type : ENTER을 저장한 chatDto에 넣어줘야함
}
public ResponseDto createChatRoom(String receiver, String sender) {
    //이미 reciever와 sender로 생성된 채팅방이 있는지 확인
    List<String> participants = new ArrayList<>(Arrays.asList(receiver, sender));
    Collections.sort(participants); //정렬

    Optional<List<ChatRoom>> findChatRoom = validExistChatRoom(participants);

    //있으면 ChatRoom의 roomId 반환
    if(findChatRoom.isPresent())
        return ResponseDto.setSuccess("already has room and find Chatting Room Success!", findChatRoom.get().get(0).getRoomId());

    //없으면 receiver와 sender의 방을 생성해주고 roomId 반환
    ChatRoom newChatRoom = ChatRoom.of(participants);
    chatRoomRepository.save(newChatRoom);
    return ResponseDto.setSuccess("create ChatRoom success", newChatRoom.getRoomId());
}

그러나 다음과 같은 에러 발생


🔍해결

String sender에 @RequestBody 애노테이션을 붙여주지 않았다.

@PostMapping("/chat")
public ResponseDto createChatRoom(@RequestBody String receiver, @RequestBody String sender) {
   // @Param sender should be replaced to UserDetails.getMember();
   return chatService.createChatRoom(receiver, sender);
   // createChatRoom의 결과인 roomId와 type : ENTER을 저장한 chatDto에 넣어줘야함
}

 

이렇게 두개를 @RequestBody로 받는 것 보다 하나의 Dto로 입력 받는게 나을 것 같아서 ParticipantDto를 생성해서 변경하였다.

@PostMapping("/chat")
public ResponseDto createChatRoom(@RequestBody ParticipantDto participantDto) {
   // @Param sender should be replaced to UserDetails.getMember();
   return chatService.createChatRoom(participantDto);
   // createChatRoom의 결과인 roomId와 type : ENTER을 저장한 chatDto에 넣어줘야함
}
@Getter
public class ParticipantDto {
    private String member1;
    private String member2;
}

 

여기서 더 디벨롭하려고 했으나, Member 엔티티가 없는 상태에서 진행하기에는 한계가 있다는 생각이 들어 기존 프로젝트로 옮겨서 디벨롭하기로 했다.

728x90

'TIL' 카테고리의 다른 글

[TIL - 20230501] 채팅 시스템 프론트와 연결  (0) 2023.05.02
[WIL - 20230424~20230430]  (0) 2023.05.01
[TIL - 20230429] WebSocket + Stomp 적용기2  (0) 2023.04.29
[TIL - 20230428] WebSocket + Stomp 적용기1  (0) 2023.04.29
[TIL - 20230428] failed to lazily initialize a collection of role  (0) 2023.04.28
    'TIL' 카테고리의 다른 글
    • [TIL - 20230501] 채팅 시스템 프론트와 연결
    • [WIL - 20230424~20230430]
    • [TIL - 20230429] WebSocket + Stomp 적용기2
    • [TIL - 20230428] WebSocket + Stomp 적용기1
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바