From e02935eac889378dab8f67b90abf2bcbf106bffb Mon Sep 17 00:00:00 2001 From: Aroy-Art Date: Thu, 20 Mar 2025 19:08:41 +0100 Subject: [PATCH] Add: post endpoints for singel post py user, source_site --- backend/api/posts/urls.py | 26 +++++++++++++++-- backend/api/posts/views.py | 60 +++++++++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 6 deletions(-) diff --git a/backend/api/posts/urls.py b/backend/api/posts/urls.py index faf9644..d682a8f 100644 --- a/backend/api/posts/urls.py +++ b/backend/api/posts/urls.py @@ -1,8 +1,30 @@ from django.urls import path - -from api.posts.views import PostDetailView, PostListView +from api.posts.views import ( + PostDetailView, + PostDetailSiteCreatorView, + PostListView, + PostListSourceView, + PostListSourceCreatorView, + PostListSourceCategoryView, +) urlpatterns = [ path("/", PostDetailView.as_view(), name="post_detail"), + path( + "///", + PostDetailSiteCreatorView.as_view(), + name="post_detail_with_site_creator", + ), path("", PostListView.as_view(), name="post_list"), + path("/", PostListSourceView.as_view(), name="post_list_source"), + path( + "//", + PostListSourceCreatorView.as_view(), + name="post_list_source_creator", + ), + path( + "//", + PostListSourceCategoryView.as_view(), + name="post_list_source_creator_category", + ), ] diff --git a/backend/api/posts/views.py b/backend/api/posts/views.py index a1c230d..f4456c5 100644 --- a/backend/api/posts/views.py +++ b/backend/api/posts/views.py @@ -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)