88 lines
3.6 KiB
Markdown
88 lines
3.6 KiB
Markdown
# 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*
|