Files
Deal/src/telegram-service/Deal.Telegram/Telegram/TelegramDialog.cs
T
Rustam Khalimov 9e07568ddd Инициализировать репозиторий «Дейл»
Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы
ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ,
инструкция пользователя, техдокументация, код-стайл), бэклог,
скрипты развёртывания и архив прототипа LeadRadar.
2026-09-11 02:50:17 +03:00

63 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace Deal.Telegram.Telegram;
/// <summary>
/// Диалог (источник) аккаунта в нейтральном для TL-слоя виде (план Task 10; Ruling 3/7).
///
/// Это результат «списка диалогов» сессии (refresh_dialogs прототипа L505–519): id в подписанном
/// каноне контракта («-100…» каналы, «-…» группы, «+…» личные), отображаемое имя, username, тип
/// канона channel|group|forum|chat и счётчики для догонялки непрочитанных (realtime_sweep L427456).
/// 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; }
}