This commit is contained in:
2026-04-27 18:02:26 +03:30
parent 7c2ec2144d
commit 190a668355
19 changed files with 193 additions and 825 deletions
+3 -40
View File
@@ -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}."
)
+3 -5
View File
@@ -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
View File
@@ -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,