# Архитектура хоккейных данных v20 ## Переиспользуем существующие модули Без дублирования продолжают использоваться: - UI Builder и Runtime; - хоккейная панель удалений; - общий таймерный движок; - триггеры и горячие клавиши; - публикация черновика; - PIN-вход в конструктор; - CSS-подсказки; - подготовленные JSON endpoints для vMix. ## Серверные модули хоккея ### `hockey_data/client.py` Авторизованные XML-запросы Stat2TV. Поддерживаются Basic, Digest и автоматический выбор. ### `hockey_data/parser.py` Парсер списка турниров `tournaments.xml`. ### `hockey_data/match_parser.py` Парсер расписания: ```text {tournament_id}/schedule-{tournament_id}-live.xml ``` Один механизм поддерживает регулярный чемпионат и плей-офф. Поле `sscore` сохраняется как счёт серии. ### `hockey_data/database.py` и `models.py` Проект работает только с удалённой PostgreSQL-базой, заданной через HOCKEY_DATABASE_URL. В базе разделены турниры, матчи, команды, игроки, составы, события и операторские сессии; локальная SQLite не используется. ### `hockey_data/localization.py` Хранит RU/EN, выбирает язык веб-панели и резервное значение. ### `hockey_data/service.py` Отвечает за: - синхронизацию турниров и расписания; - нормализацию XML; - выбор даты и матча; - правило «один пользователь — один активный матч»; - облегчённое секундное обновление выбранного матча; - остановку обновления после завершения; - формирование данных и ссылок vMix. ### `hockey_data/auth_bridge.py` Точка подключения существующей авторизации ЖФЛ. Для окончательного соединения нужен код/схема текущих таблиц пользователей и сессий ЖФЛ. ## Текущий поток данных ```text Stat2TV tournaments.xml ↓ hockey_tournaments ↓ выбор турнира ↓ schedule-{id}-live.xml ↓ hockey_games ↓ выбор матча ↓ hockey_operator_sessions ↓ UI Builder + vMix JSON ``` ## Следующие XML-слои После расписания требуется подключить: 1. карточку выбранного матча; 2. команды и составы; 3. игровые события; 4. удаления; 5. подробную статистику. Когда будет найден детальный live-endpoint одного матча, секундное обновление можно перенести с полного расписания на компактный матчевый XML.