Add: post endpoints for singel post py user, source_site

This commit is contained in:
Aroy-Art 2025-03-20 19:08:41 +01:00
parent 91e7ea2e81
commit e02935eac8
Signed by: Aroy
GPG key ID: 583642324A1D2070
2 changed files with 80 additions and 6 deletions

View file

@ -1,6 +1,7 @@
from rest_framework.generics import ListAPIView, RetrieveAPIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from drf_spectacular.utils import extend_schema
from apps.archive.models import PostModel
@ -35,12 +36,53 @@ class PostListView(ListAPIView):
def get_queryset(self):
user = self.request.user.userprofile
if user.show_mature:
queryset = PostModel.objects.all()
else:
queryset = PostModel.objects.filter(mature=False)
queryset = PostModel.objects.all()
# Apply mature filtering
if not user.show_mature:
queryset = queryset.filter(mature=False)
# Extract optional parameters
source_site = self.kwargs.get("source_site")
creator_slug_or_id = self.kwargs.get("creator_slug_or_id")
category = self.kwargs.get("category")
# Filter by source_site if provided
if source_site:
queryset = queryset.filter(source_site__slug=source_site)
# Filter by creator (either by slug or id)
if creator_slug_or_id:
queryset = queryset.filter(
creator__slug=creator_slug_or_id
) | queryset.filter(creator__creator_id=creator_slug_or_id)
if category:
queryset = queryset.filter(category__slug=category)
return queryset.order_by("-date_created")
@extend_schema(operation_id="posts_list_all")
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
class PostListSourceView(PostListView):
@extend_schema(operation_id="posts_list_by_source")
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
class PostListSourceCreatorView(PostListView):
@extend_schema(operation_id="posts_list_by_source_and_creator")
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
class PostListSourceCategoryView(PostListView):
@extend_schema(operation_id="posts_list_by_source_creator_and_category")
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
class PostDetailView(RetrieveAPIView):
@ -50,3 +92,13 @@ class PostDetailView(RetrieveAPIView):
"post_id" # This tells DRF to use the "post_id" URL kwarg for lookups.
)
queryset = PostModel.objects.all()
@extend_schema(operation_id="posts_retrieve_by_id")
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)
class PostDetailSiteCreatorView(PostDetailView):
@extend_schema(operation_id="posts_retrieve_by_site_creator_id")
def get(self, request, *args, **kwargs):
return super().get(request, *args, **kwargs)