feat / AEB-64 create alert routes
This commit is contained in:
35
backend/api/account/serializers/alert_serializers.py
Normal file
35
backend/api/account/serializers/alert_serializers.py
Normal file
@@ -0,0 +1,35 @@
|
||||
from rest_framework import serializers
|
||||
from drf_spectacular.utils import extend_schema_field
|
||||
from drf_spectacular.types import OpenApiTypes
|
||||
from typing import Optional
|
||||
from sitemanagement.models import Alert
|
||||
|
||||
class AlertSerializer(serializers.ModelSerializer):
|
||||
name = serializers.SerializerMethodField()
|
||||
object = serializers.SerializerMethodField()
|
||||
metric_value = serializers.SerializerMethodField()
|
||||
sensor_type_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Alert
|
||||
fields = ('id', 'name', 'object', 'metric_value', 'sensor_type_name', 'message', 'severity', 'created_at', 'resolved')
|
||||
|
||||
@extend_schema_field(OpenApiTypes.STR)
|
||||
def get_name(self, obj) -> str:
|
||||
return obj.sensor.name
|
||||
|
||||
@extend_schema_field(OpenApiTypes.STR)
|
||||
def get_object(self, obj) -> Optional[str]:
|
||||
zone = obj.sensor.zones.first()
|
||||
return zone.object.title if zone else None
|
||||
|
||||
@extend_schema_field(OpenApiTypes.STR)
|
||||
def get_metric_value(self, obj) -> str:
|
||||
if obj.metric.value is not None:
|
||||
unit = obj.sensor.signal_format.unit if obj.sensor.signal_format else ''
|
||||
return f"{obj.metric.value} {unit}".strip()
|
||||
return obj.metric.raw_value
|
||||
|
||||
@extend_schema_field(OpenApiTypes.STR)
|
||||
def get_sensor_type_name(self, obj) -> str:
|
||||
return obj.sensor_type.name
|
||||
@@ -1,5 +1,8 @@
|
||||
from rest_framework import serializers
|
||||
from django.conf import settings
|
||||
from drf_spectacular.utils import extend_schema_field
|
||||
from drf_spectacular.types import OpenApiTypes
|
||||
from typing import Optional
|
||||
from sitemanagement.models import Object, Zone, Sensor
|
||||
|
||||
class SensorBasicSerializer(serializers.ModelSerializer):
|
||||
@@ -22,6 +25,7 @@ class ObjectSerializer(serializers.ModelSerializer):
|
||||
model = Object
|
||||
fields = ('id', 'title', 'description', 'image', 'address', 'floors', 'area', 'zones')
|
||||
|
||||
def get_image(self, obj):
|
||||
@extend_schema_field(OpenApiTypes.URI)
|
||||
def get_image(self, obj) -> Optional[str]:
|
||||
"""Возвращает URL изображения объекта"""
|
||||
return f"{settings.BASE_URL}{obj.image.url}" if obj.image else None
|
||||
@@ -1,4 +1,7 @@
|
||||
from rest_framework import serializers
|
||||
from drf_spectacular.utils import extend_schema_field
|
||||
from drf_spectacular.types import OpenApiTypes
|
||||
from typing import Dict, Any
|
||||
from sitemanagement.models import Sensor, Alert
|
||||
|
||||
class NotificationSerializer(serializers.ModelSerializer):
|
||||
@@ -76,7 +79,8 @@ class DetectorSerializer(serializers.ModelSerializer):
|
||||
class DetectorsResponseSerializer(serializers.Serializer):
|
||||
detectors = serializers.SerializerMethodField()
|
||||
|
||||
def get_detectors(self, sensors):
|
||||
@extend_schema_field(OpenApiTypes.OBJECT)
|
||||
def get_detectors(self, sensors) -> Dict[str, Any]:
|
||||
detector_serializer = DetectorSerializer(sensors, many=True)
|
||||
return {
|
||||
sensor['detector_id']: sensor
|
||||
|
||||
Reference in New Issue
Block a user