Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion django_messages_drf/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def get_user(self):
def get_thead_by_id(self):
"""Gets a thread by id"""
try:
return Thread.objects.get(id=self.kwargs.get('thread_id'))
return Thread.objects.get(id=self.kwargs.get('thread_uuid'))
except Thread.DoesNotExist:
return

Expand Down
6 changes: 6 additions & 0 deletions django_messages_drf/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ def inbox(cls, user):
"""Returns the inbox of a given user"""
return cls.objects.filter(userthread__user=user, userthread__deleted=False)

@classmethod
def sentbox(cls, user):
"""Returns the sentbox of a given user"""
return cls.objects.filter(userthread__sent_by=user, userthread__deleted=False)

@classmethod
def deleted(cls, user):
"""Returns the deleted messages of a given user"""
Expand Down Expand Up @@ -142,6 +147,7 @@ class UserThread(models.Model):

thread = models.ForeignKey(Thread, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
sent_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

unread = models.BooleanField()
deleted = models.BooleanField()
Expand Down
10 changes: 5 additions & 5 deletions django_messages_drf/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ def test_can_get_edit_endpoint(self):
url = reverse("django_messages_drf:message-edit",
kwargs={
'user_id': user.id,
'thread_id': thread.id
'thread_uuid': thread.uuid
}
)

Expand All @@ -272,7 +272,7 @@ def test_returns_400_when_missing_content_param(self):
url = reverse("django_messages_drf:message-edit",
kwargs={
'user_id': user.id,
'thread_id': thread.id
'thread_uuid': thread.uuid
}
)

Expand All @@ -299,7 +299,7 @@ def test_raises_exception_when_missing_uuid_param(self):
url = reverse("django_messages_drf:message-edit",
kwargs={
'user_id': user.id,
'thread_id': thread.id
'thread_uuid': thread.uuid
}
)

Expand Down Expand Up @@ -328,7 +328,7 @@ def test_message_is_change_only_by_the_user_who_send(self):
url = reverse("django_messages_drf:message-edit",
kwargs={
'user_id': user.id,
'thread_id': thread.id
'thread_uuid': thread.uuid
}
)

Expand All @@ -339,7 +339,7 @@ def test_message_is_change_only_by_the_user_who_send(self):

self.assertEqual(message.sender_id, user.id)
self.assertEqual(message.content, 'content')
self.assertEqual(message.thread_id, thread.id)
self.assertEqual(message.thread_uuid, thread.id)

# SEND MESSAGE
self.app.put(url, user=user, params=params)
Expand Down
11 changes: 6 additions & 5 deletions django_messages_drf/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@

urlpatterns = [
path('inbox/', views.InboxListApiView.as_view(), name='inbox'),
path('message/thread/<uuid>/', views.ThreadListApiView.as_view(), name='thread'),
path('message/thread/<user_id>/send/', views.ThreadCRUDApiView.as_view(), name='thread-create'),
path('message/thread/<uuid>/<user_id>/send/', views.ThreadCRUDApiView.as_view(), name='thread-send'),
path('message/thread/<user_id>/<thread_id>/edit/', views.EditMessageApiView.as_view(), name='message-edit'),
path('thread/<uuid>/delete', views.ThreadCRUDApiView.as_view(), name='thread-delete'),
path('threads/', views.SentboxListApiView.as_view(), name='sentbox'),
path('threads/<uuid>/messages/', views.ThreadListApiView.as_view(), name='thread'),
path('threads/<user_id>', views.ThreadCRUDApiView.as_view(), name='thread-create'),
path('threads/<user_id>/<uuid>', views.ThreadCRUDApiView.as_view(), name='thread-send'),
path('threads/<user_id>/<thread_uuid>', views.EditMessageApiView.as_view(), name='message-edit'),
path('threads/<uuid>', views.ThreadCRUDApiView.as_view(), name='thread-delete'),
]
25 changes: 17 additions & 8 deletions django_messages_drf/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,17 @@ def get_queryset(self):
queryset = Thread.inbox(self.request.user)
return Thread.ordered(queryset)

class SentboxListApiView(DjangoMessageDRFAuthMixin, RequireUserContextView, ListAPIView):
"""
Returns the sentbox for the logged-in user
"""
serializer_class = INBOX_SERIALIZER
pagination_class = Pagination

def get_queryset(self):
queryset = Thread.sentbox(self.request.user)
return Thread.ordered(queryset)


class ThreadListApiView(DjangoMessageDRFAuthMixin, ThreadMixin, RequireUserContextView, ListAPIView):
"""
Expand All @@ -50,18 +61,15 @@ def get(self, request, *args, **kwargs):

class ThreadCRUDApiView(DjangoMessageDRFAuthMixin, ThreadMixin, RequireUserContextView, APIView):
"""
View that allows the reply of a specific message as well as the
We will apply some pagination to return a list for the results and therefore

1. This API gets or creates the Thread
2. If a UUID is passed, then a Thread is validated and created but if only a user_id is
passed, then it will create a new thread and start a conversation.
Creating, Deleting and Following up on existing thread.
If a UUID is passed, then a Thread is validated and parameters are used to create a reply-message.
If only a user_id is passed, then new thread is created (conversation which can be followed up has started).
"""
serializer_class = THREAD_REPLY_SERIALIZER

def post(self, request, uuid=None, *args, **kwargs):
"""
Replies a mensage in given thread
Replies a message in a given thread.
"""
thread = self.get_thread() if uuid else None
user = self.get_user()
Expand All @@ -81,6 +89,7 @@ def post(self, request, uuid=None, *args, **kwargs):

else:
msg = Message.new_reply(thread, self.request.user, serializer.data.get('message'))
thread.sent_by = self.request.user
thread.subject = subject
thread.save()

Expand Down Expand Up @@ -122,7 +131,7 @@ def get_serializer_context(self):
})
return context

def put(self, request, user_id, thread_id, *args, **kwargs):
def put(self, request, user_id, thread_uuid, *args, **kwargs):
"""
Edits a mensage in given thread.

Expand Down
Loading