2222 DirectChatDetailSerializer ,
2323)
2424from chats .utils import get_all_files
25+ from files .models import UserFile
2526from files .serializers import UserFileSerializer
2627
2728User = get_user_model ()
@@ -35,6 +36,31 @@ def get_queryset(self):
3536 user = self .request .user
3637 return user .direct_chats .all ()
3738
39+ def get (self , request , * args , ** kwargs ):
40+ chats = self .get_queryset ()
41+ serialized_chats = []
42+ for chat in chats :
43+ # fixme: move to function like get_user() and get_opponent()
44+ chat_id = chat .id
45+ user1_id , user2_id = map (int , chat_id .split ("_" ))
46+
47+ try :
48+ user1 = User .objects .get (pk = user1_id )
49+ user2 = User .objects .get (pk = user2_id )
50+ except User .DoesNotExist :
51+ # fixme: show deleted profile
52+ continue
53+
54+ if user1 == request .user :
55+ opponent = user2
56+ else : # fixme: if user1 == user2
57+ opponent = user1
58+
59+ context = {"opponent" : opponent }
60+ serialized_chat = DirectChatListSerializer (chat , context = context ).data
61+ serialized_chats .append (serialized_chat )
62+ return Response (serialized_chats , status = status .HTTP_200_OK )
63+
3864
3965class ProjectChatList (ListAPIView ):
4066 serializer_class = ProjectChatListSerializer
@@ -69,16 +95,17 @@ def get(self, request, *args, **kwargs) -> Response:
6995 user1 = User .objects .get (pk = user1_id )
7096 user2 = User .objects .get (pk = user2_id )
7197
72- data = DirectChatDetailSerializer (DirectChat .get_chat (user1 , user2 )).data
73-
7498 if user1 == request .user :
75- # may be is better to use serializer or return dict -
76- # {"first_name": user2.first_name, "last_name": user2.last_name}
77- data ["name" ] = f"{ user2 .first_name } { user2 .last_name } "
78- data ["image_address" ] = user2 .avatar
99+ opponent = user2
79100 else :
80- data ["name" ] = f"{ user1 .first_name } { user1 .last_name } "
81- data ["image_address" ] = user1 .avatar
101+ opponent = user1
102+ context = {"opponent" : opponent }
103+ data = DirectChatDetailSerializer (
104+ DirectChat .get_chat (user1 , user2 ), context = context
105+ ).data
106+
107+ data ["name" ] = f"{ opponent .first_name } { opponent .last_name } "
108+ data ["image_address" ] = opponent .avatar
82109
83110 return Response (
84111 status = status .HTTP_200_OK ,
@@ -124,12 +151,15 @@ class ProjectChatMessageList(ListCreateAPIView):
124151 pagination_class = MessageListPagination
125152
126153 def get_queryset (self ):
127- return (
128- ProjectChat .objects .get (id = self .kwargs ["pk" ])
129- .messages .filter (is_deleted = False )
130- .order_by ("-created_at" )
131- .all ()
132- )
154+ try :
155+ return (
156+ ProjectChat .objects .get (id = self .kwargs ["pk" ])
157+ .messages .filter (is_deleted = False )
158+ .order_by ("-created_at" )
159+ .all ()
160+ )
161+ except ProjectChat .DoesNotExist :
162+ return ProjectChat .objects .none ()
133163
134164 def post (self , request , * args , ** kwargs ):
135165 # TODO: try to create a message in a chat. If chat doesn't exist, create it and then create a message.
@@ -155,6 +185,8 @@ class ProjectChatFileList(ListCreateAPIView):
155185 permission_classes = [IsProjectChatMember ]
156186
157187 def get_queryset (self ):
158- messages = ProjectChat .objects .get (id = self .kwargs ["pk" ]).messages .all ()
159-
160- return get_all_files (messages )
188+ try :
189+ messages = ProjectChat .objects .get (id = self .kwargs ["pk" ]).messages .all ()
190+ return get_all_files (messages )
191+ except ProjectChat .DoesNotExist :
192+ return UserFile .objects .none ()
0 commit comments