fix: handle response errors and improve data return in TechPassportService
This commit is contained in:
@@ -33,18 +33,27 @@ class TechPassportAPIView(GenericAPIView):
|
|||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
serializer = TechPassportSerializer(data=request.data)
|
serializer = TechPassportSerializer(data=request.data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
|
|
||||||
data = serializer.validated_data
|
data = serializer.validated_data
|
||||||
|
|
||||||
try:
|
|
||||||
result = TechPassportService.get_auto_info(
|
result = TechPassportService.get_auto_info(
|
||||||
autonumber=data["autonumber"],
|
autonumber=data["autonumber"],
|
||||||
tech_pass_number=data["tech_pass_number"],
|
tech_pass_number=data["tech_pass_number"],
|
||||||
tech_pass_series=data["tech_pass_series"],
|
tech_pass_series=data["tech_pass_series"],
|
||||||
)
|
)
|
||||||
return Response(result, status=status.HTTP_200_OK)
|
|
||||||
|
|
||||||
except Exception as e:
|
response_data = result["data"]
|
||||||
|
status_code = result["status_code"]
|
||||||
|
|
||||||
|
# success bo‘lsa faqat data ichidagi data qaytariladi
|
||||||
|
if status_code == 200:
|
||||||
return Response(
|
return Response(
|
||||||
{"detail": str(e)},
|
response_data.get("data", {}),
|
||||||
status=status.HTTP_400_BAD_REQUEST
|
status=status.HTTP_200_OK
|
||||||
|
)
|
||||||
|
|
||||||
|
# error bo‘lsa original response qaytariladi
|
||||||
|
return Response(
|
||||||
|
response_data,
|
||||||
|
status=status_code
|
||||||
)
|
)
|
||||||
@@ -44,21 +44,28 @@ class TechPassportService:
|
|||||||
verify=False
|
verify=False
|
||||||
)
|
)
|
||||||
|
|
||||||
response.raise_for_status()
|
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Tech passport info fetched successfully: {response.status_code}"
|
f"Tech passport response status: {response.status_code}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
response_data = response.json()
|
response_data = response.json()
|
||||||
|
except ValueError:
|
||||||
|
response_data = {
|
||||||
|
"detail": "Invalid response from external service"
|
||||||
|
}
|
||||||
|
|
||||||
return response_data.get("data", {})
|
return {
|
||||||
|
"status_code": response.status_code,
|
||||||
|
"data": response_data
|
||||||
|
}
|
||||||
|
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
logger.error(
|
logger.error(str(e))
|
||||||
f"Error while fetching tech passport info: {str(e)}"
|
|
||||||
)
|
|
||||||
return {
|
return {
|
||||||
"success": False,
|
"status_code": 500,
|
||||||
"message": str(e)
|
"data": {
|
||||||
|
"detail": str(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user