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 ObjectSerializer from sitemanagement.models import Object from api.utils.decorators import handle_exceptions @extend_schema(tags=['Объекты']) class ObjectView(APIView): permission_classes = [IsAuthenticated] serializer_class = ObjectSerializer @extend_schema( summary="Получение всех объектов", description="Получение всех объектов", responses={200: OpenApiResponse(response=ObjectSerializer, description="Объекты успешно получены", examples=[OpenApiExample( 'Успешный ответ', value={ "id": 1, "title": "Объект 1", "description": "Описание объекта 1", "image": "https://aerbim.org/media/image.jpg", "address": "Адрес объекта 1", "floors": 1, "area": 100.0, "zones": [ { "id": 1, "name": "Зона 1", "sensors": [ { "id": 1, "name": "Датчик 1", "serial_number": "GA-123", "sensor_type": "Тип датчика 1" } ] } ] } )])}) @handle_exceptions def get(self, request): """Получение всех объектов с их зонами и датчиками""" try: objects = Object.objects.prefetch_related( 'zones', 'zones__sensors', 'zones__sensors__sensor_type' ).all() serializer = ObjectSerializer(objects, many=True) return Response(serializer.data, status=status.HTTP_200_OK) except Object.DoesNotExist: return Response( {"error": "Объекты не найдены"}, status=status.HTTP_404_NOT_FOUND)