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