from django_core.mixins import BaseViewSetMixin from django_filters.rest_framework import DjangoFilterBackend from drf_spectacular.utils import OpenApiParameter, extend_schema from rest_framework.filters import OrderingFilter from rest_framework.permissions import AllowAny from rest_framework.response import Response from rest_framework.viewsets import ReadOnlyModelViewSet from core.apps.evaluation.filters.history import ( AutoevaluationhistoryFilter, QuickevaluationhistoryFilter, ) from core.apps.evaluation.models import AutoevaluationhistoryModel, QuickevaluationhistoryModel from core.apps.evaluation.serializers.history import ( CreateAutoevaluationhistorySerializer, CreateQuickevaluationhistorySerializer, ListAutoevaluationhistorySerializer, ListQuickevaluationhistorySerializer, RetrieveAutoevaluationhistorySerializer, RetrieveQuickevaluationhistorySerializer, ) @extend_schema( tags=["AutoEvaluationHistory"], parameters=[ OpenApiParameter("auto_evaluation", int, description="AutoEvaluation ID bo'yicha filter"), OpenApiParameter("event_type", str, description="Event turi bo'yicha filter"), OpenApiParameter("created_from", str, description="Boshlanish sanasi (ISO 8601)"), OpenApiParameter("created_to", str, description="Tugash sanasi (ISO 8601)"), ], ) class AutoEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet): # select_related("auto_evaluation") faqat retrieve uchun — list uchun kerak emas queryset = AutoevaluationhistoryModel.objects.only( "id", "auto_evaluation_id", "event_type", "actor_id", "actor_full_name", "actor_role", "meta", "created_at", ) serializer_class = ListAutoevaluationhistorySerializer permission_classes = [AllowAny] pagination_class = None filter_backends = [DjangoFilterBackend, OrderingFilter] filterset_class = AutoevaluationhistoryFilter ordering_fields = ["created_at"] ordering = ["created_at"] action_permission_classes = {} action_serializer_class = { "list": ListAutoevaluationhistorySerializer, "retrieve": RetrieveAutoevaluationhistorySerializer, "create": CreateAutoevaluationhistorySerializer, } def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) # Queryset bir marta evaluate qilinadi — COUNT uchun alohida query yo'q results = list(queryset) serializer = self.get_serializer(results, many=True) return Response({ "count": len(results), "next": None, "previous": None, "results": serializer.data, }) @extend_schema( tags=["QuickEvaluationHistory"], parameters=[ OpenApiParameter("quick_evaluation", int, description="QuickEvaluation ID bo'yicha filter"), OpenApiParameter("event_type", str, description="Event turi bo'yicha filter"), OpenApiParameter("created_from", str, description="Boshlanish sanasi (ISO 8601)"), OpenApiParameter("created_to", str, description="Tugash sanasi (ISO 8601)"), ], ) class QuickEvaluationHistoryView(BaseViewSetMixin, ReadOnlyModelViewSet): queryset = QuickevaluationhistoryModel.objects.only( "id", "quick_evaluation_id", "event_type", "actor_id", "actor_full_name", "actor_role", "meta", "created_at", ) serializer_class = ListQuickevaluationhistorySerializer permission_classes = [AllowAny] pagination_class = None filter_backends = [DjangoFilterBackend, OrderingFilter] filterset_class = QuickevaluationhistoryFilter ordering_fields = ["created_at"] ordering = ["created_at"] action_permission_classes = {} action_serializer_class = { "list": ListQuickevaluationhistorySerializer, "retrieve": RetrieveQuickevaluationhistorySerializer, "create": CreateQuickevaluationhistorySerializer, } def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) results = list(queryset) serializer = self.get_serializer(results, many=True) return Response({ "count": len(results), "next": None, "previous": None, "results": serializer.data, })