GetLayoutTopdownPanoramasListQuery (Admin)
Назначение
Получение списка видов сверху над планировкой (topdown panorama) по идентификатору планировки и пресета. Возвращает записи LayoutTopdownPanoramaEntity с вложенной коллекцией кадров (Frames); в каждом кадре — ImageFileId и коллекция Points с PointId, Name (из точки съёмки) и Position из кадра (LayoutTopdownPanoramaFramePoint), а не координаты из PanoramaShootingPointEntity.
Цель
Вернуть клиенту Admin API данные для отображения видов сверху: видео, кадры и привязку точек планировки к позициям на кадрах (Name точки берётся из PanoramaShootingPointEntity, Position — из сохранённого кадра).
Query: GetLayoutTopdownPanoramasListQuery (Входные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| ChessboardPropertyLayoutId | long | Обязательное | Идентификатор планировки |
| PresetId | Guid | Обязательное | Идентификатор пресета |
примечание
TenantId берётся из контекста запроса.
Result: GetLayoutTopdownPanoramasListQueryResult (Выходные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| Entries | IReadOnlyCollection<LayoutTopdownPanoramaListEntry> | Обязательное | Список видов сверху |
LayoutTopdownPanoramaListEntry
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| LayoutTopdownPanoramaId | Guid | Обязательное | Id из LayoutTopdownPanoramaEntity |
| VideoFileId | Guid | Обязательное | Идентификатор файла видео 360 |
| Frames | IReadOnlyCollection<LayoutTopdownPanoramaFrameEntry> | Обязательное | Кадры вида сверху |
LayoutTopdownPanoramaFrameEntry
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| ImageFileId | Guid | Обязательное | Идентификатор файла кадра (из LayoutTopdownPanoramaFrameEntity) |
| Points | IReadOnlyCollection<LayoutTopdownPanoramaFramePointEntry> | Обязательное | Точки на кадре: PointId, Name из PanoramaShootingPointEntity, Position из LayoutTopdownPanoramaFramePoint |
LayoutTopdownPanoramaFramePointEntry
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| PointId | Guid | Обязательное | Идентификатор точки (из PanoramaShootingPointEntity) |
| Name | string | Обязательное | Название точки (из PanoramaShootingPointEntity.Name) |
| Position | Point / (X, Y) | Обязательное | Позиция на кадре (из LayoutTopdownPanoramaFramePoint.Position, не из PanoramaShootingPointEntity) |
Валидация
- Планировка с ChessboardPropertyLayoutId должна существовать. При отсутствии — вернуть пустой список или ошибку.
- PresetId должен соответствовать пресету (при наличии справочника пресетов).
Бизнес-логика (Handler)
- Получить сущность ChessboardProjectPropertyLayoutEntity по ChessboardPropertyLayoutId (и TenantId). Если не найдена — вернуть ошибку или пустой список.
- Найти сущности LayoutTopdownPanoramaEntity по ChessboardPropertyLayoutId и PresetId (и TenantId).
- Для каждой LayoutTopdownPanoramaEntity загрузить связанные LayoutTopdownPanoramaFrameEntity по LayoutTopdownPanoramaId.
- Для каждого кадра (Frame) получить коллекцию Points (LayoutTopdownPanoramaFramePoint). По каждому PointId загрузить PanoramaShootingPointEntity и взять Name. Position брать из LayoutTopdownPanoramaFramePoint.Position (не из PanoramaShootingPointEntity.Point).
- Сформировать LayoutTopdownPanoramaListEntry: LayoutTopdownPanoramaId = Id сущности, VideoFileId, Frames. Для каждого кадра — LayoutTopdownPanoramaFrameEntry с ImageFileId и Points = коллекция LayoutTopdownPanoramaFramePointEntry (PointId, Name из точки съёмки, Position из Points кадра).
- Вернуть результат с Entries.
Диаграмма алгоритма
Связанные сущности
- ChessboardProjectPropertyLayoutEntity
- LayoutTopdownPanoramaEntity
- LayoutTopdownPanoramaFrameEntity
- LayoutTopdownPanoramaFramePoint
- PanoramaShootingPointEntity
API
LayoutTopdownPanoramasController.GetLayoutTopdownPanoramasList