RemovePanoramaShootingPointCommand
Назначение
Удаление точки съёмки панорамы по идентификатору. Каскадно удаляются или помечаются связанные файлы панорам (LayoutPanoramaPointFile, PropertyObjectPanoramaPointFile) в соответствии с правилами БД.
Цель
Исключить точку съёмки из использования и освободить привязки файлов.
Command: RemovePanoramaShootingPointCommand (Входные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| PointId | Guid | Обязательное | Идентификатор точки съёмки |
примечание
TenantId берётся из контекста запроса.
Result: RemovePanoramaShootingPointCommandResult (Выходные данные)
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
| Success | bool | Обязательное | Признак успешного удаления |
Валидация
- Точка съёмки с PointId должна существовать в таблице PanoramaShootingPointEntity. Получить сущность по Id из БД; если не найдена — вернуть ошибку.
Ограничения
- Удаление может быть запрещено при наличии активных задач в очереди, ссылающихся на точку (при наличии таких правил).
Бизнес-логика (Handler)
- Получить сущность PanoramaShootingPointEntity из таблицы PanoramaShootingPointEntity по PointId (и TenantId из контекста). Если не найдена — вернуть ошибку «Точка съёмки не найдена».
- Удалить связанные записи LayoutPanoramaPointFileEntity и PropertyObjectPanoramaPointFileEntity по PointId (или каскадное удаление по FK).
- Удалить запись PanoramaShootingPointEntity из БД.
- Сформировать объект результата (Success = true).
- Вернуть результат клиенту.
Диаграмма алгоритма
События
При необходимости публикуется уведомление об удалении (например для очистки файлов через сагу). Конкретные события зависят от реализации.
Связанные сущности
API
PanoramaPointsController.RemovePanoramaShootingPoint — DELETE api/{tenantId}/chessboard/panoramas/panorama-points/{pointId}