Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ, инструкция пользователя, техдокументация, код-стайл), бэклог, скрипты развёртывания и архив прототипа LeadRadar.
63 lines
3.1 KiB
C#
63 lines
3.1 KiB
C#
namespace Deal.Telegram.Telegram;
|
||
|
||
/// <summary>
|
||
/// Диалог (источник) аккаунта в нейтральном для TL-слоя виде (план Task 10; Ruling 3/7).
|
||
///
|
||
/// Это результат «списка диалогов» сессии (refresh_dialogs прототипа L505–519): id в подписанном
|
||
/// каноне контракта («-100…» каналы, «-…» группы, «+…» личные), отображаемое имя, username, тип
|
||
/// канона channel|group|forum|chat и счётчики для догонялки непрочитанных (realtime_sweep L427–456).
|
||
/// TL-реализация (<see cref="WTelegramSessionClient"/>) и фейки тестов возвращают именно этот тип;
|
||
/// службы каталога не зависят от библиотеки WTelegramClient.
|
||
/// </summary>
|
||
public sealed record TelegramDialog
|
||
{
|
||
/// <summary>
|
||
/// Создаёт описание диалога.
|
||
/// </summary>
|
||
/// <param name="id">Подписанный id диалога (каналы «-100…», группы «-…», личные «+…»).</param>
|
||
/// <param name="name">Отображаемое имя (title/first_name) или id, если имени нет.</param>
|
||
/// <param name="username">Username (handle); пуст, если публичного username нет.</param>
|
||
/// <param name="kind">Тип канона: channel|group|forum|chat (шапка telegram.proto).</param>
|
||
/// <param name="unreadCount">Число непрочитанных сообщений (для realtime_sweep).</param>
|
||
/// <param name="topMessageId">Id самого свежего сообщения диалога (для read-ack).</param>
|
||
public TelegramDialog(string id, string name, string username, string kind, int unreadCount, int topMessageId)
|
||
{
|
||
Id = id;
|
||
Name = name;
|
||
Username = username;
|
||
Kind = kind;
|
||
UnreadCount = unreadCount;
|
||
TopMessageId = topMessageId;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Подписанный id диалога (каналы «-100…», группы «-…», личные «+…»).
|
||
/// </summary>
|
||
public string Id { get; }
|
||
|
||
/// <summary>
|
||
/// Отображаемое имя (title/first_name) или id, если имени нет.
|
||
/// </summary>
|
||
public string Name { get; }
|
||
|
||
/// <summary>
|
||
/// Username (handle); пуст, если публичного username нет.
|
||
/// </summary>
|
||
public string Username { get; }
|
||
|
||
/// <summary>
|
||
/// Тип канона контракта: channel|group|forum|chat.
|
||
/// </summary>
|
||
public string Kind { get; }
|
||
|
||
/// <summary>
|
||
/// Число непрочитанных сообщений диалога (для догона realtime_sweep).
|
||
/// </summary>
|
||
public int UnreadCount { get; }
|
||
|
||
/// <summary>
|
||
/// Id самого свежего сообщения диалога.
|
||
/// </summary>
|
||
public int TopMessageId { get; }
|
||
}
|