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

GetLayoutTopdownPanoramaQueueTasksListByProjectIdQuery (Editor)

Назначение

Получение списка задач очереди на снятие видов сверху над планировкой (Layout Topdown Panorama) по идентификатору проекта. Возвращает данные по проекту и коллекцию задач с привязкой к первому объекту недвижимости по планировке и к точкам съёмки планировки. По аналогии с GetPanoramasQueueTasksListByProjectIdQuery, но для очереди LayoutTopdownPanoramaQueue и с расширенной структурой элемента задачи (PropertyObject, Points).

Цель

Вернуть клиенту Editor API данные для отображения очереди задач на съёмку видов сверху: проект, список задач с информацией о планировке (первый объект по планировке) и точках съёмки (PointsDomainModel).

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

ПолеТипОбязательностьОписание
ChessboardProjectIdlongОбязательноеИдентификатор проекта шахматной доски
примечание

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

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

ПолеТипОбязательностьОписание
ProjectGetLayoutTopdownPanoramaQueueTasksListByProjectIdProjectEntryОбязательноеДанные по проекту
TasksIReadOnlyCollection<GetLayoutTopdownPanoramaQueueTasksListByProjectIdTaskEntry>ОбязательноеСписок задач очереди видов сверху

GetLayoutTopdownPanoramaQueueTasksListByProjectIdProjectEntry

Краткая информация о проекте (идентификатор и при необходимости название). Структура уточняется по соглашению API (например, ChessboardProjectId).

GetLayoutTopdownPanoramaQueueTasksListByProjectIdTaskEntry (Task entry)

ПолеТипОбязательностьОписание
QueueTaskIdGuidОбязательноеИдентификатор задачи (Id из LayoutTopdownPanoramaQueueTaskEntity)
CreatedAtDateTimeOffsetОбязательноеДата создания задачи
QueueIdGuidОбязательноеИдентификатор очереди (LayoutTopdownPanoramaQueueEntity)
PresetIdsGuid[]ОбязательноеМассив идентификаторов пресетов
PropertyObjectPropertyObjectEntry или аналогNullableПервый объект недвижимости по планировке (по PropertyLayoutId очереди); если объектов нет — null
PointsIReadOnlyCollection<PointsDomainModel>ОбязательноеТочки съёмки планировки (PanoramaShootingPointEntity по PropertyLayoutId очереди)

PropertyObject получается так же, как в GetPanoramasQueueTasksListByProjectId: по LayoutId (PropertyLayoutId очереди) выбирается первый объект из ChessboardProjectPropertyObjectEntity. Points — сущности PanoramaShootingPointEntity по PropertyLayoutId этой очереди, отображённые в PointsDomainModel.

Валидация

  • Проект с ChessboardProjectId должен существовать в ChessboardProjectEntity. При отсутствии — вернуть ошибку или пустой список.
  • Очереди LayoutTopdownPanoramaQueueEntity по проекту могут отсутствовать — тогда вернуть результат с пустой коллекцией Tasks.

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

  1. Получить сущность ChessboardProjectEntity по ChessboardProjectId (и TenantId). Если не найдена — вернуть ошибку «Проект не найден» или результат с пустыми Tasks.
  2. Найти все очереди LayoutTopdownPanoramaQueueEntity по ChessboardProjectId (и TenantId).
  3. Для каждой очереди получить задачи LayoutTopdownPanoramaQueueTaskEntity по QueueId.
  4. Для каждой задачи: по QueueId получить очередь (уже есть PropertyLayoutId). Получить первый объект недвижимости ChessboardProjectPropertyObjectEntity по PropertyLayoutId (и TenantId) — например первый по Id или по CreatedAt. Получить точки съёмки PanoramaShootingPointEntity по PropertyLayoutId (и TenantId) и сформировать коллекцию Points (PointsDomainModel).
  5. Сформировать Project entry (ChessboardProjectId и при необходимости название). Сформировать для каждой задачи Task entry: QueueTaskId, CreatedAt, QueueId, PresetIds, PropertyObject (или null), Points.
  6. Вернуть результат с Project и Tasks.

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

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

API

LayoutTopdownPanoramaQueueTasksController.GetLayoutTopdownPanoramaQueueTasksListByProjectId — GET projects/{chessboardProjectId}