feat: add appraisers for auto-evaluation and add curd for this

This commit is contained in:
xoliqberdiyev
2026-04-03 17:32:05 +05:00
parent be0c96b28a
commit 9a18dda657
10 changed files with 172 additions and 7 deletions

View File

@@ -1,16 +1,22 @@
from django.db.models import Q
from django_core.mixins import BaseViewSetMixin
from django.shortcuts import get_object_or_404
from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import extend_schema
from drf_spectacular.utils import extend_schema, OpenApiParameter
from rest_framework.filters import OrderingFilter, SearchFilter
from rest_framework.permissions import AllowAny
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.viewsets import ModelViewSet
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from core.apps.accounts.serializers.user import UserSerializer
from core.apps.evaluation.filters.auto import AutoevaluationFilter
from core.apps.evaluation.models import AutoEvaluationModel
from core.apps.evaluation.serializers.auto import (
CreateAutoevaluationSerializer,
ListAutoevaluationSerializer,
RetrieveAutoevaluationSerializer,
AutoEvaluationAppraisersSerializer
)
@@ -67,3 +73,75 @@ class AutoEvaluationView(BaseViewSetMixin, ModelViewSet):
"retrieve": RetrieveAutoevaluationSerializer,
"create": CreateAutoevaluationSerializer,
}
@extend_schema(tags=["AutoEvaluation"])
class AutoEvaluationSetAppraisersView(GenericAPIView):
permission_classes = [IsAuthenticated]
queryset = AutoEvaluationModel.objects.all()
serializer_class = AutoEvaluationAppraisersSerializer
def post(self, request, id):
try:
auto_evaluation = get_object_or_404(AutoEvaluationModel, id=id)
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
users = serializer.validated_data.get("users")
auto_evaluation.appraisers.set(users)
auto_evaluation.save()
return Response({"success": True, "data": "Foydalanuvchilar muvaffaqiyatli qo'shildi"})
except Exception as e:
return Response({"error": str(e)}, status=500)
@extend_schema(tags=["AutoEvaluation"])
class AutoEvaluationRemoveAppraisersView(GenericAPIView):
permission_classes = [IsAuthenticated]
queryset = AutoEvaluationModel.objects.all()
serializer_class = AutoEvaluationAppraisersSerializer
def post(self, request, id):
try:
auto_evaluation = get_object_or_404(AutoEvaluationModel, id=id)
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
users = serializer.validated_data.get("users")
auto_evaluation.appraisers.remove(*users)
auto_evaluation.save()
return Response({"success": True, "data": "Foydalanuvchilar muvaffaqiyatli o'chirildi"})
except Exception as e:
return Response({"error": str(e)}, status=500)
@extend_schema(tags=["AutoEvaluation"])
class AutoEvaluationListAppraisersView(GenericAPIView):
permission_classes = [IsAuthenticated]
queryset = AutoEvaluationModel.objects.all()
serializer_class = UserSerializer
@extend_schema(
parameters=[
OpenApiParameter(
name="search",
type=str,
description="Search query",
required=False,
)
]
)
def get(self, request, id):
try:
search_query = request.query_params.get("search", "")
auto_evaluation = get_object_or_404(AutoEvaluationModel, id=id)
query = auto_evaluation.appraisers.all()
if search_query:
query = query.filter(
Q(phone__icontains=search_query) |
Q(first_name__icontains=search_query) |
Q(last_name__icontains=search_query)
)
page = self.paginate_queryset(query)
serializer = self.serializer_class(page, many=True)
return self.get_paginated_response(serializer.data)
except Exception as e:
return Response({"error": str(e)}, status=500)

View File

@@ -49,7 +49,7 @@ class DocumentView(BaseViewSetMixin, ModelViewSet):
}
@extend_schema(
summary="Auto evaluation documents.",
summary="Auto evaluation documents.",
description="get auto evaluation documents.",
parameters=[
OpenApiParameter(