AddPanoramaShootingPointCommand
Назначение
Добавление новой точки съёмки панорамы на планировке. Точка привязывается к планировке и имеет координаты, угол и тип (планировка или объект).
Цель
Создать запись точки съёмки в БД для последующей загрузки файлов панорам по пресетам.
Command: AddPanoramaShootingPointCommand (Входные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| PropertyLayoutId | long | Обязательное | Идентификатор планировки |
| Name | string | Обязательное | Название точки |
| Point | (X, Y) | Обязательное | Координаты на плане |
| Angle | double | Обязательное | Угол поворота камеры |
| PointType | PanoramaShootingPointType | Обязательное | Тип точки: LayoutPoint или PropertyPoint |
примечание
TenantId берётся из контекста запроса (путь или авторизация).
Result: AddPanoramaShootingPointCommandResult (Выходные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| PointId | Guid | Обязательное | Идентификатор созданной точки |
Валидация
- Планировка с PropertyLayoutId должна существовать в таблице ChessboardProjectPropertyLayoutEntity. Получить сущность по Id из БД; если не найдена — вернуть ошибку.
Ограничения
- Одна точка не может дублировать другую по планировке и координатам (при наличии бизнес-правил уникальности).
Бизнес-логика (Handler)
- Провалидировать зависимости: получить сущность ChessboardProjectPropertyLayoutEntity по PropertyLayoutId из БД. Если не найдена — вернуть ошибку «Планировка не найдена».
- Создать сущность PanoramaShootingPointEntity в таблице PanoramaShootingPointEntity, заполнив поля: Id (новый Guid), TenantId (из контекста), PropertyLayoutId, Name, Point, Angle, PointType, Version, RowVersion, UpdatedAt, CreatedAt.
- Сохранить в БД.
- Сформировать объект результата с PointId = Id созданной сущности.
- Вернуть результат клиенту.
Диаграмма алгоритма
События
При необходимости после создания точки может публиковаться уведомление для инвалидации кэша или интеграций. Конкретные события зависят от реализации.
Связанные сущности
API
PanoramaPointsController.AddPanoramaShootingPoint — POST api/{tenantId}/chessboard/panoramas/panorama-points