Убрать очевидные <param> токенов отмены и ужать 3 summary
73 <param name="ct|cancellationToken"> («Токен отмены.») — пересказ сигнатуры, запрещённый §5, удалены в 17 файлах; ужаты 2 многосентенционных и 1 длинное summary. Контроль краткости: <remarks> 0, inline-<summary> 0, многосентенционных 0, TODO 0. Build 5 sln 0/0, тесты зелёные (1340/130/52/38/9).
This commit is contained in:
@@ -54,4 +54,7 @@
|
||||
- Переведены на русский англоязычные `//`-комментарии (3 шт. из 18 найденных; остальные — имена
|
||||
сущностей/заголовки секций тестов, не англоязычный текст).
|
||||
- Из индекса убраны случайно закоммиченные `archive/**/__pycache__/*.pyc` (2 шт., уже в `.gitignore`).
|
||||
- STATUS.md: удалён устаревший блок «Осталось (в backlog)» в шапке (пункты закрытыgeneric-контрактом источника).
|
||||
- STATUS.md: удалён устаревший блок «Осталось (в backlog)» в шапке (пункты закрыты generic-контрактом источника).
|
||||
- Дочистка по контрольному скану краткости: удалены 73 очевидных `<param name="ct|cancellationToken">`
|
||||
(«Токен отмены.» — пересказ сигнатуры, §5) в 17 файлах; ужаты 3 summary (2 многосентенционных, 1 длинное).
|
||||
Контроль: `<remarks>` — 0, inline-`<summary>` — 0, многосентенционных summary — 0, TODO — 0.
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
> (`* text=auto eol=lf`), `.editorconfig` → lf, нормализовано 1029 файлов; попутно починены 42 CRLF-.sh
|
||||
> (первый прогон удалённого CI падал бы). Понижено 12 новых private XML-доков; добавлены 4 `<summary>`
|
||||
> членам интерфейсов; переведены 3 англоязычных комментария; из индекса убраны 2 `__pycache__/*.pyc`;
|
||||
> STATUS.md — удалён устаревший блок «Осталось (в backlog)» в шапке. Явные реализации интерфейсов (§11) —
|
||||
> STATUS.md — удалён устаревший блок «Осталось (в backlog)» в шапке. Дочистка по контрольному скану
|
||||
> краткости: удалены 73 очевидных `<param name="ct">` (пересказ сигнатуры) в 17 файлах, ужаты 3 summary
|
||||
> (многосентенционные/длинные); контроль: `<remarks>` 0, inline-`<summary>` 0, многосентенционных 0, TODO 0. Явные реализации интерфейсов (§11) —
|
||||
> остались точечным ревью владельца (43 интерфейса с реализациями, массовая правка не автоматизируется).
|
||||
> Сборка 5 sln 0/0; тесты: core **1340/1340**, telegram **130/130**, ai **52/52**, ml **38/38**, storage **9/9** — зелёные.
|
||||
> Детали — `docs/spec/Код-стайл-аудит-2026-09-11.md`, §2.
|
||||
|
||||
@@ -8,8 +8,7 @@ using Microsoft.Extensions.Logging;
|
||||
namespace Deal.Infrastructure.Tenancy;
|
||||
|
||||
/// <summary>
|
||||
/// Пакетная (maintenance) миграция схем ВСЕХ существующих тенантов реестра: шардированный обход
|
||||
/// страницами с ограниченным параллелизмом и логированием прогресса — для провижининга на сотни/тысячи схем.
|
||||
/// Пакетная миграция схем всех существующих тенантов реестра для провижининга на сотни/тысячи схем.
|
||||
/// </summary>
|
||||
public sealed class TenantSchemaMigrationService(
|
||||
ITenantRepository tenantRepository,
|
||||
|
||||
@@ -14,7 +14,6 @@ public interface ISourceContentProvider
|
||||
/// Загружает содержимое записи источника.
|
||||
/// </summary>
|
||||
/// <param name="source">Ссылка на источник.</param>
|
||||
/// <param name="ct">Токен отмены.</param>
|
||||
/// <returns>Содержимое записи либо null, если источник не отдал данные.</returns>
|
||||
public Task<SourceContent?> LoadAsync(SourceRef source, CancellationToken ct);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ public interface ISourceIngestObserver
|
||||
/// Обрабатывает принятую запись источника.
|
||||
/// </summary>
|
||||
/// <param name="item">Принятая запись.</param>
|
||||
/// <param name="ct">Токен отмены.</param>
|
||||
/// <returns>Завершается после обработки; сбой наблюдателя не влияет на приём.</returns>
|
||||
public Task OnIngestedAsync(SourceItem item, CancellationToken ct);
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@ public sealed class SourceContentResolver
|
||||
/// Загружает содержимое записи источника.
|
||||
/// </summary>
|
||||
/// <param name="source">Ссылка на источник.</param>
|
||||
/// <param name="ct">Токен отмены.</param>
|
||||
/// <returns>Содержимое записи либо null — провайдера нет/источник не отдал данные.</returns>
|
||||
public Task<SourceContent?> ResolveAsync(SourceRef source, CancellationToken ct)
|
||||
{
|
||||
|
||||
@@ -12,7 +12,6 @@ public sealed partial class CardsService
|
||||
/// Загружает содержимое источника карточки.
|
||||
/// </summary>
|
||||
/// <param name="card">Карточка, для которой нужно содержимое.</param>
|
||||
/// <param name="ct">Токен отмены.</param>
|
||||
/// <returns>Содержимое от провайдера источника либо сохранённое в карточке.</returns>
|
||||
public async Task<SourceContent> ResolveSourceAsync(CardDto card, CancellationToken ct)
|
||||
{
|
||||
|
||||
@@ -51,7 +51,6 @@ public sealed class CardReclassifier(
|
||||
/// Пакетная переклассификация «Неразобранного»
|
||||
/// </summary>
|
||||
/// <param name="ids">Опциональный список id (null/пусто — все карточки inbox).</param>
|
||||
/// <param name="ct">Токен отмены.</param>
|
||||
/// <param name="progress">Наблюдатель прогресса (SSE); null — без отчётов.</param>
|
||||
/// <returns>Итог прохода (счётчики исхода) либо <c>busy</c>, если проход уже идёт.</returns>
|
||||
public async Task<ReclassifyResultDto> ReclassifyInboxAsync(
|
||||
|
||||
@@ -31,7 +31,6 @@ public sealed partial class PipelineWorkerService
|
||||
/// Прогоняет текст по этапам конвейера без записи в систему.
|
||||
/// </summary>
|
||||
/// <param name="text">Текст для проверки.</param>
|
||||
/// <param name="ct">Токен отмены.</param>
|
||||
/// <returns>Результаты этапов, разбор и целевой контейнер (если карточка была бы создана).</returns>
|
||||
public async Task<PipelineDryRunDto> DryRunAsync(string text, CancellationToken ct)
|
||||
{
|
||||
|
||||
@@ -13,7 +13,6 @@ public interface ICoreIngressClient
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="request">Запись в контракте PushSourceRequest.</param>
|
||||
/// <param name="cancellationToken">Отмена вызова.</param>
|
||||
/// <returns>Ответ ядра (accepted/duplicate — дубль источника в очереди не растёт).</returns>
|
||||
public Task<PushSourceReply> PushSourceAsync(
|
||||
string tenantId,
|
||||
@@ -25,7 +24,6 @@ public interface ICoreIngressClient
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="entries">Актуальный каталог диалогов (как refresh_dialogs).</param>
|
||||
/// <param name="cancellationToken">Отмена вызова.</param>
|
||||
/// <returns>Список id диалогов с включённым мониторингом (по версии ядра).</returns>
|
||||
public Task<IReadOnlyList<string>> SyncDialogsAsync(
|
||||
string tenantId,
|
||||
|
||||
@@ -75,7 +75,6 @@ public sealed class BackfillService
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="force">True — «Перечитать» по кнопке (семантика флага — в ядре, см. класс).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Сколько сообщений отправлено в ядро (0 — диалог уже перечитывается/нет текстов).</returns>
|
||||
public async Task<int> ExecuteAsync(
|
||||
string tenantId,
|
||||
|
||||
@@ -10,7 +10,6 @@ public interface IBackfillPacer
|
||||
/// </summary>
|
||||
/// <param name="minSeconds">Нижняя граница паузы, секунды (≥ 0).</param>
|
||||
/// <param name="maxSeconds">Верхняя граница паузы, секунды (≥ minSeconds).</param>
|
||||
/// <param name="cancellationToken">Отмена ожидания.</param>
|
||||
/// <returns>Задача ожидания.</returns>
|
||||
public Task WaitAsync(
|
||||
double minSeconds,
|
||||
|
||||
@@ -58,7 +58,6 @@ public sealed class RealtimeSweep
|
||||
/// <summary>
|
||||
/// Один цикл догона
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена цикла.</param>
|
||||
public async Task SweepAllAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
foreach (TenantSession session in _sessionFarm.Sessions)
|
||||
|
||||
@@ -56,7 +56,6 @@ public sealed class DiscoveryOps
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="query">Поисковый запрос (ключ задачи discovery).</param>
|
||||
/// <param name="limit">Верхняя граница результата.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Найденные источники (каналы/группы/личные) без дублей, не длиннее limit.</returns>
|
||||
public async Task<IReadOnlyList<TelegramDialog>> SearchAsync(
|
||||
string tenantId,
|
||||
@@ -78,7 +77,6 @@ public sealed class DiscoveryOps
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id источника («-100…»/«-…»/«+…»).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Инфо об источнике (сбои определения не бросаются — см. ISessionClient.GetInfoAsync).</returns>
|
||||
public Task<TelegramSourceInfo> GetInfoAsync(
|
||||
string tenantId,
|
||||
@@ -92,7 +90,6 @@ public sealed class DiscoveryOps
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id источника.</param>
|
||||
/// <param name="limit">Размер выборки (≤ 0 — дефолт; форумы читаются по активным темам).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>ok/сообщения либо ok=false/error="no_history" (не ошибка RPC).</returns>
|
||||
public Task<DiscoveryReadResult> ReadForEvalAsync(
|
||||
string tenantId,
|
||||
@@ -106,7 +103,6 @@ public sealed class DiscoveryOps
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="username">Username источника («@»/пробелы нормализуются).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task JoinAsync(
|
||||
string tenantId,
|
||||
string username,
|
||||
@@ -127,7 +123,6 @@ public sealed class DiscoveryOps
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task LeaveAsync(
|
||||
string tenantId,
|
||||
string dialogId,
|
||||
|
||||
@@ -69,7 +69,6 @@ public sealed class RealtimeMonitorService : BackgroundService
|
||||
/// <summary>
|
||||
/// При остановке хоста отписывает все listener'ы.
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Токен остановки.</param>
|
||||
public override async Task StopAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await base.StopAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
@@ -62,7 +62,6 @@ public sealed class SessionHeartbeatService : BackgroundService
|
||||
/// <summary>
|
||||
/// При остановке хоста сохраняет живые сессии.
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Токен остановки.</param>
|
||||
public override async Task StopAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await base.StopAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
@@ -52,7 +52,6 @@ public sealed class SessionFarm
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="limit">Верхняя граница числа диалогов.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<IReadOnlyList<TelegramDialog>> ListDialogsAsync(
|
||||
string tenantId,
|
||||
int limit,
|
||||
@@ -65,7 +64,6 @@ public sealed class SessionFarm
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="limit">Сколько последних сообщений запросить.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<IReadOnlyList<TelegramMessage>> GetMessagesAsync(
|
||||
string tenantId,
|
||||
string dialogId,
|
||||
@@ -79,7 +77,6 @@ public sealed class SessionFarm
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="msgId">Id сообщения в Telegram.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<TelegramMessage?> GetMessageAsync(
|
||||
string tenantId,
|
||||
string dialogId,
|
||||
@@ -92,7 +89,6 @@ public sealed class SessionFarm
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task MarkReadAsync(
|
||||
string tenantId,
|
||||
string dialogId,
|
||||
@@ -105,7 +101,6 @@ public sealed class SessionFarm
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="query">Поисковый запрос (ключ задачи discovery).</param>
|
||||
/// <param name="limit">Верхняя граница результата.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<IReadOnlyList<TelegramDialog>> SearchAsync(
|
||||
string tenantId,
|
||||
string query,
|
||||
@@ -118,7 +113,6 @@ public sealed class SessionFarm
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id источника.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<TelegramSourceInfo> GetInfoAsync(
|
||||
string tenantId,
|
||||
string dialogId,
|
||||
@@ -131,7 +125,6 @@ public sealed class SessionFarm
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id источника.</param>
|
||||
/// <param name="limit">Размер выборки.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<DiscoveryReadResult> ReadForEvalAsync(
|
||||
string tenantId,
|
||||
string dialogId,
|
||||
@@ -144,7 +137,6 @@ public sealed class SessionFarm
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="username">Username (без «@»; нормализует DiscoveryOps).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task JoinAsync(
|
||||
string tenantId,
|
||||
string username,
|
||||
@@ -156,7 +148,6 @@ public sealed class SessionFarm
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task LeaveAsync(
|
||||
string tenantId,
|
||||
string dialogId,
|
||||
@@ -170,7 +161,6 @@ public sealed class SessionFarm
|
||||
/// <param name="apiId">api_id приложения.</param>
|
||||
/// <param name="apiHash">api_hash приложения.</param>
|
||||
/// <param name="phone">Номер телефона.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<TenantSessionSnapshot> StartPhoneAsync(
|
||||
string tenantId,
|
||||
int apiId,
|
||||
@@ -185,7 +175,6 @@ public sealed class SessionFarm
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="apiId">api_id приложения.</param>
|
||||
/// <param name="apiHash">api_hash приложения.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<TenantSessionSnapshot> StartQrAsync(
|
||||
string tenantId,
|
||||
int apiId,
|
||||
@@ -198,7 +187,6 @@ public sealed class SessionFarm
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="code">Код.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<TenantSessionSnapshot> SendCodeAsync(
|
||||
string tenantId,
|
||||
string code,
|
||||
@@ -210,7 +198,6 @@ public sealed class SessionFarm
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="password">Пароль.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<TenantSessionSnapshot> SendPasswordAsync(
|
||||
string tenantId,
|
||||
string password,
|
||||
@@ -221,7 +208,6 @@ public sealed class SessionFarm
|
||||
/// Отключение аккаунта
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<TenantSessionSnapshot?> LogoutAsync(string tenantId, CancellationToken cancellationToken)
|
||||
{
|
||||
TenantSession? session = FindSession(tenantId);
|
||||
@@ -238,7 +224,6 @@ public sealed class SessionFarm
|
||||
/// Статус сессии тенанта; null — аккаунт не подключён
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<TenantSessionSnapshot?> GetStatusAsync(string tenantId, CancellationToken cancellationToken)
|
||||
{
|
||||
TenantSession? session = FindSession(tenantId);
|
||||
@@ -248,7 +233,6 @@ public sealed class SessionFarm
|
||||
/// <summary>
|
||||
/// Авто-возобновление на старте
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task ResumeAllAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
foreach (string tenantId in _sessionStore.ListTenantIds())
|
||||
@@ -282,7 +266,6 @@ public sealed class SessionFarm
|
||||
/// <summary>
|
||||
/// Сердцебиение
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task HeartbeatTickAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
foreach (TenantSession session in _sessions.Values)
|
||||
@@ -299,7 +282,6 @@ public sealed class SessionFarm
|
||||
/// <summary>
|
||||
/// Остановка хоста
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task ShutdownAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
foreach (TenantSession session in _sessions.Values)
|
||||
|
||||
@@ -39,7 +39,6 @@ public sealed class SessionStore
|
||||
/// Читает и расшифровывает сессию тенанта.
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task<StoredSession?> LoadAsync(string tenantId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
string filePath = PathFor(tenantId);
|
||||
@@ -95,7 +94,6 @@ public sealed class SessionStore
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="session">Открытое содержимое сессии для шифрования at-rest.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task SaveAsync(
|
||||
string tenantId,
|
||||
StoredSession session,
|
||||
@@ -124,7 +122,6 @@ public sealed class SessionStore
|
||||
/// Удаляет файл сессии тенанта
|
||||
/// </summary>
|
||||
/// <param name="tenantId">Id тенанта.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task DeleteAsync(string tenantId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
string filePath = PathFor(tenantId);
|
||||
|
||||
@@ -78,7 +78,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// <param name="apiId">api_id приложения (из тела запроса ядра).</param>
|
||||
/// <param name="apiHash">api_hash приложения.</param>
|
||||
/// <param name="phone">Номер телефона (международный формат).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Снимок состояния после операции (фаза "code").</returns>
|
||||
/// <exception cref="SessionException">Нет ключей (INVALID_ARGUMENT) / ошибки Telegram.</exception>
|
||||
public async Task<TenantSessionSnapshot> StartPhoneAsync(
|
||||
@@ -139,7 +138,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// </summary>
|
||||
/// <param name="apiId">api_id приложения.</param>
|
||||
/// <param name="apiHash">api_hash приложения.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Снимок состояния: Qr с qrUrl или Ready (авторизация уже была).</returns>
|
||||
/// <exception cref="SessionException">Нет ключей (INVALID_ARGUMENT) / ошибки Telegram до первого URL.</exception>
|
||||
public async Task<TenantSessionSnapshot> StartQrAsync(
|
||||
@@ -218,10 +216,9 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Отправить SMS-код. Фазы вне "code" — FAILED_PRECONDITION.
|
||||
/// Отправить SMS-код.
|
||||
/// </summary>
|
||||
/// <param name="code">Код из SMS/Telegram-сообщения.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Снимок состояния: "password" при 2FA либо "ready" после авторизации.</returns>
|
||||
public async Task<TenantSessionSnapshot> SendCodeAsync(string code, CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -266,7 +263,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// Отправить облачный пароль 2FA.
|
||||
/// </summary>
|
||||
/// <param name="password">Облачный пароль.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Снимок состояния после операции (фаза "ready").</returns>
|
||||
public async Task<TenantSessionSnapshot> SendPasswordAsync(string password, CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -303,7 +299,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// <summary>
|
||||
/// Отключить аккаунт и удалить сессию тенанта.
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task<TenantSessionSnapshot?> LogoutAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
|
||||
@@ -357,7 +352,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// <summary>
|
||||
/// Снимок состояния для GetStatus; null — сессии тенанта нет
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task<TenantSessionSnapshot?> GetSnapshotAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
|
||||
@@ -376,7 +370,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// Список диалогов аккаунта; фаза обязана быть ready.
|
||||
/// </summary>
|
||||
/// <param name="limit">Верхняя граница числа диалогов.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Диалоги аккаунта (нейтральный вид).</returns>
|
||||
public async Task<IReadOnlyList<TelegramDialog>> ListDialogsAsync(int limit, CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -397,7 +390,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="limit">Сколько последних сообщений запросить.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Сообщения диалога (от новых к старым, непустые тексты).</returns>
|
||||
public async Task<IReadOnlyList<TelegramMessage>> GetMessagesAsync(
|
||||
string dialogId,
|
||||
@@ -421,7 +413,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="msgId">Id сообщения в Telegram.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Сообщение с текстом либо null (медиа без текста/не найдено).</returns>
|
||||
public async Task<TelegramMessage?> GetMessageAsync(
|
||||
string dialogId,
|
||||
@@ -444,7 +435,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// Помечает диалог прочитанным
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task MarkReadAsync(string dialogId, CancellationToken cancellationToken)
|
||||
{
|
||||
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
|
||||
@@ -465,7 +455,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// </summary>
|
||||
/// <param name="query">Поисковый запрос (ключ задачи discovery).</param>
|
||||
/// <param name="limit">Верхняя граница результата.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Найденные источники.</returns>
|
||||
public async Task<IReadOnlyList<TelegramDialog>> SearchAsync(
|
||||
string query,
|
||||
@@ -488,7 +477,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// Инфо об источнике для оценки кандидата; фаза ready.
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id источника.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Инфо (по умолчанию — только id; сбои определения не бросаются, см. ISessionClient).</returns>
|
||||
public async Task<TelegramSourceInfo> GetInfoAsync(string dialogId, CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -509,7 +497,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id источника.</param>
|
||||
/// <param name="limit">Размер выборки (limit ≤ 0 — пусто без сети).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Результат чтения (ok/messages либо no_history).</returns>
|
||||
public async Task<DiscoveryReadResult> ReadForEvalAsync(
|
||||
string dialogId,
|
||||
@@ -532,7 +519,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// Вступить в канал/группу по username; фаза ready.
|
||||
/// </summary>
|
||||
/// <param name="username">Username (без «@»; нормализует DiscoveryOps).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task JoinAsync(string username, CancellationToken cancellationToken)
|
||||
{
|
||||
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
|
||||
@@ -551,7 +537,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// Выйти из канала/группы; фаза ready.
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task LeaveAsync(string dialogId, CancellationToken cancellationToken)
|
||||
{
|
||||
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
|
||||
@@ -649,7 +634,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// Авто-возобновление на старте...
|
||||
/// </summary>
|
||||
/// <param name="stored">Содержимое файла сессии тенанта.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>True — сессия возобновлена (ready); false — не авторизована/сбой.</returns>
|
||||
public async Task<bool> TryResumeAsync(StoredSession stored, CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -708,7 +692,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// <summary>
|
||||
/// Сердцебиение: для фазы "ready" при обрыве соединения — повторный connect.
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task TryReconnectAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
|
||||
@@ -748,7 +731,6 @@ public sealed class TenantSession : IAsyncDisposable
|
||||
/// <summary>
|
||||
/// Остановка (хост гасится)
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public async Task FlushAndDisposeAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await _gate.WaitAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
@@ -33,21 +33,18 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// <summary>
|
||||
/// Устанавливает соединение с Telegram
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task ConnectAsync(CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Запрашивает SMS-код для номера.
|
||||
/// </summary>
|
||||
/// <param name="phone">Номер в международном формате (как ввёл пользователь).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task RequestCodeAsync(string phone, CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Отправляет SMS-код. Возвращает следующий запрашиваемый шаг
|
||||
/// Отправляет SMS-код.
|
||||
/// </summary>
|
||||
/// <param name="code">Код из SMS/Telegram-сообщения.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>"password" при необходимости 2FA, иначе null.</returns>
|
||||
public Task<string?> SubmitCodeAsync(string code, CancellationToken cancellationToken);
|
||||
|
||||
@@ -55,26 +52,22 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// Отправляет облачный пароль 2FA.
|
||||
/// </summary>
|
||||
/// <param name="password">Облачный пароль.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task SubmitPasswordAsync(string password, CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Выполняет QR-вход
|
||||
/// </summary>
|
||||
/// <param name="onQrUrl">Колбэк нового URL QR-входа (tg://login?token=...).</param>
|
||||
/// <param name="cancellationToken">Отмена операции (прерывает ожидание сканирования).</param>
|
||||
public Task StartQrAsync(Action<string> onQrUrl, CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Полный выход: отзывает авторизацию на стороне Telegram
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task LogOutAsync(CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает строку аккаунта для статуса
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
public Task<string> GetAccountAsync(CancellationToken cancellationToken);
|
||||
|
||||
|
||||
@@ -82,7 +75,6 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// Список диалогов аккаунта.
|
||||
/// </summary>
|
||||
/// <param name="limit">Верхняя граница числа диалогов.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Диалоги аккаунта в нейтральном виде.</returns>
|
||||
public Task<IReadOnlyList<TelegramDialog>> GetDialogsAsync(int limit, CancellationToken cancellationToken);
|
||||
|
||||
@@ -91,7 +83,6 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id диалога (каналы "-100…", группы "-…", личные "+…").</param>
|
||||
/// <param name="limit">Сколько последних сообщений запросить.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Сообщения диалога (с канальными полями для PushSource).</returns>
|
||||
public Task<IReadOnlyList<TelegramMessage>> GetMessagesAsync(
|
||||
string dialogId,
|
||||
@@ -103,7 +94,6 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id диалога (каналы "-100…", группы "-…", личные "+…").</param>
|
||||
/// <param name="msgId">Id сообщения в Telegram.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Сообщение с текстом либо null (медиа без текста/не найдено).</returns>
|
||||
public Task<TelegramMessage?> GetMessageAsync(
|
||||
string dialogId,
|
||||
@@ -114,7 +104,6 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// Помечает весь диалог прочитанным.
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Задача завершения.</returns>
|
||||
public Task MarkReadAsync(string dialogId, CancellationToken cancellationToken);
|
||||
|
||||
@@ -129,7 +118,6 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// </summary>
|
||||
/// <param name="query">Поисковый запрос (ключ задачи discovery).</param>
|
||||
/// <param name="limit">Верхняя граница результата.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Найденные источники в нейтральном виде (каналы/группы/личные).</returns>
|
||||
public Task<IReadOnlyList<TelegramDialog>> SearchAsync(
|
||||
string query,
|
||||
@@ -140,7 +128,6 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// Инфо об источнике для оценки кандидата
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id источника («-100…»/«-…»/«+…»).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Инфо об источнике (по умолчанию — только id и name=id).</returns>
|
||||
public Task<TelegramSourceInfo> GetInfoAsync(string dialogId, CancellationToken cancellationToken);
|
||||
|
||||
@@ -149,7 +136,6 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id источника.</param>
|
||||
/// <param name="limit">Размер выборки.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Результат чтения выборки (ok + сообщения либо no_history).</returns>
|
||||
public Task<DiscoveryReadResult> ReadForEvalAsync(
|
||||
string dialogId,
|
||||
@@ -160,7 +146,6 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// Вступить в канал/группу по username.
|
||||
/// </summary>
|
||||
/// <param name="username">Username канала/группы (без «@»).</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Задача завершения (ok=true при успехе).</returns>
|
||||
public Task JoinAsync(string username, CancellationToken cancellationToken);
|
||||
|
||||
@@ -168,7 +153,6 @@ public interface ISessionClient : IAsyncDisposable
|
||||
/// Выйти из канала/группы.
|
||||
/// </summary>
|
||||
/// <param name="dialogId">Подписанный id диалога.</param>
|
||||
/// <param name="cancellationToken">Отмена операции.</param>
|
||||
/// <returns>Задача завершения (ok=true при успехе).</returns>
|
||||
public Task LeaveAsync(string dialogId, CancellationToken cancellationToken);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user