231 lines
6.2 KiB
Markdown
231 lines
6.2 KiB
Markdown
# ⚽ Match Management & vMix Integration System
|
||
|
||
Полноценная система управления футбольными матчами с live-обновлением,
|
||
парсингом данных и интеграцией с vMix.
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 📌 Описание
|
||
|
||
Проект состоит из нескольких ключевых частей:
|
||
|
||
- FastAPI сервер (админка + API)
|
||
- Scheduler (live-обновления матчей)
|
||
- Парсеры (игры, расписание, таблица)
|
||
- PostgreSQL база данных
|
||
- WebSocket сервер для vMix
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 🧱 Архитектура системы
|
||
|
||
┌──────────────┐
|
||
│ Scheduler │
|
||
│ │
|
||
│ matches_loop │
|
||
│ standings │
|
||
└──────┬───────┘
|
||
│
|
||
┌──────────────┼──────────────┐
|
||
│ │ │
|
||
▼ ▼ ▼
|
||
live_match_worker parser_game parser_standings
|
||
│
|
||
▼
|
||
Database
|
||
│
|
||
▼
|
||
FastAPI
|
||
│
|
||
▼
|
||
vMix
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 🗄 Структура базы данных
|
||
|
||
## Таблица: matches
|
||
|
||
Поле Тип Описание
|
||
------------- ----------- ----------------------
|
||
id int ID матча
|
||
external_id text ID матча на сайте
|
||
match_date timestamp дата и время
|
||
status text статус матча
|
||
home_score int счет хозяев
|
||
away_score int счет гостей
|
||
updated_at timestamp последнее обновление
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
## Таблица: standings
|
||
|
||
Поле Тип Описание
|
||
---------- ----- ----------
|
||
team_id int команда
|
||
position int позиция
|
||
points int очки
|
||
played int сыграно
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
## Таблица: match_lineup_players
|
||
|
||
- составы команд
|
||
- старт + запас
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
## Таблица: match_events
|
||
|
||
- события матча (голы, карточки и т.д.)
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 🔄 Основные процессы
|
||
|
||
## 1. Scheduler
|
||
|
||
Работает как отдельный процесс:
|
||
|
||
### Каждую минуту:
|
||
|
||
- ищет матчи на сегодня
|
||
- запускает worker за 1 минуту до начала
|
||
|
||
### Worker:
|
||
|
||
- раз в минуту:
|
||
- парсит сайт
|
||
- обновляет счет и статус
|
||
- останавливается при finished
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
## 2. Обновление турнирной таблицы
|
||
|
||
- вызывается `parser_standings`
|
||
- обновляет standings в БД
|
||
- запускается раз в минуту
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
## 3. FastAPI
|
||
|
||
Обеспечивает:
|
||
|
||
- админку
|
||
- API для vMix
|
||
- WebSocket соединения
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 📡 API Endpoints
|
||
|
||
## Основные
|
||
|
||
### Матчи
|
||
|
||
- GET /admin/matches
|
||
- GET /admin/session/{session_token}
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
### vMix
|
||
|
||
- GET /vmix/session/{session_token}/info
|
||
- GET /vmix/session/{session_token}/standings
|
||
- GET /vmix/session/{session_token}/schedule
|
||
- GET /vmix/session/{session_token}/scoreboard
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
### WebSocket
|
||
|
||
/ws/vmix-client
|
||
|
||
Функции: - регистрация клиентов - heartbeat - отправка команд
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# ⚙️ Запуск проекта
|
||
|
||
## 1. Установка
|
||
|
||
pip install -r requirements.txt
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
## 2. Настройка БД
|
||
|
||
Отредактировать:
|
||
|
||
db.py
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
## 3. Запуск
|
||
|
||
### API
|
||
|
||
uvicorn app:app --reload
|
||
|
||
### Scheduler
|
||
|
||
python scheduler.py
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# ❗ ВАЖНО
|
||
|
||
Scheduler должен запускаться отдельно.
|
||
|
||
НЕЛЬЗЯ:
|
||
|
||
run_scheduler()
|
||
|
||
внутри FastAPI.
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 🔧 Что нужно реализовать
|
||
|
||
## fetch_match_live_data()
|
||
|
||
def fetch_match_live_data(match_row):
|
||
return {
|
||
"status": "live",
|
||
"home_score": 1,
|
||
"away_score": 0
|
||
}
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 🚀 Рекомендации
|
||
|
||
- запускать scheduler отдельно
|
||
- использовать 1 worker для API
|
||
- добавить логирование
|
||
- обрабатывать ошибки парсинга
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 📌 Dev режим
|
||
|
||
uvicorn app:app --reload
|
||
python scheduler.py
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 🧠 Production
|
||
|
||
- API отдельно
|
||
- Scheduler отдельно
|
||
- supervisor / systemd
|
||
|
||
------------------------------------------------------------------------
|
||
|
||
# 📬 Контакты
|
||
|
||
Для доработок и улучшений --- пиши 👍
|