Перевести «не найдено» карточек на NotFoundException

CardsService (get/move/links/reminders) и CardMover бросают NotFoundException вместо null/CardResultDto(null,null)/Exists=false. CardMoveResultDto — только Error; эндпоинты без локальных 404-проверок.
This commit is contained in:
2026-09-13 18:23:53 +03:00
parent a9bfecf9cc
commit d2d6b81aa0
12 changed files with 107 additions and 152 deletions
@@ -1,5 +1,6 @@
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.SharedKernel.Errors;
namespace Deal.Modules.Cards.Application.Abstractions;
@@ -14,7 +15,8 @@ public interface ICardMover
/// <param name="cardId">Id карточки.</param>
/// <param name="toContainerId">Id контейнера назначения (стадия «Выбранных» либо дашборд-контейнер).</param>
/// <param name="ctx">Контекст перехода (инициатор, причина, обучение).</param>
/// <returns>Результат: Error (400-текст отказа) | Exists=false (карточки нет, 404) | успех (Exists=true).</returns>
/// <returns>Результат: Error (400-текст отказа) либо null (успех).</returns>
/// <exception cref="NotFoundException">Карточка не найдена.</exception>
public Task<CardMoveResultDto> MoveAsync(
string cardId,
string toContainerId,
@@ -5,6 +5,5 @@ namespace Deal.Modules.Cards.Application.Dtos;
/// <summary>
/// Результат перехода карточки единым механизмом <see cref="ICardMover"/>.
/// </summary>
/// <param name="Error">Текст 400-ошибки либо null.</param>
/// <param name="Exists">True — карточка найдена и переход выполнен (либо перенос был no-op).</param>
public sealed record CardMoveResultDto(string? Error, bool Exists);
/// <param name="Error">Текст 400-ошибки либо null (успех).</param>
public sealed record CardMoveResultDto(string? Error);