Skip to content

Commit 96a6dde

Browse files
committed
fix HasChatUnreadsView
1 parent 05f6f56 commit 96a6dde

2 files changed

Lines changed: 11 additions & 15 deletions

File tree

chats/views.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,14 +219,14 @@ def get(self, request, *args, **kwargs):
219219
user = request.user
220220
# get all user chats
221221
direct_messages = user.direct_chats.all().prefetch_related("messages")
222-
project_messages = user.get_project_chats().prefetch_related("messages")
223-
224-
has_direct_messages_unread = direct_messages.filter(
225-
messages__is_read=False
226-
).exists()
227-
has_project_messages_unread = project_messages.filter(
228-
messages__is_read=False
229-
).exists()
222+
project_chats = user.get_project_chats().prefetch_related("messages")
223+
224+
has_direct_messages_unread = (
225+
direct_messages.filter(messages__is_read=False).distinct().exists()
226+
)
227+
has_project_messages_unread = (
228+
project_chats.filter(messages__is_read=False).distinct().exists()
229+
)
230230
return Response(
231231
{"has_unreads": has_direct_messages_unread or has_project_messages_unread}
232232
)

users/models.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.contrib.auth.models import AbstractUser
22
from django.db import models
3+
from chats.models import ProjectChat
34

45
from users.constants import (
56
ADMIN,
@@ -134,13 +135,8 @@ def calculate_ordering_score(self) -> int:
134135
return score
135136

136137
def get_project_chats(self) -> list:
137-
collaborations = self.collaborations.prefetch_related(
138-
"project__project_chats"
139-
).all()
140-
projects = []
141-
for collaboration in collaborations:
142-
projects.extend(list(collaboration.project.project_chats.all()))
143-
return projects
138+
user_project_ids = self.collaborations.all().values_list("project_id", flat=True)
139+
return ProjectChat.objects.filter(project__in=user_project_ids)
144140

145141
def get_key_skills(self) -> list[str]:
146142
return [skill.strip() for skill in self.key_skills.split(",") if skill.strip()]

0 commit comments

Comments
 (0)