main
feat: нотификации и фоновые задачи доставки уведомлений - Добавлены Notification и NotificationModel - Добавлены DDL-изменения таблицы Notification и индексы - Добавлены INotificationService и NotificationService - Расширены IUserRepository и IToDoRepository методами для нотификаций - Реализованы NotificationBackgroundTask, DeadlineBackgroundTask и TodayBackgroundTask - Добавлена интеграция нотификаций и фоновых задач в Program.cs
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: добавить механизм фоновых задач и автосброс сценариев по таймауту - Добавлены инфраструктурные компоненты фоновых задач: IBackgroundTask, BackgroundTaskRunner, базовый BackgroundTask - Добавлен ResetScenarioBackgroundTask с периодическим запуском (раз в час) - Реализован автосброс просроченных сценариев через resetScenarioTimeout и уведомление пользователя - В уведомлении после автосброса используется post-registration клавиатура (/addtask, /show, /report) - ScenarioContext расширен полем CreatedAt (UTC при создании контекста) - IScenarioContextRepository расширен методом GetContexts(CancellationToken) - InMemoryScenarioContextRepository реализует snapshot-выгрузку всех активных контекстов - Program.cs интегрирован с BackgroundTaskRunner: регистрация задачи, запуск до StartReceiving, остановка до CancelAsync
feat: подключение PostgreSQL через linq2db и миграция репозиториев на SQL - Добавлены пакеты linq2db, linq2db.PostgreSQL и Npgsql - Созданы DB-модели ToDoUserModel, ToDoListModel, ToDoItemModel с атрибутами [Table]/[Column]/[PrimaryKey]/[Association] - Добавлены ToDoDataContext и IDataContextFactory<ToDoDataContext> с реализацией DataContextFactory - Реализован ModelMapper для двустороннего маппинга domain <-> DB model - Реализованы SqlUserRepository, SqlToDoListRepository, SqlToDoRepository (async + eager loading через LoadWith) - Переключен DI в Program.cs с File*Repository на Sql*Repository - Добавлена обязательная env-переменная SMART_MENU_DB_CONNECTION_STRING для строки подключения - Добавлен COMMENT.md с кратким обоснованием архитектурного решения