main
feat: сценарии AddTask с сохранением состояния и поддержкой срока задачи - Добавлены сценарные модели и контракты: ScenarioType, ScenarioResult, ScenarioContext, IScenario, IScenarioContextRepository - Реализован InMemoryScenarioContextRepository на Dictionary<long, ScenarioContext> - UpdateHandler расширен поддержкой сценариев: GetScenario, ProcessScenario, сохранение/сброс контекста - Добавлен AddTaskScenario с шагами Name/Deadline и валидацией даты в формате dd.MM.yyyy - Добавлены команды /addtask и /cancel в рамках Command pattern - Добавлена политика выполнения команд (CommandExecutionPolicy) с Always для /cancel - Обновлены ReplyKeyboardMarkup: сценарная клавиатура с /cancel и пост-регистрационная с /addtask - Добавлено поле Deadline в ToDoItem и обновлен IToDoService.AddAsync(..., deadline, ...) - Обновлено файловое хранение задач: Deadline в StoredToDoItem и маппинг в FileToDoRepository - Унифицирована терминология в сообщениях: используется «срок»
feat: миграция на Telegram.Bot с reply-клавиатурами и меню команд
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