notification: add notification history
This commit is contained in:
43
core/apps/notifications/views/notification_history.py
Normal file
43
core/apps/notifications/views/notification_history.py
Normal file
@@ -0,0 +1,43 @@
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from rest_framework import generics, views
|
||||
from rest_framework.response import Response
|
||||
|
||||
from core.apps.accounts.permissions.permissions import HasRolePermission
|
||||
from core.apps.notifications.models import NotificationHistory
|
||||
from core.apps.notifications.serializers.notification_history import NotificationHistorySerializer
|
||||
|
||||
|
||||
|
||||
class NotificationHistoryListApiView(generics.GenericAPIView):
|
||||
serializer_class = NotificationHistorySerializer
|
||||
permission_classes = [HasRolePermission]
|
||||
|
||||
def get_queryset(self):
|
||||
return NotificationHistory.objects.filter(user=self.request.user).order_by('-created_at')
|
||||
|
||||
def get(self, request):
|
||||
queryset = self.get_queryset()
|
||||
is_read = request.query_params.get('is_read')
|
||||
if is_read:
|
||||
if is_read.lower() == 'true':
|
||||
queryset = queryset.filter(is_read=True)
|
||||
if is_read.lower() == 'false':
|
||||
queryset = queryset.filter(is_read=False)
|
||||
page = self.paginate_queryset(queryset)
|
||||
if page is not None:
|
||||
serializer = self.serializer_class(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
return None
|
||||
|
||||
|
||||
class NotificationHistoryUpdateApiView(views.APIView):
|
||||
permission_classes = [HasRolePermission]
|
||||
|
||||
def post(self, request, id):
|
||||
obj = get_object_or_404(NotificationHistory, id=id)
|
||||
if obj.is_read:
|
||||
return Response({'success': False, "message": 'already readed'}, status=400)
|
||||
obj.is_read = True
|
||||
obj.save()
|
||||
return Response({'success': True, "message": 'readed'}, status=200)
|
||||
Reference in New Issue
Block a user