namespace Deal.Modules.Cards.Application; /// /// Единый механизм перехода карточки между контейнерами. /// /// /// Заменяет маршрутизацию перехода по эндпоинтам: одна точка знает и контейнеры-стадии пространства /// «Выбранные», и контейнеры дашборда (доски/служебные зоны). Валидацию «откуда → куда можно» выполняют /// политики контейнеров и «ворота» между пространствами (например, дашборд → «Выбранные» — только через /// действие «взять в работу»; «Выбранные» → дашборд — запрещено). Побочные эффекты (запись истории для /// стадий, сброс напоминания, журнал/обучение ML для дашборда) выполняет реализация перехода. /// public interface ICardMover { /// /// Перемещает карточку в контейнер назначения с побочными эффектами перехода. /// /// Id карточки. /// Id контейнера назначения (стадия «Выбранных» либо дашборд-контейнер). /// Контекст перехода (инициатор, причина, обучение). /// Токен отмены. /// Результат: Error (400-текст отказа) | Exists=false (карточки нет, 404) | успех (Exists=true). public Task MoveAsync( string cardId, string toContainerId, TransitionContext ctx, CancellationToken ct); }