Firebase/React DB구조

라형선·2023년 2월 21일
0
채팅리스트         (게시글 작성자) 
채팅리스트
user -  user1 ㅡ  채팅방     ㅡ 채팅방1 id (본인uid+상대uid) -
			  ㄴ 프로필사진          ㄴ 채팅방2 id (본인uid+상대uid)
              ㄴ 닉네임         ㄴ 채팅방3 id (본인uid+상대uid)


    	user2 ㅡ 채팅방    	ㅡ 채팅방id (본인uid+상대uid)
			  ㄴ 프로필사진  	ㄴ 채팅방2 id (본인uid+상대uid)
              ㄴ 닉네임        ㄴ 채팅방3 id (본인uid+상대uid)

채팅리스트에 유저정보를 담는 경우의 수 를생각 했지만 그럴 경우 값을 가져올 경우 채팅리스트를 모두 가져와서 필터를 돌려야 하기 때문에 비 효율 적일 것 같다고 생각했다.

채팅방
Chatting - room1 ㅡ message 
                      ㄴ message: ""
                      ㄴ createdAt: ""
                      ㄴ nickname: ""
                      ㄴ profileURL: ""
                      ㄴ chattingRoomId
                      ㄴ user
       room2 ㅡ user2 ㅡ message
                      ㄴ message: ""
                      ㄴ createdAt: ""
                      ㄴ nickname: ""
                      ㄴ profileURL: ""
                      ㄴ chattingRoomId
                      ㄴ user

디테일 페이지에서 채팅하기 버튼을 누르면 채팅창으로 이동한다.

상대 UID + 내UID 합친 값을 채팅방의 이름으로 한다.
프롭스 OR 전역상태관리로 채팅 페이지에 값을 보내준다.
DB에 채팅리스트를 위해서 db에 user정보를 저장 또는 갱신 시켜준다.

채팅리스트에는 db에 저장되어있는 user라는 유저의 정보이다.

combineId
"8e0d0c89-b460-44c8-9246-b9b01c89835bt1LygmnPlSNaLOzkLpVI6dzZq3q1"
createdAt
2023년 3월 7일 오후 2시 59분 32초 UTC+9
myRoomId
"3249b42d-17c1-43a6-a1cf-80fa5358e969"
nickname
"티모시샬라"
opponentUserUid
"t1LygmnPlSNaLOzkLpVI6dzZq3q1"
posterChatroomId
"30bf5d97-e291-4b0e-9faa-ae39a1f279ab"
profile
"https://firebasestorage.googleapis.com/v0/b/projectwalktogetherms.appspot.com/o/files%2FuserProfile%2Ft1LygmnPlSNaLOzkLpVI6dzZq3q1?alt=media&token=b52c21d4-22a6-48ef-a9f1-be078dc8120d"
uid
"bOE8LZ6dNtRb8Imo3hAreGyx5zx2"

User에 대한 정보를 저장할 때

users 컬랙션안에 해당유저id 다큐먼트에 닉네임과 프로필 이미지를 넣고

채팅룸이라는 하위 컬랙션에는 해당유저의 id 와 상대유저의 id를 합친 고유의 채팅방id를 다큐먼트로 둠으로써 당해 유저와 채팅방이 중복적으로 생기는 것을 막으려고했다.

⇒생각해보니까 왜 궂이 막으려고 했는지 모르겠다. 카카오 톡과 같이 계속해서 채팅할 것이 아닌데

새로운 게시글에서 새로운 채팅 하기를 하면 새로운 대화방이 생기게끔 하는게 맞는 것 같다.

⇒ 대신 채팅하러가기를 중복해서 눌렀을 때 새로운 채팅방이 생기지 않게 하거나 채팅을하면 채팅하러가기 버튼이 비활성화 되게끔 상태관리가 되어야 될 것 같다.

(작성글 id + 상대방id) ___ 글마다 새로운 채팅방이 생기게 된다.

(작성자의id + 상대방id) ___ 여러 게시글에서 채팅하기를 눌러도 작성자가 같으면 하나의 채팅방에서 대화하게된다.

profile
형선

0개의 댓글