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)