81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
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,
|
|
)
|