Перейти к основному содержимому

GetLayoutTopdownPanoramasListQuery (Admin)

Назначение

Получение списка видов сверху над планировкой (topdown panorama) по идентификатору планировки и пресета. Возвращает записи LayoutTopdownPanoramaEntity с вложенной коллекцией кадров (Frames); в каждом кадре — ImageFileId и коллекция Points с PointId, Name (из точки съёмки) и Position из кадра (LayoutTopdownPanoramaFramePoint), а не координаты из PanoramaShootingPointEntity.

Цель

Вернуть клиенту Admin API данные для отображения видов сверху: видео, кадры и привязку точек планировки к позициям на кадрах (Name точки берётся из PanoramaShootingPointEntity, Position — из сохранённого кадра).

Query: GetLayoutTopdownPanoramasListQuery (Входные данные)

ПолеТипОбязательностьОписание
ChessboardPropertyLayoutIdlongОбязательноеИдентификатор планировки
PresetIdGuidОбязательноеИдентификатор пресета
примечание

TenantId берётся из контекста запроса.

Result: GetLayoutTopdownPanoramasListQueryResult (Выходные данные)

ПолеТипОбязательностьОписание
EntriesIReadOnlyCollection<LayoutTopdownPanoramaListEntry>ОбязательноеСписок видов сверху

LayoutTopdownPanoramaListEntry

ПолеТипОбязательностьОписание
LayoutTopdownPanoramaIdGuidОбязательноеId из LayoutTopdownPanoramaEntity
VideoFileIdGuidОбязательноеИдентификатор файла видео 360
FramesIReadOnlyCollection<LayoutTopdownPanoramaFrameEntry>ОбязательноеКадры вида сверху

LayoutTopdownPanoramaFrameEntry

ПолеТипОбязательностьОписание
ImageFileIdGuidОбязательноеИдентификатор файла кадра (из LayoutTopdownPanoramaFrameEntity)
PointsIReadOnlyCollection<LayoutTopdownPanoramaFramePointEntry>ОбязательноеТочки на кадре: PointId, Name из PanoramaShootingPointEntity, Position из LayoutTopdownPanoramaFramePoint

LayoutTopdownPanoramaFramePointEntry

ПолеТипОбязательностьОписание
PointIdGuidОбязательноеИдентификатор точки (из PanoramaShootingPointEntity)
NamestringОбязательноеНазвание точки (из PanoramaShootingPointEntity.Name)
PositionPoint / (X, Y)ОбязательноеПозиция на кадре (из LayoutTopdownPanoramaFramePoint.Position, не из PanoramaShootingPointEntity)

Валидация

  • Планировка с ChessboardPropertyLayoutId должна существовать. При отсутствии — вернуть пустой список или ошибку.
  • PresetId должен соответствовать пресету (при наличии справочника пресетов).

Бизнес-логика (Handler)

  1. Получить сущность ChessboardProjectPropertyLayoutEntity по ChessboardPropertyLayoutId (и TenantId). Если не найдена — вернуть ошибку или пустой список.
  2. Найти сущности LayoutTopdownPanoramaEntity по ChessboardPropertyLayoutId и PresetId (и TenantId).
  3. Для каждой LayoutTopdownPanoramaEntity загрузить связанные LayoutTopdownPanoramaFrameEntity по LayoutTopdownPanoramaId.
  4. Для каждого кадра (Frame) получить коллекцию Points (LayoutTopdownPanoramaFramePoint). По каждому PointId загрузить PanoramaShootingPointEntity и взять Name. Position брать из LayoutTopdownPanoramaFramePoint.Position (не из PanoramaShootingPointEntity.Point).
  5. Сформировать LayoutTopdownPanoramaListEntry: LayoutTopdownPanoramaId = Id сущности, VideoFileId, Frames. Для каждого кадра — LayoutTopdownPanoramaFrameEntry с ImageFileId и Points = коллекция LayoutTopdownPanoramaFramePointEntry (PointId, Name из точки съёмки, Position из Points кадра).
  6. Вернуть результат с Entries.

Диаграмма алгоритма

Связанные сущности

API

LayoutTopdownPanoramasController.GetLayoutTopdownPanoramasList