main
feat: постраничная навигация задач и callback-управление карточкой задачи - Добавлены DTO callbackData: ToDoItemCallbackDto и PagedListCallbackDto - Добавлен LINQ-метод GetBatchByNumber и универсальный builder inline-пагинации - /show переведен на пагинацию активных задач через EditMessageText - Добавлен экран show_completed с пагинацией выполненных задач - Добавлены callback-команды showtask/completetask/deletetask и карточка задачи с inline-действиями - Добавлен сценарий DeleteTask (подтверждение yes/no) и новый ScenarioType.DeleteTask - В IToDoService добавлен GetAsync; MarkCompletedAsync теперь сохраняет изменения через UpdateAsync - Удалены текстовые команды /completetask и /removetask, обновлены /help и SetMyCommands
feat: списки задач, callback-сценарии и рефактор маршрутизации UpdateHandler - Добавлена доменная сущность ToDoList и связь ToDoItem.List - Добавлены IToDoListRepository и FileToDoListRepository (хранение: lists/{UserId}/{ToDoListId}.json) - Расширено хранение задач снапшотом списка в StoredToDoItem (ListId/ListName/ListCreatedAt) - Добавлены IToDoListService/ToDoListService и метод IToDoService.GetByUserIdAndListAsync - Обновлена команда /show: inline-меню списков (show|{listId?}, addlist, deletelist) - Удалена команда /showalltasks, reply-клавиатура вне сценариев: /addtask /show /report - Добавлены DTO для callbackData: CallbackDto и ToDoListCallbackDto - Добавлены callback-команды: show, addlist, deletelist - Добавлены сценарии AddList и DeleteList; AddTaskScenario расширен выбором списка через addtasklist|{listId?} - UpdateHandler переработан в тонкий роутер через ScenarioCoordinator, MessageUpdateProcessor и CallbackUpdateProcessor - Включена обработка UpdateType.CallbackQuery и централизованный AnswerCallbackQuery
feat: добавить механизм фоновых задач и автосброс сценариев по таймауту - Добавлены инфраструктурные компоненты фоновых задач: IBackgroundTask, BackgroundTaskRunner, базовый BackgroundTask - Добавлен ResetScenarioBackgroundTask с периодическим запуском (раз в час) - Реализован автосброс просроченных сценариев через resetScenarioTimeout и уведомление пользователя - В уведомлении после автосброса используется post-registration клавиатура (/addtask, /show, /report) - ScenarioContext расширен полем CreatedAt (UTC при создании контекста) - IScenarioContextRepository расширен методом GetContexts(CancellationToken) - InMemoryScenarioContextRepository реализует snapshot-выгрузку всех активных контекстов - Program.cs интегрирован с BackgroundTaskRunner: регистрация задачи, запуск до StartReceiving, остановка до CancelAsync
feat: асинхронность, события и перевод сервисов на async