Skip to content

Commit 2e65bcb

Browse files
committed
optimized directs
1 parent fcb93cd commit 2e65bcb

2 files changed

Lines changed: 10 additions & 19 deletions

File tree

chats/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class DirectChatListSerializer(serializers.ModelSerializer):
1818

1919
def get_opponent(self, chat: DirectChat):
2020
user = self.context.get("opponent")
21-
return UserDetailSerializer(
21+
return UserChatSerializer(
2222
user, context={"request": self.context.get("request")}
2323
).data
2424

chats/views.py

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,20 @@ class DirectChatList(ListAPIView):
3535
permission_classes = [IsAuthenticated]
3636

3737
def get_queryset(self):
38-
user = self.request.user
39-
return user.direct_chats.all()
38+
return DirectChat.objects.prefetch_related("users").filter(
39+
users=self.request.user
40+
)
4041

4142
def get(self, request, *args, **kwargs):
4243
chats = self.get_queryset()
4344
serialized_chats = []
4445
for chat in chats:
45-
# fixme: move to function like get_user() and get_opponent()
46-
chat_id = chat.id
47-
user1_id, user2_id = map(int, chat_id.split("_"))
48-
49-
try:
50-
user1 = User.objects.get(pk=user1_id)
51-
user2 = User.objects.get(pk=user2_id)
52-
except User.DoesNotExist:
53-
# fixme: show deleted profile
54-
continue
55-
56-
if user1 == request.user:
57-
opponent = user2
58-
else: # fixme: if user1 == user2
59-
opponent = user1
46+
user1_id, _ = map(int, chat.id.split("_"))
47+
# TODO сделать проверку на удаление профиля
48+
if user1_id == request.user.id:
49+
opponent = chat.users.all()[1]
50+
else:
51+
opponent = chat.users.first()
6052

6153
context = {"opponent": opponent}
6254
serialized_chat = DirectChatListSerializer(chat, context=context).data
@@ -180,7 +172,6 @@ class DirectChatFileList(ListCreateAPIView):
180172
permission_classes = [IsAuthenticated]
181173

182174
def get_queryset(self):
183-
184175
messages = self.request.user.direct_chats.get(id=self.kwargs["id"]).messages.all()
185176

186177
return get_all_files(messages)

0 commit comments

Comments
 (0)