Skip to content

Commit f607dcf

Browse files
authored
Merge pull request #117 from PROCOLLAB-github/feature/chats-files
Added route for all files in a chat
2 parents b9539ad + 2c5e78a commit f607dcf

4 files changed

Lines changed: 50 additions & 9 deletions

File tree

chats/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,13 @@ class FileToMessage(models.Model):
297297
direct_message = models.ForeignKey(
298298
DirectChatMessage,
299299
on_delete=models.CASCADE,
300-
related_name="file_to_direct_message",
300+
related_name="file_to_message",
301301
null=True,
302302
)
303303
project_message = models.ForeignKey(
304304
ProjectChatMessage,
305305
on_delete=models.CASCADE,
306-
related_name="file_to_direct_message",
306+
related_name="file_to_message",
307307
null=True,
308308
)
309309

chats/urls.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,35 @@
77
ProjectChatMessageList,
88
ProjectChatDetail,
99
DirectChatDetail,
10+
ProjectChatFileList,
11+
DirectChatFileList,
1012
)
1113

1214
app_name = "chats"
1315

1416
urlpatterns = [
1517
path("directs/", DirectChatList.as_view(), name="direct-chat-list"),
1618
path("directs/<slug:pk>/", DirectChatDetail.as_view(), name="direct-chat-detail"),
17-
path("projects/", ProjectChatList.as_view(), name="project-chat-list"),
18-
path("projects/<int:pk>/", ProjectChatDetail.as_view(), name="project-chat-detail"),
1919
path(
2020
"directs/<slug:pk>/messages/",
2121
DirectChatMessageList.as_view(),
2222
name="direct-chat-messages",
2323
),
24+
path(
25+
"directs/<slug:pk>/files/",
26+
DirectChatFileList.as_view(),
27+
name="direct-chat-files",
28+
),
29+
path("projects/", ProjectChatList.as_view(), name="project-chat-list"),
30+
path("projects/<int:pk>/", ProjectChatDetail.as_view(), name="project-chat-detail"),
2431
path(
2532
"projects/<int:pk>/messages/",
2633
ProjectChatMessageList.as_view(),
2734
name="project-chat-messages",
2835
),
36+
path(
37+
"projects/<int:pk>/files/",
38+
ProjectChatFileList.as_view(),
39+
name="project-chat-files",
40+
),
2941
]

chats/utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,15 @@ async def match_files_and_messages(file_urls, messages):
115115
project_message=messages["project_message"],
116116
file=file,
117117
)
118+
119+
120+
def get_all_files(messages):
121+
# looks like something bad
122+
files = []
123+
for message in messages:
124+
files_in_message = [
125+
file_to_message.file for file_to_message in message.file_to_message.all()
126+
]
127+
files.extend(files_in_message)
128+
129+
return files

chats/views.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
from django.contrib.auth import get_user_model
22

3-
# from django.db import transaction
43
from rest_framework import status
54
from rest_framework.generics import (
65
ListAPIView,
76
ListCreateAPIView,
87
RetrieveAPIView,
9-
# GenericAPIView,
10-
# get_object_or_404,
118
)
129

1310
from rest_framework.permissions import IsAuthenticated
@@ -23,8 +20,8 @@
2320
ProjectChatDetailSerializer,
2421
DirectChatDetailSerializer,
2522
)
26-
27-
# from files.helpers import FileAPI, get_file_data
23+
from chats.utils import get_all_files
24+
from files.serializers import UserFileSerializer
2825

2926
User = get_user_model()
3027

@@ -136,3 +133,23 @@ def post(self, request, *args, **kwargs):
136133
self.perform_create(serializer)
137134
headers = self.get_success_headers(serializer.data)
138135
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
136+
137+
138+
class DirectChatFileList(ListCreateAPIView):
139+
serializer_class = UserFileSerializer
140+
permission_classes = [IsAuthenticated]
141+
142+
def get_queryset(self):
143+
messages = self.request.user.direct_chats.get(id=self.kwargs["pk"]).messages.all()
144+
145+
return get_all_files(messages)
146+
147+
148+
class ProjectChatFileList(ListCreateAPIView):
149+
serializer_class = UserFileSerializer
150+
permission_classes = [IsAuthenticated]
151+
152+
def get_queryset(self):
153+
messages = ProjectChat.objects.get(id=self.kwargs["pk"]).messages.all()
154+
155+
return get_all_files(messages)

0 commit comments

Comments
 (0)