GetLayoutTopdownPanoramaQueueTasksListByProjectIdQuery (Editor)
Назначение
Получение списка задач очереди на снятие видов сверху над планировкой (Layout Topdown Panorama) по идентификатору проекта. Возвращает данные по проекту и коллекцию задач с привязкой к первому объекту недвижимости по планировке и к точкам съёмки планировки. По аналогии с GetPanoramasQueueTasksListByProjectIdQuery, но для очереди LayoutTopdownPanoramaQueue и с расширенной структурой элемента задачи (PropertyObject, Points).
Цель
Вернуть клиенту Editor API данные для отображения очереди задач на съёмку видов сверху: проект, список задач с информацией о планировке (первый объект по планировке) и точках съёмки (PointsDomainModel).
Query: GetLayoutTopdownPanoramaQueueTasksListByProjectIdQuery (Входные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| ChessboardProjectId | long | Обязательное | Идентификатор проекта шахматной доски |
TenantId берётся из контекста запроса.
Result: GetLayoutTopdownPanoramaQueueTasksListByProjectIdQueryResult (Выходные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| Project | GetLayoutTopdownPanoramaQueueTasksListByProjectIdProjectEntry | Обязательное | Данные по проекту |
| Tasks | IReadOnlyCollection<GetLayoutTopdownPanoramaQueueTasksListByProjectIdTaskEntry> | Обязательное | Список задач очереди видов сверху |
GetLayoutTopdownPanoramaQueueTasksListByProjectIdProjectEntry
Краткая информация о проекте (идентификатор и при необходимости название). Структура уточняется по соглашению API (например, ChessboardProjectId).
GetLayoutTopdownPanoramaQueueTasksListByProjectIdTaskEntry (Task entry)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| QueueTaskId | Guid | Обязательное | Идентификатор задачи (Id из LayoutTopdownPanoramaQueueTaskEntity) |
| CreatedAt | DateTimeOffset | Обязательное | Дата создания задачи |
| QueueId | Guid | Обязательное | Идентификатор очереди (LayoutTopdownPanoramaQueueEntity) |
| PresetIds | Guid[] | Обязательное | Массив идентификаторов пресетов |
| PropertyObject | PropertyObjectEntry или аналог | Nullable | Первый объект недвижимости по планировке (по PropertyLayoutId очереди); если объектов нет — null |
| Points | IReadOnlyCollection<PointsDomainModel> | Обязательное | Точки съёмки планировки (PanoramaShootingPointEntity по PropertyLayoutId очереди) |
PropertyObject получается так же, как в GetPanoramasQueueTasksListByProjectId: по LayoutId (PropertyLayoutId очереди) выбирается первый объект из ChessboardProjectPropertyObjectEntity. Points — сущности PanoramaShootingPointEntity по PropertyLayoutId этой очереди, отображённые в PointsDomainModel.
Валидация
- Проект с ChessboardProjectId должен существовать в ChessboardProjectEntity. При отсутствии — вернуть ошибку или пустой список.
- Очереди LayoutTopdownPanoramaQueueEntity по проекту могут отсутствовать — тогда вернуть результат с пустой коллекцией Tasks.
Бизнес-логика (Handler)
- Получить сущность ChessboardProjectEntity по ChessboardProjectId (и TenantId). Если не найдена — вернуть ошибку «Проект не найден» или результат с пустыми Tasks.
- Найти все очереди LayoutTopdownPanoramaQueueEntity по ChessboardProjectId (и TenantId).
- Для каждой очереди получить задачи LayoutTopdownPanoramaQueueTaskEntity по QueueId.
- Для каждой задачи: по QueueId получить очередь (уже есть PropertyLayoutId). Получить первый объект недвижимости ChessboardProjectPropertyObjectEntity по PropertyLayoutId (и TenantId) — например первый по Id или по CreatedAt. Получить точки съёмки PanoramaShootingPointEntity по PropertyLayoutId (и TenantId) и сформировать коллекцию Points (PointsDomainModel).
- Сформировать Project entry (ChessboardProjectId и при необходимости название). Сформировать для каждой задачи Task entry: QueueTaskId, CreatedAt, QueueId, PresetIds, PropertyObject (или null), Points.
- Вернуть результат с Project и Tasks.
Диаграмма алгоритма
Связанные сущности
- ChessboardProjectEntity
- LayoutTopdownPanoramaQueueEntity
- LayoutTopdownPanoramaQueueTaskEntity
- ChessboardProjectPropertyObjectEntity
- ChessboardProjectPropertyLayoutEntity
- PanoramaShootingPointEntity
API
LayoutTopdownPanoramaQueueTasksController.GetLayoutTopdownPanoramaQueueTasksListByProjectId — GET projects/{chessboardProjectId}