Разбить Deal.Modules.Cards по назначению

Application разделён на Abstractions (25 интерфейсов), Models (13
доменных типов) и Dtos (CardMoveResultDto); namespace приведён к путям,
using потребителей мигрированы.
This commit is contained in:
Rustam Khalimov
2026-09-11 13:16:57 +03:00
parent 8a7d7f2a7a
commit 31c434ed93
65 changed files with 231 additions and 66 deletions
@@ -0,0 +1,34 @@
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary>
/// Ядро карточки: единственное, что есть у любой карточки во всех дашбордах.
/// </summary>
/// <remarks>
/// Никаких «полей заявки» в ядре: стек/бюджет/контакты и прочее — опциональные модули-роли
/// (см. <c>IContentCard</c>, <c>IBudgetedCard</c> и др.), которые реализует агрегат карточки
/// по мере наполнения. <see cref="Source"/> — откуда карточка пришла (см. иерархию <c>ISource</c>);
/// у карточки, созданной пайплайном из сообщения канала, источник составной:
/// <c>ICompositeSource { Origin: ITelegramSource, Pipeline: [IAiSource/IMl] }</c>.
/// Типизированный доступ к конкретному источнику — дискриминация через иерархию ISource
/// (паттерн-матчинг), отдельный generic-интерфейс не нужен.
/// </remarks>
public interface ICard
{
/// <summary>
/// Короткий id карточки (единый префикс карточек, напр. <c>c_</c>).
/// </summary>
public string Id { get; }
/// <summary>
/// Заголовок карточки (очищенный).
/// </summary>
public string Title { get; }
/// <summary>
/// Источник: откуда карточка пришла (полиморфный, не enum).
/// </summary>
public ISource Source { get; }
}