notification: add notification history

This commit is contained in:
behruz-dev
2025-10-30 16:17:25 +05:00
parent 22b1d37a1a
commit af8d212b3e
10 changed files with 146 additions and 5 deletions

View 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)