feat: add filter and pagination to document api
This commit is contained in:
@@ -21,9 +21,24 @@ class BaseDocumentSerializer(serializers.ModelSerializer):
|
||||
class ListDocumentSerializer(BaseDocumentSerializer):
|
||||
class Meta(BaseDocumentSerializer.Meta): ...
|
||||
|
||||
|
||||
def get_document(self, obj):
|
||||
request = self.context.get("request")
|
||||
if obj.document:
|
||||
if request:
|
||||
return request.build_absolute_uri(obj.document.url)
|
||||
return obj.document.url
|
||||
return None
|
||||
|
||||
class RetrieveDocumentSerializer(BaseDocumentSerializer):
|
||||
class Meta(BaseDocumentSerializer.Meta): ...
|
||||
|
||||
def get_document(self, obj):
|
||||
request = self.context.get("request")
|
||||
if obj.document:
|
||||
if request:
|
||||
return request.build_absolute_uri(obj.document.url)
|
||||
return obj.document.url
|
||||
return None
|
||||
|
||||
|
||||
class CreateDocumentSerializer(BaseDocumentSerializer):
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django_core.mixins import BaseViewSetMixin
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from drf_spectacular.utils import extend_schema, OpenApiParameter
|
||||
from rest_framework.exceptions import NotFound, PermissionDenied
|
||||
from rest_framework.permissions import AllowAny
|
||||
from rest_framework.viewsets import ReadOnlyModelViewSet, ModelViewSet
|
||||
from rest_framework.parsers import FormParser, MultiPartParser
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
|
||||
from core.apps.evaluation.models import DocumentModel, ValuationDocumentModel, AutoEvaluationModel
|
||||
from core.apps.evaluation.serializers.document import (
|
||||
@@ -39,7 +40,7 @@ class DocumentView(BaseViewSetMixin, ModelViewSet):
|
||||
serializer_class = ListDocumentSerializer
|
||||
permission_classes = [AllowAny]
|
||||
parser_classes = [FormParser, MultiPartParser]
|
||||
|
||||
filter_backends = [DjangoFilterBackend]
|
||||
action_permission_classes = {}
|
||||
action_serializer_class = {
|
||||
"list": ListDocumentSerializer,
|
||||
@@ -47,17 +48,44 @@ class DocumentView(BaseViewSetMixin, ModelViewSet):
|
||||
"create": CreateDocumentSerializer,
|
||||
}
|
||||
|
||||
@extend_schema(summary="Auto evaluation documents.", description="get auto evaluation documents.")
|
||||
@extend_schema(
|
||||
summary="Auto evaluation documents.",
|
||||
description="get auto evaluation documents.",
|
||||
parameters=[
|
||||
OpenApiParameter(
|
||||
name="page",
|
||||
type=int, description="Page number"
|
||||
),
|
||||
OpenApiParameter(
|
||||
name="page_size",
|
||||
type=int, description="Page size"
|
||||
),
|
||||
OpenApiParameter(
|
||||
name="search",
|
||||
type=str, description="Search query"
|
||||
),
|
||||
OpenApiParameter(
|
||||
name="category_id",
|
||||
type=str, description="Filter by category ID"
|
||||
),
|
||||
]
|
||||
)
|
||||
@action(methods=["GET"], detail=False, url_path=r"auto_evaluation/(?P<auto_evaluation_id>\d+)")
|
||||
def auto_evaluation(self, request, auto_evaluation_id=None):
|
||||
try:
|
||||
search = request.query_params.get("search", "")
|
||||
category_id = request.query_params.get("category_id", "")
|
||||
auto_evaluation = get_object_or_404(AutoEvaluationModel, id=auto_evaluation_id)
|
||||
documents = DocumentModel.objects.filter(auto_evaluation=auto_evaluation)
|
||||
if search:
|
||||
documents = documents.filter(title__icontains=search)
|
||||
if category_id:
|
||||
documents = documents.filter(category_id=category_id)
|
||||
page = self.paginate_queryset(documents)
|
||||
if page is not None:
|
||||
serializer = ListDocumentSerializer(page, many=True)
|
||||
serializer = ListDocumentSerializer(page, many=True, context={"request": request})
|
||||
return self.get_paginated_response(serializer.data)
|
||||
serializer = ListDocumentSerializer(documents, many=True)
|
||||
serializer = ListDocumentSerializer(documents, many=True, context={"request": request})
|
||||
return Response(serializer.data)
|
||||
except AutoEvaluationModel.DoesNotExist:
|
||||
raise NotFound("Auto evaluation not found")
|
||||
|
||||
Reference in New Issue
Block a user