Files
backend-v1/core/apps/documents/views/executor.py
2026-05-06 17:57:07 +05:00

48 lines
1.9 KiB
Python

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from core.apps.documents.models import ExecutorInfoModel
from core.apps.documents.serializers.executor import ExecutorInfoSerializer
class ExecutorInfoView(APIView):
"""Singleton endpoint — faqat bitta ExecutorInfo yozuvi bo'ladi."""
def get(self, request, *args, **kwargs):
instance = ExecutorInfoModel.objects.order_by("created_at").first()
if not instance:
return Response({}, status=status.HTTP_200_OK)
return Response(ExecutorInfoSerializer(instance).data)
def post(self, request, *args, **kwargs):
if ExecutorInfoModel.objects.exists():
return Response(
{"detail": "ExecutorInfo allaqachon mavjud. Yangilash uchun PUT/PATCH ishlating."},
status=status.HTTP_400_BAD_REQUEST,
)
serializer = ExecutorInfoSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
def put(self, request, *args, **kwargs):
return self._upsert(request, partial=False)
def patch(self, request, *args, **kwargs):
return self._upsert(request, partial=True)
def delete(self, request, *args, **kwargs):
instance = ExecutorInfoModel.objects.order_by("created_at").first()
if not instance:
return Response(status=status.HTTP_404_NOT_FOUND)
instance.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
def _upsert(self, request, partial):
instance = ExecutorInfoModel.objects.order_by("created_at").first()
serializer = ExecutorInfoSerializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)