New api and zone management; highligh occlusion and highlighAll functionality; improved search in reports and alerts history + autofill; refactored alert panel
This commit is contained in:
66
backend/api/account/views/zones_views.py
Normal file
66
backend/api/account/views/zones_views.py
Normal file
@@ -0,0 +1,66 @@
|
||||
from rest_framework import status
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from drf_spectacular.utils import extend_schema, OpenApiResponse, OpenApiExample
|
||||
|
||||
from api.account.serializers.objects_serializers import ZoneSerializer
|
||||
from sitemanagement.models import Zone
|
||||
|
||||
from api.utils.decorators import handle_exceptions
|
||||
|
||||
@extend_schema(tags=['Зоны'])
|
||||
class ZoneView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
serializer_class = ZoneSerializer
|
||||
|
||||
@extend_schema(
|
||||
summary="Получение зон для указанного объекта",
|
||||
description="Возвращает список зон для объекта по query-параметру objectId",
|
||||
responses={
|
||||
200: OpenApiResponse(
|
||||
response=ZoneSerializer,
|
||||
description="Зоны успешно получены",
|
||||
examples=[
|
||||
OpenApiExample(
|
||||
'Успешный ответ',
|
||||
value=[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Зона 1",
|
||||
"floor": 1,
|
||||
"image_path": "test_image_2.png",
|
||||
"model_path": "/static-models/AerBIM-Monitor_ASM-HTViewer_Expo2017Astana_20250908_L_+76190.glb",
|
||||
"order": 0,
|
||||
"sensors": [
|
||||
{
|
||||
"id": 10,
|
||||
"name": "Датчик 1",
|
||||
"serial_number": "GA-123",
|
||||
"sensor_type": "Тип датчика 1"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
}
|
||||
)
|
||||
@handle_exceptions
|
||||
def get(self, request):
|
||||
"""Получение всех зон для указанного объекта"""
|
||||
object_id = request.query_params.get('objectId') or request.query_params.get('object_id') or request.query_params.get('object')
|
||||
if not object_id:
|
||||
return Response({"error": "objectId query parameter is required"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
try:
|
||||
zones = Zone.objects.filter(object_id=object_id).prefetch_related(
|
||||
'sensors',
|
||||
'sensors__sensor_type'
|
||||
).order_by('order', 'name')
|
||||
|
||||
serializer = ZoneSerializer(zones, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
except Zone.DoesNotExist:
|
||||
return Response({"error": "Зоны не найдены"}, status=status.HTTP_404_NOT_FOUND)
|
||||
Reference in New Issue
Block a user