add request status change api

This commit is contained in:
Shaxobff
2026-04-22 13:52:39 +05:00
parent cb2d83b00d
commit 64993805af
2 changed files with 47 additions and 0 deletions

View File

@@ -1,3 +1,5 @@
from django.shortcuts import get_object_or_404
from django_core.mixins import BaseViewSetMixin
from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import extend_schema
@@ -5,6 +7,9 @@ from rest_framework.filters import OrderingFilter, SearchFilter
from rest_framework.pagination import PageNumberPagination
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from core.apps.evaluation.filters.request import EvaluationrequestFilter
from core.apps.evaluation.models import EvaluationrequestModel
@@ -13,6 +18,7 @@ from core.apps.evaluation.serializers.request import (
ListEvaluationrequestSerializer,
RetrieveEvaluationrequestSerializer,
)
from core.apps.evaluation.choices.request import RequestStatus
# class RequestPagination(PageNumberPagination):
@@ -128,3 +134,41 @@ class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
def serializer_context(self):
return self.serializer_class(context={"request": self.request})
@extend_schema(tags=["EvaluationRequest"])
class EvaluationStatusChange(APIView):
permission_classes = [IsAuthenticated]
def post(self, request, pk):
if request.user.role not in [RoleChoice.ADMIN, RoleChoice.SUPERUSER]:
return Response({'detail': 'Forbidden'}, status=status.HTTP_403_FORBIDDEN)
evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
status_value = request.data.get('status')
if not status_value:
return Response({'detail': 'Status is required'}, status=status.HTTP_400_BAD_REQUEST)
valid_statuses = [
RequestStatus.PENDING,
RequestStatus.IN_PROGRESS,
RequestStatus.COMPLETED,
RequestStatus.REJECTED
]
if status_value not in valid_statuses:
return Response(
{'detail': f'Invalid status. Must be one of: {valid_statuses}'},
status=status.HTTP_400_BAD_REQUEST
)
evaluation.status = status_value
evaluation.save()
return Response({
'success': True,
'status': evaluation.status,
'id': evaluation.pk
})