scheduleSon/README.md

112 lines
3.8 KiB
Markdown
Raw Permalink 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.

# Сервис расписания для сына
Сервис для управления и отображения расписания занятий с поддержкой веб-интерфейса и 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 минут до начала события