UploadPropertyObjectPanoramaImageCommand
Назначение
Загрузка изображения панорамы (кубмап) для точки съёмки на объекте недвижимости по заданному пресету. Создаётся или обновляется запись PropertyObjectPanoramaPointFileEntity.
Цель
Сохранить привязку загруженных файлов граней кубмапа к точке, объекту и пресету.
Command: UploadPropertyObjectPanoramaImageCommand (Входные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| PointId | Guid | Обязательное | Идентификатор точки съёмки |
| PropertyObjectId | Guid | Обязательное | Идентификатор объекта недвижимости |
| PresetId | Guid | Обязательное | Идентификатор пресета |
| ImageFileIds | CubemapFileIds или аналог | Обязательное | Идентификаторы файлов граней кубмапа |
примечание
TenantId берётся из контекста запроса.
Result: UploadPropertyObjectPanoramaImageCommandResult (Выходные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| FileId | Guid | Обязательное | Идентификатор записи PropertyObjectPanoramaPointFileEntity |
Валидация
- Точка съёмки с PointId должна существовать в PanoramaShootingPointEntity. Если не найдена — вернуть ошибку.
- Объект с PropertyObjectId должен существовать в ChessboardProjectPropertyObjectEntity. Если не найден — вернуть ошибку.
- Точка должна быть привязана к той же планировке, что и объект (PropertyLayoutId).
Ограничения
- Одна комбинация (PointId, PropertyObjectId, PresetId) может иметь одну запись файла (создание или обновление при повторной загрузке).
Бизнес-логика (Handler)
- Провалидировать зависимости: получить PanoramaShootingPointEntity по PointId и ChessboardProjectPropertyObjectEntity по PropertyObjectId. Если любая не найдена — вернуть соответствующую ошибку.
- Проверить, что точка принадлежит планировке объекта (PropertyLayoutId совпадает). Если нет — вернуть ошибку.
- Найти существующую запись PropertyObjectPanoramaPointFileEntity по PointId, PropertyObjectId, PresetId. Если найдена — обновить Image. Если не найдена — создать новую запись с PointId, PropertyObjectId, PresetId, PropertyLayoutId (из объекта), Image.
- Сохранить в БД. Сформировать результат (FileId). Вернуть результат клиенту.
События
Могут публиковаться уведомления о загрузке файлов (AfterFileUploaded). См. FileUpload Saga.
Связанные сущности
- PanoramaShootingPointEntity
- ChessboardProjectPropertyObjectEntity
- PropertyObjectPanoramaPointFileEntity
- CubemapFilesContainerDbType
API
PanoramaPointsController.UploadPropertyObjectPanoramaImage — POST points/{pointId}/property-objects/{propertyObjectId}/presets/{presetId}/upload-image