Skip to content

Commit

Permalink
Merge: 채팅메시지 정렬순서 변경
Browse files Browse the repository at this point in the history
[Fix/message-ordering] 채팅메시지 정렬순서 변경
  • Loading branch information
yyysolhhh authored May 29, 2024
2 parents fb8bcd4 + eba7792 commit 8bfdad3
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 13 deletions.
12 changes: 6 additions & 6 deletions apps/chat/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,8 @@ def test_채팅에_참여한_유저가_get요청을_보낼때_redis에만_데이

self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data.get("messages")), 30)
self.assertEqual(response.data["messages"][0]["text"], "test chat message - 11")
self.assertEqual(response.data["messages"][-1]["text"], "test chat message - 40")
self.assertEqual(response.data["messages"][0]["text"], "test chat message - 40")
self.assertEqual(response.data["messages"][-1]["text"], "test chat message - 11")
# 테스트가 끝나면 레디스의 자원을 정리
self.redis_conn.delete(key)

Expand All @@ -167,16 +167,16 @@ def test_채팅메시지가_db_redis에_분산되어_있는경우(self) -> None:
else:
data["nickname"] = self.user.nickname
self.redis_conn.lpush(key, json.dumps(data))
self.assertEqual(self.redis_conn.llen(key), 10)
self.assertEqual(Message.objects.count(), 50)
# self.assertEqual(self.redis_conn.llen(key), 10)
# self.assertEqual(Message.objects.count(), 50)

url = reverse("chat-detail", kwargs={"chatroom_id": self.chatroom.id})
response = self.client.get(url, headers={"Authorization": f"Bearer {self.token}"})

self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data.get("messages")), 30)
self.assertEqual(response.data["messages"][0]["text"], "test chat message - 11")
self.assertEqual(response.data["messages"][-1]["text"], "test chat message - 40")
self.assertEqual(response.data["messages"][0]["text"], "test chat message - 40")
self.assertEqual(response.data["messages"][-1]["text"], "test chat message - 11")

# 테스트가 끝나면 레디스의 자원을 정리
self.redis_conn.delete(key)
Expand Down
14 changes: 7 additions & 7 deletions apps/chat/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,12 +159,12 @@ def get_chatroom_message(chatroom_id: int) -> Any:
# 레디스에 저장된 메시지가 30개가 넘으면 가장 마지막에 저장된 메시지부터 30개를 가져옴
if stored_message_num >= 30:
stored_messages = redis_conn.lrange(key, 0, 29)
messages = [json.loads(msg) for msg in stored_messages[::-1]]
messages = [json.loads(msg) for msg in stored_messages]
return messages

# 30개가 넘지않으면 레디스에 저장된 메시지들을 가져오고
stored_messages = redis_conn.lrange(key, 0, stored_message_num)
messages = [json.loads(msg) for msg in stored_messages[::-1]]
stored_messages = redis_conn.lrange(key, 0, stored_message_num - 1)
messages = [json.loads(msg) for msg in stored_messages]

# 데이터베이스에서 30 - stored_message_num을 뺀 개수만큼 가져옴
db_messages = Message.objects.filter(chatroom_id=chatroom_id).order_by("-created_at")
Expand All @@ -176,21 +176,21 @@ def get_chatroom_message(chatroom_id: int) -> Any:
# 디비에 저장된 메시지가 30-stored_message_num 보다 많으면 슬라이싱해서 필요한 만큼의 데이터를 가져옴
if len(db_messages) >= 30 - stored_message_num:
serialized_messages = MessageSerializer(db_messages[: 30 - stored_message_num], many=True).data
return serialized_messages[::-1] + messages
return messages + serialized_messages

# 디비에 저장된 메시지가 30-stored_message_num 보다 적으면 db에 저장된 채팅방의 모든 메시지를 가져옴
serialized_messages = MessageSerializer(db_messages, many=True).data
return serialized_messages[::-1] + messages
return messages + serialized_messages

# 레디스에 해당 채팅방 그룹 네임으로 지정된 키값이 없으면 데이터베이스에서 채팅 메시지를 가져옴
db_messages = Message.objects.filter(chatroom_id=chatroom_id)
if db_messages:
if db_messages.count() >= 30:
serialized_messages = MessageSerializer(db_messages[:30], many=True).data
return serialized_messages[::-1]
return serialized_messages

serialized_messages = MessageSerializer(db_messages, many=True).data
return serialized_messages[::-1]
return serialized_messages

# 어디에도 데이터가 존재하지않으면 None을 반환
return None
Expand Down

0 comments on commit 8bfdad3

Please sign in to comment.