Django/DRF + PostgreSQL/Redis/Celery backend with accounts, library, moments, and notifications apps; React/TypeScript/Vite frontend with Instagram-style sidebar nav, feed, profiles, nested comment replies, notifications, and photo/video upload with ffmpeg-generated posters. Co-Authored-By: Claude Sonnet 5 <[email protected]>
25 lines
971 B
Python
25 lines
971 B
Python
from rest_framework import mixins, permissions, viewsets
|
|
from rest_framework.decorators import action
|
|
from rest_framework.response import Response
|
|
|
|
from .models import Notification
|
|
from .serializers import NotificationSerializer
|
|
|
|
|
|
class NotificationViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
|
|
serializer_class = NotificationSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return Notification.objects.filter(recipient=self.request.user).select_related("actor", "moment")
|
|
|
|
@action(detail=False, methods=["get"], url_path="unread-count")
|
|
def unread_count(self, request):
|
|
count = self.get_queryset().filter(is_read=False).count()
|
|
return Response({"unread_count": count})
|
|
|
|
@action(detail=False, methods=["post"], url_path="mark-read")
|
|
def mark_read(self, request):
|
|
self.get_queryset().filter(is_read=False).update(is_read=True)
|
|
return Response(status=204)
|