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

AddLayoutPanoramaShootingTaskCommand

Назначение

Добавление задачи панорамной съёмки по планировке в очередь. Задача содержит тип LayoutPoint, идентификаторы пресетов, планировку и список точек съёмки (Points в JSONB).

Цель

Поставить в очередь задачу на съёмку панорам по точкам планировки для последующего выполнения воркером (запуск, завершение, heartbeat).

Command: AddLayoutPanoramaShootingTaskCommand (Входные данные)

ПолеТипОбязательностьОписание
ChessboardProjectIdlongОбязательноеИдентификатор проекта
PropertyLayoutIdlongОбязательноеИдентификатор планировки
PresetIdsGuid[]ОбязательноеИдентификаторы пресетов
Pointsмассив точек (PointId и др.)ОбязательноеДанные по точкам съёмки для постановки в очередь
примечание

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

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

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

Валидация

  • Проект с ChessboardProjectId должен существовать. Получить из БД; если не найден — вернуть ошибку.
  • Планировка с PropertyLayoutId должна существовать и принадлежать проекту. Если не найдена — вернуть ошибку.

Ограничения

  • Очередь по проекту создаётся при необходимости (если ещё нет записи PanoramasQueueEntity по ChessboardProjectId).

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

  1. Провалидировать зависимости: получить ChessboardProjectEntity по ChessboardProjectId и ChessboardProjectPropertyLayoutEntity по PropertyLayoutId. Если любая не найдена — вернуть ошибку.
  2. Найти или создать очередь PanoramasQueueEntity по ChessboardProjectId (и TenantId). Если очереди нет — создать запись очереди.
  3. Создать сущность PanoramasQueueTaskEntity в таблице PanoramasQueueTaskEntity: QueueId, TaskType = LayoutPoint, Status = Pending, PresetIds, ChessboardProjectId, PropertyLayoutId, PropertyObjectId = null, Points = сериализованные данные из команды.
  4. Сохранить в БД. Сформировать результат (TaskId = Id задачи). Вернуть результат клиенту.

События

Задача подхватывается воркером по очереди; при запуске вызывается StartQueueTask и т.д. Отдельные Kafka-события при добавлении задачи не обязательны.

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

API

QueueTasksController.AddLayoutPanoramaShootingTask — POST add