◆ 회원이 채팅방에 입장 했을 경우, 메세지를 읽지 않은 회원 수 -1

◆ 고민1

     //인원수 반환 기능
   public int size() {
       return users.size();
   }

1) DmRoomVO.java에 있는 인원 반환 기능을 사용하여 채팅방의 총 인원 수 사용
2) dm_unread_user 테이블을 그대로 사용하여 회원이 메세지를 읽지 않았을 경우 0 / 읽었을 경우 1 값을 반환
3) 채팅방에 회원이 입장할 경우, (is_read=1 값을 반환) 모든 메세지는 읽음 처리 되며, 각 메세지마다 총 회원 수에서 -1 처리 후 (읽지 않은 메세지 수)unread_messages_num를 브라우저에 표시 
4) dm_unread_user와 dm_room 테이블을 조인하여 unread_users_inroom_view를 생성
5) unread_users_inroom_view에는 채팅방 번호, 회원 번호, 메세지 번호, 메세지 읽음 확인, (메세지를 읽지 않은 총 회원 수) 저장  

◆ 고민2

  1. n번 채팅방에 사용자가 메세지를 전송하면 dm_unread_user 테이블의 message_no, member_no, room_no, is_read 값을 db에 저장한다.
  2. n번 채팅방에 보낸 메세지는 메세지를 받은 사용자가 입장 했을 경우 해당 메세지를 isRead=1 값으로 update 한 후 db에 저장한다.
  3. DmRoomVO의 인원수 반환 기능을 사용하여 , n번 채팅방의 총 회원 수를 구한다.
  4. isRead=1 (읽음 처리 된) 메세지는 해당 채팅방에 총 사용자 수에서 -1을 해준다.
  5. n번 채팅방에 각 메세지에 읽지 않은 회원 수를 계산하는 로직을 만들어서 브라우저에 출력해준다.

◆ 고민3

1번 채팅방에 a, b, c 세 명의 사용자가 있고 a가 메시지를 보냈다면, 이 메시지에 대한 dm_unread_user 테이블의 레코드는 다음과 같이 세 개가 되어야 합니다.

  1. message_no = 94, member_no = a, room_no = 1, is_read = 1
    (메시지를 보낸 a는 자신의 메시지를 읽었다고 간주하여 is_read = 1와 같이 db에 저장됩니다.)
  2. message_no = 94, member_no = b, room_no = 1, is_read = 0
  3. message_no = 94, member_no = c, room_no = 1, is_read = 0
    (b와 c는 아직 메시지를 읽지 않았으므로 is_read = 0와 같이 db에 저장됩니다.)
  4. B회원이 1번 채팅방에 입장하면, 1번 채팅방의 B회원의 모든 메시지들 중에 is_read = 0(읽지 않은 메세지)를 조회합니다.
  5. B회원에 읽지 않은 메세지를 is_rear = 1로 update 합니다.
    ex) message_no = 94, member_no = b, room_no = 1, is_read = 1 다음과 같이 변경합니다.
    - 특정 채팅방의 특정 사용자가 입장 했을 경우, 특정 회원의 읽지 않은 메세지를 모두 조회 읽음 표시로 update(특정 회원(B 사용자)이 특정 채팅방에 입장할 때, 그 회원이 아직 읽지 않은 모든 메시지를 읽음으로 표시)
profile
Backend Developer

0개의 댓글