Разбить 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
@@ -1,7 +1,9 @@
using Deal.Api.Endpoints.RequestModels; using Deal.Api.Endpoints.RequestModels;
using Deal.Api.Events; using Deal.Api.Events;
using Deal.Api.Http; using Deal.Api.Http;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Deal.Modules.Pipeline.Application; using Deal.Modules.Pipeline.Application;
@@ -2,7 +2,9 @@ using System.Globalization;
using System.Text.Json; using System.Text.Json;
using Deal.Contracts.Integrations; using Deal.Contracts.Integrations;
using Deal.Contracts.Integrations.Models; using Deal.Contracts.Integrations.Models;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Deal.Modules.Settings.Application; using Deal.Modules.Settings.Application;
@@ -1,6 +1,8 @@
using System.Text.Json; using System.Text.Json;
using Deal.Infrastructure.Persistence.Entities; using Deal.Infrastructure.Persistence.Entities;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@@ -1,5 +1,7 @@
using Deal.Infrastructure.Persistence.Entities; using Deal.Infrastructure.Persistence.Entities;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@@ -1,6 +1,8 @@
using System.Text.Json; using System.Text.Json;
using Deal.Infrastructure.Persistence.Entities; using Deal.Infrastructure.Persistence.Entities;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@@ -1,6 +1,8 @@
using System.Text.Json; using System.Text.Json;
using Deal.Infrastructure.Persistence.Entities; using Deal.Infrastructure.Persistence.Entities;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@@ -5,7 +5,9 @@ using Deal.Infrastructure.Persistence.Repositories;
using Deal.Infrastructure.Security; using Deal.Infrastructure.Security;
using Deal.Infrastructure.Services; using Deal.Infrastructure.Services;
using Deal.Infrastructure.Tenancy; using Deal.Infrastructure.Tenancy;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Discovery.Application; using Deal.Modules.Discovery.Application;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Pipeline.Application; using Deal.Modules.Pipeline.Application;
@@ -1,4 +1,6 @@
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
@@ -1,7 +1,9 @@
using System.Text.Json; using System.Text.Json;
using Deal.Infrastructure.Persistence; using Deal.Infrastructure.Persistence;
using Deal.Infrastructure.Persistence.Entities; using Deal.Infrastructure.Persistence.Entities;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Источник «ИИ»: карточка создана/сгенерирована ИИ (агент, генератор, разборщик). /// Источник «ИИ»: карточка создана/сгенерирована ИИ (агент, генератор, разборщик).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Источник «внешний API»: карточка пришла из интеграции по API. /// Источник «внешний API»: карточка пришла из интеграции по API.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «атрибуты»: настраиваемые пользователем характеристики (стек, грейд, локация, сроки…). /// Модуль «атрибуты»: настраиваемые пользователем характеристики (стек, грейд, локация, сроки…).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «бюджет/цена»: деньги заявки (валюта исходная + сконвертированная). /// Модуль «бюджет/цена»: деньги заявки (валюта исходная + сконвертированная).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Ядро карточки: единственное, что есть у любой карточки во всех дашбордах. /// Ядро карточки: единственное, что есть у любой карточки во всех дашбордах.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Единый механизм перехода карточки между контейнерами. /// Единый механизм перехода карточки между контейнерами.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «комментарии» карточки. /// Модуль «комментарии» карточки.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Составной источник: цепочка «где взято → как обработано/доставлено». /// Составной источник: цепочка «где взято → как обработано/доставлено».
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «контакты заказчика». /// Модуль «контакты заказчика».
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Контейнер карточки: колонка дашборда, стадия «Выбранных» или служебная зона. /// Контейнер карточки: колонка дашборда, стадия «Выбранных» или служебная зона.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Политика контейнера: правила размещения карточек и жизненного цикла зоны. /// Политика контейнера: правила размещения карточек и жизненного цикла зоны.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Правила попадания карточки в контейнер (набор опциональных фильтров). /// Правила попадания карточки в контейнер (набор опциональных фильтров).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «содержимое»: структурированный блок «О заявке» карточки. /// Модуль «содержимое»: структурированный блок «О заявке» карточки.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «файлы» карточки (медиа/документы; объекты — в S3/MinIO). /// Модуль «файлы» карточки (медиа/документы; объекты — в S3/MinIO).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Источник «файл» (карточка создана из загруженного/импортированного файла). /// Источник «файл» (карточка создана из загруженного/импортированного файла).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «ссылки» карточки. /// Модуль «ссылки» карточки.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Источник «создано вручную/локально» (карточка без внешнего первоисточника). /// Источник «создано вручную/локально» (карточка без внешнего первоисточника).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «размещение»: контейнер карточки и флаги состояния на доске. /// Модуль «размещение»: контейнер карточки и флаги состояния на доске.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «напоминание»: отложенная карточка (контейнер hold). /// Модуль «напоминание»: отложенная карточка (контейнер hold).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Источник «импорт данных»: карточка создана из строки/колонки таблицы (csv/sheet/БД). /// Источник «импорт данных»: карточка создана из строки/колонки таблицы (csv/sheet/БД).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Источник карточки: всё, откуда карточка может прийти. /// Источник карточки: всё, откуда карточка может прийти.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Источник «Telegram»: канал/группа/чат/форум, конкретное сообщение. /// Источник «Telegram»: канал/группа/чат/форум, конкретное сообщение.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «история движения» карточки (создание и смены контейнера). /// Модуль «история движения» карточки (создание и смены контейнера).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Модуль «ТЗ»: текст технического задания/заметки-задания по карточке. /// Модуль «ТЗ»: текст технического задания/заметки-задания по карточке.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Abstractions;
/// <summary> /// <summary>
/// Источник «ссылка на сайт/объявление» (карточка создана из веб-страницы). /// Источник «ссылка на сайт/объявление» (карточка создана из веб-страницы).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Cards.Application.Dtos;
/// <summary> /// <summary>
/// Результат перехода карточки единым механизмом <see cref="ICardMover"/>. /// Результат перехода карточки единым механизмом <see cref="ICardMover"/>.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Агрегат карточки: ядро + опциональные модули (единая сущность всех дашбордов). /// Агрегат карточки: ядро + опциональные модули (единая сущность всех дашбордов).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Настраиваемый атрибут карточки: имя, значение и (опционально) единица измерения. /// Настраиваемый атрибут карточки: имя, значение и (опционально) единица измерения.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Бюджет/цена карточки в исходной валюте и (опционально) сконвертированный в целевую. /// Бюджет/цена карточки в исходной валюте и (опционально) сконвертированный в целевую.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Комментарий карточки. /// Комментарий карточки.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Контакт заказчика: квалифицированная запись (тип + значение). /// Контакт заказчика: квалифицированная запись (тип + значение).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Метаданные прикреплённого файла карточки (объект хранится в S3/MinIO или локальной папке). /// Метаданные прикреплённого файла карточки (объект хранится в S3/MinIO или локальной папке).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Запись истории движения карточки. /// Запись истории движения карточки.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Реестр коротких id модуля Cards и служебных контейнеров (единый владелец карточки). /// Реестр коротких id модуля Cards и служебных контейнеров (единый владелец карточки).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Прикреплённая ссылка карточки. /// Прикреплённая ссылка карточки.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Напоминание об «Отложено» (карточка в контейнере hold). /// Напоминание об «Отложено» (карточка в контейнере hold).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Каталог контейнеров по умолчанию пространства «Выбранные» (стадии) и служебных зон. /// Каталог контейнеров по умолчанию пространства «Выбранные» (стадии) и служебных зон.
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Описание контейнера по умолчанию (запись каталога CardsDefaultContainers). /// Описание контейнера по умолчанию (запись каталога CardsDefaultContainers).
@@ -1,4 +1,7 @@
namespace Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
namespace Deal.Modules.Cards.Application.Models;
/// <summary> /// <summary>
/// Контекст перехода карточки: кто инициировал и что делать с обучением. /// Контекст перехода карточки: кто инициировал и что делать с обучением.
@@ -1,6 +1,8 @@
using Deal.Contracts.Integrations; using Deal.Contracts.Integrations;
using Deal.Contracts.Integrations.Models; using Deal.Contracts.Integrations.Models;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application.ColumnRules; using Deal.Modules.Kanban.Application.ColumnRules;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Deal.Modules.Settings.Application; using Deal.Modules.Settings.Application;
@@ -1,6 +1,8 @@
using Deal.Contracts.Integrations; using Deal.Contracts.Integrations;
using Deal.Contracts.Integrations.Models; using Deal.Contracts.Integrations.Models;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application.ColumnRules; using Deal.Modules.Kanban.Application.ColumnRules;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Deal.Modules.Settings.Application; using Deal.Modules.Settings.Application;
@@ -1,5 +1,7 @@
using System.Text.Json; using System.Text.Json;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
namespace Deal.Modules.Kanban.Application; namespace Deal.Modules.Kanban.Application;
@@ -84,7 +84,7 @@ public interface ICardStore
/// <summary> /// <summary>
/// Карточки пространства «Выбранные», ORDER BY updated_at DESC (list_cards projects.py L5863). /// Карточки пространства «Выбранные», ORDER BY updated_at DESC (list_cards projects.py L5863).
/// </summary> /// </summary>
/// <param name="containerId">Фильтр по контейнеру-стадии (id каталога <see cref="Deal.Modules.Cards.Application.CardsDefaultContainers"/>); null — все стадии.</param> /// <param name="containerId">Фильтр по контейнеру-стадии (id каталога <see cref="Deal.Modules.Cards.Application.Models.CardsDefaultContainers"/>); null — все стадии.</param>
/// <param name="ct">Токен отмены.</param> /// <param name="ct">Токен отмены.</param>
/// <returns>Полные карточки (DTO): JSON-поля разобраны, комментарии приложены, time посчитан.</returns> /// <returns>Полные карточки (DTO): JSON-поля разобраны, комментарии приложены, time посчитан.</returns>
public Task<IReadOnlyList<CardDto>> ListSelectedCardsAsync(string? containerId, CancellationToken ct); public Task<IReadOnlyList<CardDto>> ListSelectedCardsAsync(string? containerId, CancellationToken ct);
@@ -175,7 +175,7 @@ public interface ICardStore
/// + перезапись history-массива с добавленной записью (move_stage projects.py L202216; Ruling 7). /// + перезапись history-массива с добавленной записью (move_stage projects.py L202216; Ruling 7).
/// </summary> /// </summary>
/// <param name="cardId">Id карточки (<c>c_...</c>).</param> /// <param name="cardId">Id карточки (<c>c_...</c>).</param>
/// <param name="containerId">Новый контейнер-стадия (валидирует сервис каталогом <see cref="Deal.Modules.Cards.Application.CardsDefaultContainers"/>).</param> /// <param name="containerId">Новый контейнер-стадия (валидирует сервис каталогом <see cref="Deal.Modules.Cards.Application.Models.CardsDefaultContainers"/>).</param>
/// <param name="historyEntry">Готовая запись истории {id,at,stage} (id сгенерирован модулем).</param> /// <param name="historyEntry">Готовая запись истории {id,at,stage} (id сгенерирован модулем).</param>
/// <param name="atMs">Время переноса, epoch-ms (пишется в updated_at и в запись истории).</param> /// <param name="atMs">Время переноса, epoch-ms (пишется в updated_at и в запись истории).</param>
/// <param name="ct">Токен отмены.</param> /// <param name="ct">Токен отмены.</param>
@@ -1,4 +1,6 @@
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Modules.Kanban.Application; namespace Deal.Modules.Kanban.Application;
@@ -14,7 +14,7 @@ namespace Deal.Modules.Kanban.Application.Models;
/// <param name="Budget">Бюджет (from/to/cur); null — бюджета нет.</param> /// <param name="Budget">Бюджет (from/to/cur); null — бюджета нет.</param>
/// <param name="Contact">Контактная строка карточки.</param> /// <param name="Contact">Контактная строка карточки.</param>
/// <param name="TzText">Текст технического задания.</param> /// <param name="TzText">Текст технического задания.</param>
/// <param name="ContainerId">Желаемый контейнер-стадия (id каталога <see cref="Deal.Modules.Cards.Application.CardsDefaultContainers"/>); /// <param name="ContainerId">Желаемый контейнер-стадия (id каталога <see cref="Deal.Modules.Cards.Application.Models.CardsDefaultContainers"/>);
/// null или неизвестная — карточка создаётся в <c>planned</c> (Ruling 6).</param> /// null или неизвестная — карточка создаётся в <c>planned</c> (Ruling 6).</param>
public sealed record CardLocalCreateDto( public sealed record CardLocalCreateDto(
string Title = "", string Title = "",
@@ -1,5 +1,7 @@
using System.Text; using System.Text;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
namespace Deal.Modules.Kanban.Application; namespace Deal.Modules.Kanban.Application;
@@ -1,6 +1,8 @@
using Deal.Contracts.Integrations; using Deal.Contracts.Integrations;
using Deal.Contracts.Integrations.Models; using Deal.Contracts.Integrations.Models;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.ColumnRules; using Deal.Modules.Kanban.Application.ColumnRules;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
@@ -1,6 +1,8 @@
using Deal.Contracts.Integrations; using Deal.Contracts.Integrations;
using Deal.Contracts.Integrations.Models; using Deal.Contracts.Integrations.Models;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.ColumnRules; using Deal.Modules.Kanban.Application.ColumnRules;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
@@ -1,6 +1,8 @@
using Deal.Contracts.Integrations; using Deal.Contracts.Integrations;
using Deal.Contracts.Integrations.Models; using Deal.Contracts.Integrations.Models;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Deal.Modules.Pipeline.Application.Models; using Deal.Modules.Pipeline.Application.Models;
@@ -1,6 +1,8 @@
using Deal.Contracts.Integrations; using Deal.Contracts.Integrations;
using Deal.Contracts.Integrations.Models; using Deal.Contracts.Integrations.Models;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
using Deal.Modules.Pipeline.Application.Models; using Deal.Modules.Pipeline.Application.Models;
@@ -1,5 +1,7 @@
using Deal.Infrastructure.Services; using Deal.Infrastructure.Services;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
@@ -1,5 +1,7 @@
using Deal.Modules.Cards; using Deal.Modules.Cards;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Tests.Unit; namespace Deal.Tests.Unit;
@@ -1,5 +1,7 @@
using System.Text.Json; using System.Text.Json;
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
@@ -1,4 +1,6 @@
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
using Deal.Modules.Kanban.Application; using Deal.Modules.Kanban.Application;
using Deal.Modules.Kanban.Application.Models; using Deal.Modules.Kanban.Application.Models;
@@ -1,4 +1,6 @@
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Tests.Unit; namespace Deal.Tests.Unit;
@@ -1,4 +1,6 @@
using Deal.Modules.Cards.Application; using Deal.Modules.Cards.Application.Abstractions;
using Deal.Modules.Cards.Application.Dtos;
using Deal.Modules.Cards.Application.Models;
namespace Deal.Tests.Unit; namespace Deal.Tests.Unit;