scheduleSon/README.md

113 lines
3.8 KiB
Markdown
Raw Permalink Normal View History

# Сервис расписания для сына
Сервис для управления и отображения расписания занятий с поддержкой веб-интерфейса и Telegram-бота.
## Компоненты
1. **Backend (FastAPI)** - API для работы с расписанием
2. **Публичная веб-страница** - отображение расписания на сегодня/завтра (для планшета)
3. **Веб-админка** - управление расписанием на неделю
4. **Telegram-бот** - просмотр и редактирование расписания, напоминания
## Установка и запуск
### Требования
- Docker и Docker Compose
- Telegram Bot Token (получить у @BotFather)
### Настройка
1. Скопируйте файл `.env.example` в `.env` и укажите токен Telegram-бота:
```bash
cp .env.example .env
# Отредактируйте .env и замените your_telegram_bot_token_here на ваш реальный токен
```
Токен можно получить у [@BotFather](https://t.me/BotFather) в Telegram.
2. Запустите сервис:
```bash
docker compose up -d
```
Сервис будет доступен на:
- Публичная страница: http://localhost:8123/
- Админка: http://localhost:8123/admin
- API: http://localhost:8123/api
### Использование Telegram-бота
1. Найдите вашего бота в Telegram
2. Отправьте команду `/start`
3. Используйте кнопки для просмотра и добавления записей
## Структура данных
### Task (Задача)
- Привязка только к дате, без времени
- Может повторяться еженедельно
- Отображается выше событий со временем
### Event (Занятие)
- Привязка к дате, времени начала и длительности
- Пересечения по времени запрещены
- Имеет напоминания в Telegram (за 5 минут до начала)
## API
### GET /api/schedule?from=YYYY-MM-DD&to=YYYY-MM-DD
Получить расписание в диапазоне дат
### POST /api/events?kind=task
Создать задачу
```json
{
"date": "2024-12-02",
"title": "Название задачи",
"repeat_weekly": false,
"copy_to_weekdays": [2, 3, 4]
}
```
### POST /api/events?kind=event
Создать занятие
```json
{
"date": "2024-12-02",
"start_time": "14:30",
"duration_min": 60,
"title": "Название занятия"
}
```
### PUT /api/events/{id}
Обновить запись
### DELETE /api/events/{id}?scope=one_date|series
Удалить запись (для weekly tasks можно указать область применения)
## Резервное копирование
База данных хранится в `data/schedule.db`. Для резервного копирования:
```bash
# Создать backup
docker compose exec backend python -c "import shutil; shutil.copy2('/app/data/schedule.db', '/app/data/schedule.db.backup')"
# Восстановить из backup
docker compose exec backend python -c "import shutil; shutil.copy2('/app/data/schedule.db.backup', '/app/data/schedule.db')"
```
## Особенности
- Таймзона: Europe/Moscow
- Неделя начинается с понедельника
- Дискретность времени: 15 минут (00, 15, 30, 45)
- Диапазон времени: 08:00-20:00
- Автообновление публичной страницы: каждые 5 минут
- Напоминания в Telegram: за 5 минут до начала события