55 lines
2.0 KiB
Python
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)
|