Files
backend/core/apps/api/views/notification/notification.py

55 lines
2.0 KiB
Python

from xmlrpc.client import Fault
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.viewsets import ReadOnlyModelViewSet
from django_core.mixins.base import BaseViewSetMixin
from drf_spectacular.utils import extend_schema
from core.apps.accounts.models import UserNotification
from rest_framework.decorators import action
from django_filters.rest_framework import DjangoFilterBackend
from django.utils.translation import gettext_lazy as _
from core.apps.api.serializers.notification import (
ListUserNotificationSerializer,
CreateUserNotificationSerializer,
RetrieveUserNotificationSerializer,
UpdateUserNotificationSerializer
)
@extend_schema(tags=["Notification"])
class NotificationViewSet(BaseViewSetMixin, ReadOnlyModelViewSet):
permission_classes = [IsAuthenticated]
serializer_class = ListUserNotificationSerializer
filter_backends = [DjangoFilterBackend]
action_permission_classes = {}
action_serializer_class = {
"list": ListUserNotificationSerializer,
"retrieve": RetrieveUserNotificationSerializer,
"create": CreateUserNotificationSerializer,
}
def get_queryset(self):
qs = UserNotification.objects.filter(user=self.request.user).order_by("-created_at")
return qs
@action(detail=True, methods=["post"])
def notification_read(self, request, pk=None):
notification = self.get_object()
serializer = UpdateUserNotificationSerializer(
notification,
data={"is_read": True},
partial=True
)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
@action(detail=False, methods=["post"])
def all_read(self, request):
user = request.user
UserNotification.objects.filter(user=user, is_read=False).update(is_read=True)
return Response({"detail": _("Barcha xabarlar o'qilgan qilindi!")}, status=status.HTTP_200_OK)