💻문제점
사용자가 채팅을 하려고 할 때 이미 해당 사용자들로 생성된 채팅방이 있는지 찾아야 했다.
채팅방의 참여한 사용자는 리스트를 통해 저장하는데, 저장하기 전 정렬을 한다.
그래서 사용자들의 이름으로 채팅방을 찾기 위해 이름 순으로 정렬해서 넣어주고 해당 참여자들이 있는 방이 있는지 확인하려고 했다.
@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 |