1:1 채팅방별 마지막 메시지

SaGo_MunGcci·2022년 10월 4일
0

스프링

목록 보기
27/31

Trouble Access

  • 문제
    • 마지막 메시지가 공백(”” 이하 공백이라고 함)이면 공백이 마지막 메시지가 공백으로 입력되는 문제가 발생함.
    • 채팅중 상대방의 마지막 메시지가 실수로 공백이 들어가면 마지막 메시지가 공백이 되어
    • 1:1 채팅의 목록에 마지막 메시지가 나오지 않는 문제가 발생함.


Trouble Shooting

  • 원인 파악
    • 해당 채팅 메시지에 저장되어있는 마지막 메시지가 공백이 저장되어 조회됨.
  • 선택지
    • 공백입력시 공백입력전의 메시지를 찾아서 마지막 메시지로 response함.
  • 의사결정
    1. 공백 바로 전의 메시지를 출력
	...

String ono = "1:1";

List<ChatMessage> chatMessages
                = chatMessageJpaRepository.findAllByNickNameAndRoomNameContainingOrderByCreatedAtDesc(nickname, ono);

        for (ChatMessage chatMessage : chatMessages) {

            // 마지막 메시지가 ""일때 해결한 문제
            // 내가 참가한 그방의 마지막 메시지를 조회해옴
            List<ChatMessage> messageList
                    = chatMessageJpaRepository.findAllByRoomId(chatMessage.getRoomId());
            
						ChatMessage lastChat = messageList.get(messageList.size() - 1);

            ArrayList<ChatMessage> lastchat1 = new ArrayList<>();

            if (lastChat.getMessage().equals("")) {

               lastChat = messageList.get(messageList.size() - 2);

					  ...             
			}

공백이 만약 2번이상 연속적으로 입력되었다면 계속 공백이 마지막 메시지로 출력됨.

실패함.

  1. 공백전의 마지막 메시지를 찾아서 response해줌
  • 1번의 결과로 공백이 2번이상 들어갈경우에 최종적으로 공백이 아닌 마지막 메시지를 조회해주어야 했음.
  • 예) 반가워요 공백 공백 —> 반가워요가 출력되야 함.
  • 예) 반가워요 공백 공백 그렇습니다 공백 —> 그렇습니다가 출력되야 함.
  • 이 방법을 채택함
  • 결과
    • 2번 방법으로 했을때 제일 마지막 메시지가 공백일 경우 및 공백이 여러개 일경우 공백전에 작성했던 최종 메시지를 조회하는 로직을 작성함.
    • 로직 작성

	...

		String ono = "1:1";

        List<ChatMessage> chatMessages
                = chatMessageJpaRepository.findAllByNickNameAndRoomNameContainingOrderByCreatedAtDesc(nickname, ono);
       
        for (ChatMessage chatMessage : chatMessages) {

            // 마지막 메시지가 ""일때 해결한 문제
            // 내가 참가한 그방의 마지막 메시지를 조회해옴
            List<ChatMessage> messageList
                    = chatMessageJpaRepository.findAllByRoomId(chatMessage.getRoomId());
            ChatMessage lastChat = messageList.get(messageList.size() - 1);

            ArrayList<ChatMessage> lastchat1 = new ArrayList<>();
						
						// 해당 1:1 채팅방의 맨 마지막 최종 메시지가 공백
            if (lastChat.getMessage().equals("")) {
								// 반복문으로 또 공백이 있는지 검색
                for (int i = 0; i < messageList.size(); i++) {
										// 맨 마지막 최종 메시지부터 검색해서 공백이면 위에 메시지를 검색
										// 검색한 메시지도 공백이면 그 위에 메시지를 검색..... 
										// 공백이 아닌 메시지가 있으면 저장.
                    if (!messageList.get(messageList.size() -1 -i).getMessage().equals("")){

                        lastchat1.add(messageList.get(messageList.size() -1 -i));
												
												// 공백이 아닌 메시지가 있으면 저장후 반복문 종료
                        break;

                    }
                }               
								// 공백이 아닌 최종메시지를 배열에 저장.
                lastChat = lastchat1.get(0);
							
							...

					}

경매 게시자 및 낙찰자 1:1 채팅 목록

{
    "statusCode": 200,
    "msg": "OK",
    "data": [
        {
            "roomId": "c3f624e2-b693-4ab0-a7d2-124994ca4004",
            "roomName": "경매2방 1:1 채팅방",
            "profileImg": null,
            "message": "그렇습니다",
            "lastMessageTime": "2022-10-03T19:08:57.868401",
            "auctionId": 2,
            "auctionTitle": "마법의 지팡이3",
            "multiImages": [
                {
                    "createdAt": "2022-10-03 10:24:40",
                    "modifiedAt": "2022-10-03 10:24:40",
                    "id": 2,
                    "imgUrl": "https://sysimagebucket.s3.ap-northeast-2.amazonaws.com/DdangDdang/auctionImg/930a8b0c-be95-4edb-b9ed-d4645f27bd72napoleon.jpg",
                    "memberId": 2,
                    "auctionId": 1
                }
            ]
        },
        {
            "roomId": "4536de28-145b-4eb0-8880-7b2f90dd9989",
            "roomName": "경매1방 1:1 채팅방",
            "profileImg": null,
            "message": "반가워요",
            "lastMessageTime": "2022-10-03T19:08:19.317069",
            "auctionId": 1,
            "auctionTitle": "마법의 지팡이3",
            "multiImages": [
                {
                    "createdAt": "2022-10-03 10:24:35",
                    "modifiedAt": "2022-10-03 10:24:35",
                    "id": 1,
                    "imgUrl": "https://sysimagebucket.s3.ap-northeast-2.amazonaws.com/DdangDdang/auctionImg/1f507dfc-43cb-486f-abdc-268eda017f3dnapoleon.jpg",
                    "memberId": 1,
                    "auctionId": 1
                }
            ]
        }
    ]
}

profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글