Files
obsidian/Projects/Pulse/Notifications.md

88 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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*