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:
iv_vuytsik
2025-12-25 03:10:21 +03:00
parent 31030f2997
commit ce7e39debf
36 changed files with 1562 additions and 472 deletions

View 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)