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

UploadLayoutPanoramaImageCommand

Назначение

Загрузка изображения панорамы (кубмап) для точки съёмки на планировке по заданному пресету. Создаётся или обновляется запись LayoutPanoramaPointFileEntity с идентификаторами файлов граней кубмапа.

Цель

Сохранить привязку загруженных файлов (по граням кубмапа) к точке и пресету для планировки.

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

ПолеТипОбязательностьОписание
PointIdGuidОбязательноеИдентификатор точки съёмки
PresetIdGuidОбязательноеИдентификатор пресета
ImageFileIdsCubemapFileIds или аналогичная модельОбязательноеИдентификаторы файлов граней (PositiveX, NegativeX, PositiveY, NegativeY, PositiveZ, NegativeZ)
примечание

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

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

ПолеТипОбязательностьОписание
FileIdGuidОбязательноеИдентификатор записи файла панорамы (LayoutPanoramaPointFileEntity.Id)

Валидация

  • Точка съёмки с PointId должна существовать в PanoramaShootingPointEntity. Получить по Id из БД; если не найдена — вернуть ошибку.
  • Планировка, к которой привязана точка, должна существовать. Проверка через связь Point → PropertyLayoutId.

Ограничения

  • Одна комбинация (PointId, PresetId) для планировки может иметь одну запись файла (создание или обновление при повторной загрузке).

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

  1. Провалидировать зависимости: получить PanoramaShootingPointEntity по PointId. Если не найдена — вернуть ошибку «Точка не найдена».
  2. Получить PropertyLayoutId из точки. Проверить существование ChessboardProjectPropertyLayoutEntity. Если не найдена — вернуть ошибку.
  3. Найти существующую запись LayoutPanoramaPointFileEntity по PointId и PresetId (и TenantId). Если найдена — обновить поле Image (грани кубмапа) из ImageFileIds. Если не найдена — создать новую запись LayoutPanoramaPointFileEntity с PointId, PresetId, PropertyLayoutId, Image = данные из ImageFileIds.
  4. Сохранить в БД.
  5. Сформировать результат (FileId = Id записи). Вернуть результат клиенту.

События

Могут публиковаться уведомления о загрузке файлов (AfterFileUploaded) для запуска саги обработки файлов. См. AfterFileUploaded, FileUpload Saga.

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

API

PanoramaPointsController.UploadLayoutPanoramaImage — POST points/{pointId}/presets/{presetId}/upload-layout-image