Files
Ai/economy/views.py
T

77 lines
2.7 KiB
Python
Raw Normal View History

2026-04-25 17:22:41 +03:30
from django.apps import apps
from drf_spectacular.utils import OpenApiExample, extend_schema
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from config.openapi import build_envelope_serializer, build_response
from .serializers import (
EconomicOverviewRequestSerializer,
EconomicOverviewResponseSerializer,
)
EconomicOverviewEnvelopeSerializer = build_envelope_serializer(
"EconomicOverviewEnvelopeSerializer",
EconomicOverviewResponseSerializer,
)
EconomyErrorSerializer = build_envelope_serializer(
"EconomyErrorSerializer",
data_required=False,
allow_null=True,
)
class EconomicOverviewView(APIView):
@extend_schema(
tags=["Economy"],
summary="دریافت نمای اقتصادی مزرعه",
2026-04-27 18:02:26 +03:30
description="با دریافت farm_uuid، نمای اقتصادی مزرعه را از منبع واقعی برمی گرداند.",
2026-04-25 17:22:41 +03:30
request=EconomicOverviewRequestSerializer,
responses={
200: build_response(
EconomicOverviewEnvelopeSerializer,
"نمای اقتصادی مزرعه با موفقیت بازگردانده شد.",
),
400: build_response(
EconomyErrorSerializer,
"داده ورودی نامعتبر است.",
),
2026-04-27 18:02:26 +03:30
503: build_response(
EconomyErrorSerializer,
"منبع داده نمای اقتصادی در دسترس نیست.",
),
2026-04-25 17:22:41 +03:30
},
examples=[
OpenApiExample(
"نمونه درخواست economy",
value={"farm_uuid": "11111111-1111-1111-1111-111111111111"},
request_only=True,
)
],
)
def post(self, request):
serializer = EconomicOverviewRequestSerializer(data=request.data)
if not serializer.is_valid():
return Response(
{"code": 400, "msg": "داده نامعتبر.", "data": serializer.errors},
status=status.HTTP_400_BAD_REQUEST,
)
service = apps.get_app_config("economy").get_economic_overview_service()
2026-04-27 18:02:26 +03:30
try:
data = service.get_economic_overview(
farm_uuid=str(serializer.validated_data["farm_uuid"])
)
except NotImplementedError as exc:
return Response(
{"code": 503, "msg": str(exc), "data": None},
status=status.HTTP_503_SERVICE_UNAVAILABLE,
)
2026-04-25 17:22:41 +03:30
return Response(
{"code": 200, "msg": "success", "data": data},
status=status.HTTP_200_OK,
)