No description
Find a file
2026-03-22 12:48:20 +03:00
backend redisign and bug fix 2026-03-22 12:48:20 +03:00
frontend redisign and bug fix 2026-03-22 12:48:20 +03:00
.env.example Initial commit: Schedule service for son 2025-12-30 12:23:42 +03:00
.gitignore Initial commit: Schedule service for son 2025-12-30 12:23:42 +03:00
docker-compose.yml Update timezone from Europe/London to Europe/Moscow across configuration, backend, and frontend files for consistent time handling. 2025-12-30 14:26:14 +03:00
Dockerfile Update timezone from Europe/London to Europe/Moscow across configuration, backend, and frontend files for consistent time handling. 2025-12-30 14:26:14 +03:00
README.md Update timezone from Europe/London to Europe/Moscow across configuration, backend, and frontend files for consistent time handling. 2025-12-30 14:26:14 +03:00
requirements.txt Initial commit: Schedule service for son 2025-12-30 12:23:42 +03:00

Сервис расписания для сына

Сервис для управления и отображения расписания занятий с поддержкой веб-интерфейса и Telegram-бота.

Компоненты

  1. Backend (FastAPI) - API для работы с расписанием
  2. Публичная веб-страница - отображение расписания на сегодня/завтра (для планшета)
  3. Веб-админка - управление расписанием на неделю
  4. Telegram-бот - просмотр и редактирование расписания, напоминания

Установка и запуск

Требования

  • Docker и Docker Compose
  • Telegram Bot Token (получить у @BotFather)

Настройка

  1. Скопируйте файл .env.example в .env и укажите токен Telegram-бота:
cp .env.example .env
# Отредактируйте .env и замените your_telegram_bot_token_here на ваш реальный токен

Токен можно получить у @BotFather в Telegram.

  1. Запустите сервис:
docker compose up -d

Сервис будет доступен на:

Использование 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

Создать задачу

{
  "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/Moscow
  • Неделя начинается с понедельника
  • Дискретность времени: 15 минут (00, 15, 30, 45)
  • Диапазон времени: 08:00-20:00
  • Автообновление публичной страницы: каждые 5 минут
  • Напоминания в Telegram: за 5 минут до начала события