hw/background-tasks
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: сценарии 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 - Унифицирована терминология в сообщениях: используется «срок»
Initial commit
feat: миграция на Telegram.Bot с reply-клавиатурами и меню команд