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