Update Pulse notifications: clarify reminder logic

This commit is contained in:
Cosmo
2026-02-06 11:48:25 +00:00
parent 98b4318254
commit 432b1f0314

View File

@@ -4,12 +4,12 @@
### Функционал ### Функционал
- При `/start` бот отправляет пользователю его `chat_id` - При `/start` бот отправляет пользователю его `chat_id`
- Пользователь копирует этот ID и вставляет в профиль на сайте - Пользователь копирует ID и вставляет в профиль на сайте
- Бот отправляет уведомления о задачах и привычках - Бот отправляет уведомления о задачах и привычках
### Реализация ### Реализация
- Часть homelab-api (отдельный goroutine) - Часть homelab-api (отдельный goroutine)
- Используем go-telegram-bot-api - go-telegram-bot-api
- Long polling - Long polling
## Профиль пользователя ## Профиль пользователя
@@ -18,36 +18,70 @@
```sql ```sql
ALTER TABLE users ADD COLUMN telegram_chat_id BIGINT; ALTER TABLE users ADD COLUMN telegram_chat_id BIGINT;
ALTER TABLE users ADD COLUMN notifications_enabled BOOLEAN DEFAULT true; ALTER TABLE users ADD COLUMN notifications_enabled BOOLEAN DEFAULT true;
ALTER TABLE users ADD COLUMN morning_reminder_time TIME DEFAULT '09:00';
ALTER TABLE users ADD COLUMN evening_reminder_time TIME DEFAULT '18:00';
ALTER TABLE users ADD COLUMN timezone VARCHAR(50) DEFAULT 'Europe/Moscow'; ALTER TABLE users ADD COLUMN timezone VARCHAR(50) DEFAULT 'Europe/Moscow';
``` ```
### API endpoints ### API endpoints
- `GET /profile` — получить профиль - `GET /profile` — получить профиль
- `PUT /profile` — обновить профиль - `PUT /profile` — обновить профиль (telegram_chat_id, notifications_enabled, timezone)
## Напоминания ### UI
- Страница /settings или /profile
- Поля: telegram chat ID, вкл/выкл уведомления, часовой пояс
### Задачи (Tasks) ## Логика уведомлений
- **Утром (9:00)**: список задач на сегодня
- **Вечером (18:00)**: невыполненные задачи
### Привычки (Habits) ### Утреннее уведомление (9:00)
- **Утром**: какие привычки нужно выполнить сегодня - Список **задач на сегодня** (due_date <= today, не выполнены)
- **Вечером**: невыполненные привычки - Отправляется один раз утром
### Scheduler ### Индивидуальные напоминания
- `robfig/cron` в Go Для **каждой задачи** и **каждой привычки** можно установить время напоминания.
- Проверка каждую минуту, отправка по времени пользователя
**Логика:**
- Если задача/привычка НЕ выполнена к указанному времени → отправить уведомление
- Пример: привычка "гитара" выполнять в 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 ## TODO
- [ ] Создать Telegram бота (@BotFather) - [ ] Создать Telegram бота (@BotFather) → получить токен
- [ ] Миграция БД - [ ] Миграция БД: поля в users, tasks, habits
- [ ] API: /profile - [ ] API: GET/PUT /profile
- [ ] Telegram bot handler - [ ] API: Telegram bot handler (long polling)
- [ ] Scheduler - [ ] Backend: scheduler с robfig/cron
- [ ] UI: страница профиля/настроек - [ ] UI: страница настроек профиля
- [ ] UI: поле reminder_time в формах задач и привычек
--- ---
*Создано: 2026-02-06* *Создано: 2026-02-06*
*Обновлено: 2026-02-06*