No description
| backend | ||
| frontend | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
| requirements.txt | ||
Сервис расписания для сына
Сервис для управления и отображения расписания занятий с поддержкой веб-интерфейса и Telegram-бота.
Компоненты
- Backend (FastAPI) - API для работы с расписанием
- Публичная веб-страница - отображение расписания на сегодня/завтра (для планшета)
- Веб-админка - управление расписанием на неделю
- Telegram-бот - просмотр и редактирование расписания, напоминания
Установка и запуск
Требования
- Docker и Docker Compose
- Telegram Bot Token (получить у @BotFather)
Настройка
- Скопируйте файл
.env.exampleв.envи укажите токен Telegram-бота:
cp .env.example .env
# Отредактируйте .env и замените your_telegram_bot_token_here на ваш реальный токен
Токен можно получить у @BotFather в Telegram.
- Запустите сервис:
docker compose up -d
Сервис будет доступен на:
- Публичная страница: http://localhost:8123/
- Админка: http://localhost:8123/admin
- API: http://localhost:8123/api
Использование Telegram-бота
- Найдите вашего бота в Telegram
- Отправьте команду
/start - Используйте кнопки для просмотра и добавления записей
Структура данных
Task (Задача)
- Привязка только к дате, без времени
- Может повторяться еженедельно
- Отображается выше событий со временем
Event (Занятие)
- Привязка к дате, времени начала и длительности
- Пересечения по времени запрещены
- Имеет напоминания в Telegram (за 5 минут до начала)
API
GET /api/schedule?from=YYYY-MM-DD&to=YYYY-MM-DD
Получить расписание в диапазоне дат
POST /api/events?kind=task
Создать задачу
{
"date": "2024-12-02",
"title": "Название задачи",
"repeat_weekly": false,
"copy_to_weekdays": [2, 3, 4]
}
POST /api/events?kind=event
Создать занятие
{
"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. Для резервного копирования:
# Создать 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 минут до начала события