# Pulse — Система уведомлений ## Telegram бот ### Функционал - При `/start` бот отправляет пользователю его `chat_id` - Пользователь копирует ID и вставляет в профиль на сайте - Бот отправляет уведомления о задачах и привычках ### Реализация - Часть homelab-api (отдельный goroutine) - go-telegram-bot-api - Long polling ## Профиль пользователя ### Новые поля в БД (таблица users) ```sql ALTER TABLE users ADD COLUMN telegram_chat_id BIGINT; ALTER TABLE users ADD COLUMN notifications_enabled BOOLEAN DEFAULT true; ALTER TABLE users ADD COLUMN timezone VARCHAR(50) DEFAULT 'Europe/Moscow'; ``` ### API endpoints - `GET /profile` — получить профиль - `PUT /profile` — обновить профиль (telegram_chat_id, notifications_enabled, timezone) ### UI - Страница /settings или /profile - Поля: telegram chat ID, вкл/выкл уведомления, часовой пояс ## Логика уведомлений ### Утреннее уведомление (9:00) - Список **задач на сегодня** (due_date <= today, не выполнены) - Отправляется один раз утром ### Индивидуальные напоминания Для **каждой задачи** и **каждой привычки** можно установить время напоминания. **Логика:** - Если задача/привычка НЕ выполнена к указанному времени → отправить уведомление - Пример: привычка "гитара" выполнять в 18:00, напоминание в 17:00 - Каждый день в 17:00 проверяем: выполнена ли сегодня? - Если нет → отправляем "Не забудь: гитара 🎸" ### Глобальный выключатель - Если `notifications_enabled = false` в профиле → никакие уведомления не отправляются - Если `telegram_chat_id` не заполнен → уведомления не отправляются ## Новые поля в БД ### tasks ```sql ALTER TABLE tasks ADD COLUMN reminder_time TIME; ``` ### habits ```sql ALTER TABLE habits ADD COLUMN reminder_time TIME; ``` ## Архитектура ### Scheduler (robfig/cron) - Запускается каждую минуту - Для каждого пользователя с notifications_enabled=true и telegram_chat_id: 1. Проверить, нужно ли отправить утреннее уведомление (9:00 по timezone) 2. Найти задачи с reminder_time = текущее время, не выполнены → отправить 3. Найти привычки с reminder_time = текущее время, не выполнены сегодня → отправить ### Telegram Bot - Long polling в отдельной goroutine - Команды: `/start` → отправить chat_id ## TODO - [ ] Создать Telegram бота (@BotFather) → получить токен - [ ] Миграция БД: поля в users, tasks, habits - [ ] API: GET/PUT /profile - [ ] API: Telegram bot handler (long polling) - [ ] Backend: scheduler с robfig/cron - [ ] UI: страница настроек профиля - [ ] UI: поле reminder_time в формах задач и привычек --- *Создано: 2026-02-06* *Обновлено: 2026-02-06*