-
Notifications
You must be signed in to change notification settings - Fork 0
쪽지 기능을 위한 데이터 모델링 및 구현
Min-h-96 edited this page Dec 12, 2022
·
5 revisions
파트너를 구하기 위해 서비스에 접속한 사용자들에게 더 나은 사용자간에 소통 기능을 제공하기 위해서 쪽지 기능을 구현하기로 했습니다.
쪽지는 기본적으로 1대1로 주고 받는 기능이기 때문에, 쪽지를 주고받기 위한 대화방 1개당 1개의 document가 필요하다고 생각했습니다.
// message 쪽지 내역 (ex. A와 B의 채팅 내역 document)
{
_id: ObjectId(),
participants: 'ObjectId(A).toString(),ObjectId(B).toString()',
createdAt,
updatedAt,
contents: [
{
from: ObjectId(A).toString(),
createdAt: Date
content: '내용1',
},
{
from: ObjectId(B).toString(),
createdAt: Date
content: '내용2',
},
{
from: ObjectId(B).toString(),
createdAt: Date
content: '내용3',
}
],
}
- participants
- A가 B에게 쪽지를 보내는 요청을 했을 때, A와 B의 방이 어떤 것인지 조회하기 위한 값입니다.
- 값이 저장되기 이전에 sort([A,B]) 과정을 거쳐서 정렬한 순서대로 문자열을 만들고,
,
문자로 구분자를 추가해서 저장합니다.
- updatedAt
- 데이터가 update 된 시간입니다.
- 사용자가 처음 접속했을 때, 확인 안한 쪽지가 있는지 확인하는 용도로 쓰입니다.
- Content
- from : A와 B의 대화방이라고 한다면, 누가 보낸 쪽지인지를 확인하기 위한 값입니다.
- createdAt : 쪽지가 보내진 시간을 표시하기 위한 값입니다.
- content : 쪽지 내용입니다.
쪽지 기능이 추가됨으로써, User 컬렉션에도 변화가 생겼습니다. 각 사용자가 누구와 쪽지를 주고받고 있었는지를 알 필요가 있습니다.
message 컬렉션에서 본인을 제외한 모든 사용자와의 participants로 정렬해서 누구와 쪽지를 주고받고 있었는지 매번 조회할 수는 없었기 때문에, 각 사용자가 본인이 누구와의 대화방이 만들어졌었는지 그 정보를 가지고 있을 필요가 있다고 생각했습니다. 따라서 user 컬렉션에 해당 데이터를 추가하기로 했습니다.
// user 컬렉션에 추가되는 내용 (ex. userB)
{
... 생략 ..
messageInfos: [
{
with: ObjectId(A),
lastCheckTime : Date
},
{
with: ObjectId(C),
lastCheckTime : Date
},
],
}
- messageInfos : 사용자가 누구와 쪽지를 주고받고 있는지 내역을 구성하기 위한 값입니다.
- lastCheckTime
- 각 쪽지 내역에 마지막으로 접속한 시간을 확인하여, 사용자마다 확인하지 않은 메시지가 있으면 시간을 비교해서 알려주기 위한 값입니다.
- 📃 기획서
- 📂 Backlog
- 📊 ERD, 폴더 구조
- 🗓️ 회의록