Spaces:
Running
Running
| from drf_yasg.utils import swagger_auto_schema | |
| from rest_framework import status | |
| from rest_framework.response import Response | |
| from rest_framework.views import APIView | |
| from solar_api.serializers import ( | |
| BillOptimizationRequestSerializer, | |
| BillOptimizationResponseSerializer, | |
| ) | |
| from solar_api.services.bill_optimization_service import BillOptimizationService | |
| # Stateless service β safe to instantiate once at module level | |
| _service = BillOptimizationService() | |
| class BillOptimizationView(APIView): | |
| """ | |
| POST /api/solar/bill-optimization-slab/ | |
| Calculates the recommended solar capacity to reduce a monthly electricity | |
| bill from a current amount to a target amount, using Indian slab-based | |
| tariff calculations. | |
| """ | |
| def post(self, request): | |
| # ββ 1. Validate & deserialize request ββββββββββββββββββββββββ | |
| req_serializer = BillOptimizationRequestSerializer(data=request.data) | |
| if not req_serializer.is_valid(): | |
| return Response(req_serializer.errors, status=status.HTTP_400_BAD_REQUEST) | |
| # ββ 2. Run pure-calculation service βββββββββββββββββββββββββββ | |
| result, status_code = _service.optimize(req_serializer.validated_data) | |
| if status_code != 200: | |
| return Response(result, status=status_code) | |
| # ββ 3. Serialize & return response ββββββββββββββββββββββββββββ | |
| resp_serializer = BillOptimizationResponseSerializer(result) | |
| return Response(resp_serializer.data, status=status.HTTP_200_OK) | |