Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE/#603] 채팅방 나갔다가 들어오면 이전 채팅 안보이게 구현 #604

Merged
merged 8 commits into from
Jan 14, 2024

Conversation

namewhat99
Copy link
Collaborator

@namewhat99 namewhat99 commented Jan 11, 2024

이슈

체크리스트

  • 채팅방 나가기
  • 돌아오면 이전 채팅 안보임

구현

  1. writer_hide 와 user_hide 는 writer 와 user 에게 현재 채팅방이 채팅방 목록에 뜨나 안 뜨나 를 나타낸다.
  2. writer_left_time 과 user_left_time 은 마지막으로 writer 와 user 가 각각 마지막으x로 채팅방을 언제 나갔는지를 나타낸다.
  • 기본적으로는 x_hide 는 false , x_left_time 은 null 이다.

  • 현재 내가 user 라고 가정하고 내가 채팅방을 나가면, user_hide 는 true , user_left_time 은 현재 시각이 기록된다.

  • 이후에 만약 상대방이 다시 채팅을 보내는 경우, user_hide 는 false 로 변한다. user_left_time 은 그대로 두는데 이는 내가 어느 채팅부터 확인해야하는지 확인하기 위해서이다.

  • 채팅 목록을 가져올때는 user_left_time 이후의 채팅목록만 가져온다.

  • 채팅방 목록을 가져올때는, user_hide 가 false 인 것만 가져온다. user_left_time 은 신경쓰지 않는다.

@namewhat99 namewhat99 added review code-review BE BE 관련 chatting 채팅 labels Jan 11, 2024
@namewhat99 namewhat99 requested a review from koomin1227 January 11, 2024 07:37
@namewhat99 namewhat99 self-assigned this Jan 11, 2024
@@ -223,7 +223,27 @@ export class ChatService {
relations: ['chats', 'userUser', 'writerUser'],
});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일단 room이 찾아 지지 않을 때의 예외처리가 없어서 삭제되거나 존재하지 않는 roomId로 접근하면 에러가 발생 할 것 같네요..

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

마찬가지로 위에 update 문도 없는 방을 업데이트 하려면 예외처리가 필요할 것 같고 유저의 권한을 확인 하는 로직이 밑에 있어서 본인의 방이 아닌 경우에도 채팅 읽음 처리를 하는 문제가 생길 수도 있을 것 같습니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그러면 checkAuth 를 맨 처음으로 옮겨서 처음에 해당 방이 존재하는지와 해당 방에 존재하는 사람이 맞는지 확인 후에 아래 로직들을 실행하는 방식으로 바꾸겠습니당~

Comment on lines 226 to 246
let chats = room.chats;
this.checkAuth(room, userId);

if (
room.writer === userId &&
room.writer_hide === false &&
room.writer_left_time !== null
) {
chats = chats.filter((chat) => {
return chat.create_date > room.writer_left_time;
});
} else if (
room.user === userId &&
room.user_hide === false &&
room.user_left_time !== null
) {
chats = chats.filter((chat) => {
return chat.create_date > room.user_left_time;
});
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

좀 사소하긴 하지만 findRoomById 메소드 안에서 너무 많은 작업을 하고 있어 가독성등이 좀 떨어지지 않나 싶습니다. 이 부분은 getChats() 같은 메소드를 따로 만들어서 분리하면 좀 더 깔끔하지 않을 까 싶습니다

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그리고 만약 분리한다면 chat.create_date > room.user_left_time 이 조건을 만족하는 데이터만 뽑아와서 db와 통신 비용도 낮아지고 찾는데 걸리는 시간이 좀 줄어 들지 않을까 싶습니다. 현재는 모든 채팅을 다 조회하고 모든 채팅을 다 확인해서 오버헤드가 있지 않을 까 하는 생각이 듭니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

실험을 해 본 결과인데 현재 응답시간 자체가 평균적으로 30ms 로 좋은 편이기도 하고 해당 사람의 나간 시간을 얻기위해 DB 에 접근해서 시간을 얻고 다시 한번 DB 에 접근하는것 보다는 서버에서 가져온 데이터를 처리해서 주는게 현재로써는 조금 더 좋을거라고 생각이 드네요. 나중에 혹시 이에 관해서 문제가 생기면 말씀해주신 방법으로 바꿔보는것도 좋을 것 같습니다

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

메서드 분리는 진행하겠읍니다~

Comment on lines +229 to +233
if (
room.writer === userId &&
room.writer_hide === false &&
room.writer_left_time !== null
) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

room.writer_hide === false 이 부분이 true 인 경우의 처리가 없는 것 같습니다. 사용자에게 안보이도록 x_hide 가 true 라면 예외처리가 필요하지 않을까 하는 생각이 드는데 어떻게 생각하시는지요...?
404나 요런 처리가 필요하지 않을까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

url 로 접근하는 부분때문인가요? 자신이 숨긴 채팅방을 url 을 통해 400 혹은 409 로 던지면 될 것 같은데 어케 생각하시나요?

.limit(30)
.getOne();
}*/

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분 채팅 페이지네이션 미리 적용해본건데 나중에 이걸로 바꾸겠습니다

@namewhat99 namewhat99 merged commit 00adc4e into BE Jan 14, 2024
1 check passed
@namewhat99 namewhat99 deleted the BE-fixChat-#603 branch January 14, 2024 14:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE BE 관련 chatting 채팅 review code-review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants