using Deal.Modules.Cards.Application.Abstractions; namespace Deal.Modules.Cards.Application.Models; /// /// Агрегат карточки /// public sealed class Card : ICard, IContentCard, IBudgetedCard, IContactCard, IAttributedCard, ICommentableCard, ILinkCard, IFileCard, ITzCard, ITraceableCard, IRemindableCard, ILocatedCard { /// public string Id { get; init; } = string.Empty; /// public string Title { get; init; } = string.Empty; /// public ISource Source { get; init; } = null!; // ── Модуль «содержимое» ── /// public string Summary { get; init; } = string.Empty; // ── Модуль «бюджет» ── /// public CardBudget? Budget { get; init; } // ── Модуль «контакты» ── /// public IReadOnlyList Contacts { get; init; } = Array.Empty(); /// public string ContactText { get; init; } = string.Empty; // ── Модуль «атрибуты» ── /// public IReadOnlyList Attributes { get; init; } = Array.Empty(); // ── Модуль «комментарии» ── /// public IReadOnlyList Comments { get; init; } = Array.Empty(); // ── Модуль «ссылки» ── /// public IReadOnlyList Links { get; init; } = Array.Empty(); // ── Модуль «файлы» ── /// public IReadOnlyList Files { get; init; } = Array.Empty(); /// public string TzText { get; init; } = string.Empty; // ── Модуль «история движения» ── /// public IReadOnlyList History { get; init; } = Array.Empty(); // ── Модуль «напоминание» ── /// public CardReminder? Reminder { get; init; } // ── Модуль «размещение» ── /// public string ContainerId { get; init; } = CardIds.Inbox; /// public string? PrevContainerId { get; init; } /// public bool IsNew { get; init; } = true; }