유저끼리 서로 팔로우가 가능하다보니 원래는 DM을 넣으려고 했었다.
하지만 작업량이 워낙 많아다보니 socket.io를 제 시간내에 도입하는 것이 힘들 것 같아서 쪽지 시스템을 넣기로 했었다.
맞팔로우가 아닌 상태에서도 쪽지를 주고 받을 수 있고
맛집을 엄청 자주 다녀본 유저에게 추천을 받거나, 여기를 가달라고 요청을 한다던가
자기가 가보고 싶었던 매장의 글을 올렸을 때, 그 매장을 가본 회원이 있을 경우 해당하는 URL을 쪽지로 보내주는 등
다양한 방법으로 활용이 될 것 같아서 이정도면 제법 괜찮게 사용할 수 있다는 생각도 함께 들었기 때문이다.
맨처음에는 쪽지 구조에 대해서 많은 고민을 했는데,
검색을 하면서 구조를 찾던 와중 너무 좋은게 있어서 참고를 하여 DB를 짰다.
참고한 포스트 => 상호작용 데이터 모델링
분명 간단한 것이라고 생각했는데 구현하는 시간은 많이 걸린 편이었다.
왜냐하면 쪽지를 보내면
보낸 사람은 보낸 쪽지함에 들어가야하고
받은 사람은 받은 쪽지함에 들어가야하는데
머리속으로 생각만 하면서 짜다보니 생각이 꼬여버려가지고(....) 손으로 적으면서 구현을 했다.
그리고 쪽지들을 조회할 경우에 페이지네이션 속성이 필요하다고 하여
skip과 take의 옵션을 걸어놓고 정렬 또한 함께 걸어놨다.
그렇게 만들어진 Message DB
여기서 조금 신경을 쓴 부분이 있었는데, 바로 messageState
였다.
바로 읽은 쪽지와 안읽은 쪽지를 구분하기 위하여 넣어놨는데
로그인을 했을 때 읽지 않은 쪽지가 있을 경우 헤더에 있는 이미지에 표시가 생기게 된다.
또한 마이페이지로 넘어가서 읽지 않은 쪽지의 개수를 볼 수 있게끔 추가를 해놨다.
message_info 테이블에 deleterCheckData 라는 이름을 가진 컬럼이 존재하는데
보낸 사람과 받은 사람이 모두 삭제를 할 경우 +1씩 업데이트 되면서
2가 될 경우에는 하드딜리트를 하는 것을 Subscriber를 사용하여 구현을 해보려고 했는데
마음처럼 되질 않아서 조금 더 찾아봐야 할 것 같다.
끝!