Initial commit: Schedule service for son
This commit is contained in:
commit
af2ea7be06
19 changed files with 2270 additions and 0 deletions
112
README.md
Normal file
112
README.md
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
# Сервис расписания для сына
|
||||
|
||||
Сервис для управления и отображения расписания занятий с поддержкой веб-интерфейса и 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 минут до начала события
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue