68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
"""
|
|
Farm Dashboard API views.
|
|
"""
|
|
|
|
from rest_framework import status
|
|
from rest_framework import serializers
|
|
from rest_framework.permissions import AllowAny
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
from drf_spectacular.utils import extend_schema, extend_schema_view
|
|
|
|
from config.swagger import code_response
|
|
from .mock_data import get_config, update_config
|
|
from .serializers import FarmDashboardConfigPatchSerializer, FarmDashboardConfigSerializer
|
|
|
|
|
|
@extend_schema_view(
|
|
get=extend_schema(
|
|
tags=["Farm Dashboard"],
|
|
responses={200: code_response("FarmDashboardConfigGetResponse", data=FarmDashboardConfigSerializer())},
|
|
),
|
|
patch=extend_schema(
|
|
tags=["Farm Dashboard"],
|
|
request=FarmDashboardConfigPatchSerializer,
|
|
responses={200: code_response("FarmDashboardConfigPatchResponse", data=FarmDashboardConfigSerializer())},
|
|
),
|
|
)
|
|
class FarmDashboardConfigView(APIView):
|
|
"""
|
|
Farm dashboard config endpoints.
|
|
GET returns the current config.
|
|
PATCH accepts partial updates and returns the full final config.
|
|
"""
|
|
permission_classes = [AllowAny]
|
|
|
|
def get(self, request):
|
|
config = get_config()
|
|
return Response({"code": 200, "msg": "OK", "data": config}, status=status.HTTP_200_OK)
|
|
|
|
def patch(self, request):
|
|
serializer = FarmDashboardConfigPatchSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
config = update_config(serializer.validated_data)
|
|
response_serializer = FarmDashboardConfigSerializer(config)
|
|
return Response(
|
|
{"code": 200, "msg": "OK", "data": response_serializer.data},
|
|
status=status.HTTP_200_OK,
|
|
)
|
|
|
|
|
|
@extend_schema_view(
|
|
get=extend_schema(
|
|
tags=["Farm Dashboard"],
|
|
responses={200: code_response("FarmDashboardCardsResponse", data=serializers.JSONField())},
|
|
),
|
|
)
|
|
class FarmDashboardCardsView(APIView):
|
|
"""
|
|
Farm dashboard cards endpoint: GET.
|
|
Returns unified response with all 15 card payloads.
|
|
No database. Static mock data only.
|
|
"""
|
|
def get(self, request):
|
|
from external_api_adapter import request as external_api_request
|
|
|
|
adapter_response = external_api_request("ai", "/dashboard-data/status", method="GET")
|
|
return Response(adapter_response.data, status=adapter_response.status_code)
|