112 lines
3.8 KiB
Markdown
112 lines
3.8 KiB
Markdown
# Сервис расписания для сына
|
||
|
||
Сервис для управления и отображения расписания занятий с поддержкой веб-интерфейса и 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/London
|
||
- Неделя начинается с понедельника
|
||
- Дискретность времени: 15 минут (00, 15, 30, 45)
|
||
- Диапазон времени: 08:00-20:00
|
||
- Автообновление публичной страницы: каждые 5 минут
|
||
- Напоминания в Telegram: за 5 минут до начала события
|
||
|