This commit is contained in:
2026-04-10 16:12:51 +03:30
parent 20fd3842b6
commit 883573004c
143 changed files with 1380 additions and 2332 deletions
+80
View File
@@ -0,0 +1,80 @@
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from farm_hub.models import FarmHub
from .mock_data import (
ANOMALY_DETECTION_CARD,
ARM_ALERTS_TRACKER,
FARM_ALERTS_TIMELINE,
RECOMMENDATIONS_LIST,
)
from .serializers import (
AlertTimelineSerializer,
AlertTrackerSerializer,
AnomalyDetectionSerializer,
CreateAlertSerializer,
RecommendationsListSerializer,
)
from .services import AlertService
class AlertTrackerView(APIView):
def get(self, request):
serializer = AlertTrackerSerializer(ARM_ALERTS_TRACKER)
return Response({"status": "success", "result": serializer.data})
class AlertTimelineView(APIView):
def get(self, request):
serializer = AlertTimelineSerializer(FARM_ALERTS_TIMELINE)
return Response({"status": "success", "result": serializer.data})
class AnomalyDetectionView(APIView):
def get(self, request):
serializer = AnomalyDetectionSerializer(ANOMALY_DETECTION_CARD)
return Response({"status": "success", "result": serializer.data})
class RecommendationsListView(APIView):
def get(self, request):
serializer = RecommendationsListSerializer(RECOMMENDATIONS_LIST)
return Response({"status": "success", "result": serializer.data})
class CreateAlertView(APIView):
def post(self, request):
serializer = CreateAlertSerializer(data=request.data)
if not serializer.is_valid():
return Response(
{"status": "error", "errors": serializer.errors},
status=status.HTTP_400_BAD_REQUEST,
)
data = serializer.validated_data
farm = None
farm_uuid = data.get("farm_uuid")
if farm_uuid:
try:
farm = FarmHub.objects.get(uuid=farm_uuid)
except FarmHub.DoesNotExist:
return Response(
{"status": "error", "message": "farm not found"},
status=status.HTTP_404_NOT_FOUND,
)
alert = AlertService.create_alert(
title=data["title"],
description=data.get("description", ""),
color=data.get("color", "info"),
avatar_icon=data.get("avatar_icon", ""),
avatar_color=data.get("avatar_color", ""),
farm=farm,
)
return Response(
{"status": "success", "result": {"uuid": str(alert.uuid), "title": alert.title}},
status=status.HTTP_201_CREATED,
)