| from rest_framework.views import APIView |
| from rest_framework.response import Response |
| from rest_framework import status, permissions |
| from .services import forecast_income |
| from .anomaly import get_anomalies |
| from .forecast import get_forecast |
| from finance.utils_mongo import get_user_db_id |
|
|
| class IncomeForecastView(APIView): |
| permission_classes = [permissions.IsAuthenticated] |
|
|
| def get(self, request): |
| try: |
| days = int(request.query_params.get('days', 30)) |
| data = forecast_income(get_user_db_id(request.user), days) |
| return Response(data) |
| except Exception as e: |
| return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) |
|
|
| class AnomalyListView(APIView): |
| permission_classes = [permissions.IsAuthenticated] |
|
|
| def get(self, request): |
| try: |
| return Response(get_anomalies(get_user_db_id(request.user))) |
| except Exception as e: |
| return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) |
|
|
| class ForecastView(APIView): |
| permission_classes = [permissions.IsAuthenticated] |
|
|
| def get(self, request): |
| try: |
| |
| data = get_forecast(get_user_db_id(request.user)) |
| |
| if data is None: |
| return Response({"error": "Insufficient data for AI forecast (need >5 days history)"}, status=status.HTTP_400_BAD_REQUEST) |
| |
| return Response(data) |
| except Exception as e: |
| return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) |
|
|