38191-vm/core/api_views.py
2026-02-09 04:37:40 +00:00

49 lines
1.7 KiB
Python

from rest_framework import viewsets, permissions, filters
from rest_framework.views import APIView
from rest_framework.response import Response
from django_filters.rest_framework import DjangoFilterBackend
from django.db.models import Q
from core.models import Bookmark, Team
from core.serializers import BookmarkSerializer, BookmarkDetailSerializer, TeamSerializer
from core.tasks import process_bookmark
class ApiStatusView(APIView):
permission_classes = [permissions.AllowAny]
def get(self, request):
return Response({
"status": "up",
"authenticated": request.user.is_authenticated
})
class BookmarkViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated]
filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
filterset_fields = ['is_favorite']
search_fields = ['title', 'url', 'notes', 'extraction__content_text']
ordering_fields = ['created_at', 'updated_at', 'title']
ordering = ['-created_at']
def get_queryset(self):
user_teams = self.request.user.teams.all()
return Bookmark.objects.filter(
Q(user=self.request.user) |
Q(shares__team__in=user_teams)
).distinct().select_related('extraction', 'summary')
def get_serializer_class(self):
if self.action == 'retrieve':
return BookmarkDetailSerializer
return BookmarkSerializer
def perform_create(self, serializer):
bookmark = serializer.save()
process_bookmark.delay(bookmark.id)
class TeamViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated]
serializer_class = TeamSerializer
def get_queryset(self):
return self.request.user.teams.all()