UPDATE
This commit is contained in:
+3
-40
@@ -5,43 +5,6 @@ from typing import Any
|
||||
|
||||
class EconomicOverviewService:
|
||||
def get_economic_overview(self, *, farm_uuid: str) -> dict[str, Any]:
|
||||
return {
|
||||
"farm_uuid": farm_uuid,
|
||||
"source": "mock",
|
||||
"economicData": [
|
||||
{
|
||||
"title": "هزینه آب",
|
||||
"value": "$420",
|
||||
"subtitle": "این ماه",
|
||||
"avatarIcon": "tabler-droplet",
|
||||
"avatarColor": "primary",
|
||||
},
|
||||
{
|
||||
"title": "صرفه جویی هوشمند",
|
||||
"value": "$88",
|
||||
"subtitle": "برآورد ماهانه",
|
||||
"avatarIcon": "tabler-bulb",
|
||||
"avatarColor": "success",
|
||||
},
|
||||
{
|
||||
"title": "پیش بینی درآمد",
|
||||
"value": "$3.8k",
|
||||
"subtitle": "این فصل",
|
||||
"avatarIcon": "tabler-chart-line",
|
||||
"avatarColor": "info",
|
||||
},
|
||||
{
|
||||
"title": "هزینه کود",
|
||||
"value": "$190",
|
||||
"subtitle": "برآورد فعلی",
|
||||
"avatarIcon": "tabler-flask",
|
||||
"avatarColor": "warning",
|
||||
},
|
||||
],
|
||||
"chartSeries": [
|
||||
{"name": "هزینه آب", "data": [320, 340, 360, 390, 405, 420]},
|
||||
{"name": "هزینه کود", "data": [150, 155, 160, 170, 180, 190]},
|
||||
{"name": "درآمد", "data": [2200, 2400, 2650, 3000, 3400, 3800]},
|
||||
],
|
||||
"chartCategories": ["فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور"],
|
||||
}
|
||||
raise NotImplementedError(
|
||||
f"Economic overview has no real data source configured for farm {farm_uuid}."
|
||||
)
|
||||
|
||||
@@ -9,14 +9,12 @@ class EconomicOverviewApiTests(TestCase):
|
||||
def setUp(self):
|
||||
self.client = APIClient()
|
||||
|
||||
def test_economic_overview_api_returns_mock_payload(self):
|
||||
def test_economic_overview_api_returns_service_unavailable_without_real_data(self):
|
||||
response = self.client.post(
|
||||
"/overview/",
|
||||
data={"farm_uuid": "550e8400-e29b-41d4-a716-446655440000"},
|
||||
format="json",
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
payload = response.json()["data"]
|
||||
self.assertEqual(payload["source"], "mock")
|
||||
self.assertEqual(payload["economicData"][0]["title"], "هزینه آب")
|
||||
self.assertEqual(response.status_code, 503)
|
||||
self.assertIsNone(response.json()["data"])
|
||||
|
||||
+14
-4
@@ -28,7 +28,7 @@ class EconomicOverviewView(APIView):
|
||||
@extend_schema(
|
||||
tags=["Economy"],
|
||||
summary="دریافت نمای اقتصادی مزرعه",
|
||||
description="با دریافت farm_uuid، نمای اقتصادی مزرعه را فعلا با داده mock برمی گرداند.",
|
||||
description="با دریافت farm_uuid، نمای اقتصادی مزرعه را از منبع واقعی برمی گرداند.",
|
||||
request=EconomicOverviewRequestSerializer,
|
||||
responses={
|
||||
200: build_response(
|
||||
@@ -39,6 +39,10 @@ class EconomicOverviewView(APIView):
|
||||
EconomyErrorSerializer,
|
||||
"داده ورودی نامعتبر است.",
|
||||
),
|
||||
503: build_response(
|
||||
EconomyErrorSerializer,
|
||||
"منبع داده نمای اقتصادی در دسترس نیست.",
|
||||
),
|
||||
},
|
||||
examples=[
|
||||
OpenApiExample(
|
||||
@@ -57,9 +61,15 @@ class EconomicOverviewView(APIView):
|
||||
)
|
||||
|
||||
service = apps.get_app_config("economy").get_economic_overview_service()
|
||||
data = service.get_economic_overview(
|
||||
farm_uuid=str(serializer.validated_data["farm_uuid"])
|
||||
)
|
||||
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,
|
||||
)
|
||||
return Response(
|
||||
{"code": 200, "msg": "success", "data": data},
|
||||
status=status.HTTP_200_OK,
|
||||
|
||||
Reference in New Issue
Block a user