MVP Платформа для автоматизации процессов ручного управления соревнованиями ФСП
- Frontend: HTML, CSS, JS, Bootstrap
- Backend: Python, Flask, SQLalchemy
- СУБД: PostgreSQL, Alembic (для миграции)
PostgreSQL была выбрана по ряду причин, а именно:
- Поддержка ACID-транзакций для надежности операций
- Возможность использования JSONB для гибкого хранения дополнительных атрибутов
- Индексы GIN/GIST для ускорения поиска по текстовым полям
-
Сценарий 1: Создание открытого соревнования: Представитель ФСП создает соревнование с обязательными атрибутами: название, тип (открытое), дисциплина, даты (регистрация/проведение), описание, ограничения (регион, максимальное количество спортсменов). Публикует соревнование, после чего оно отображается в общей ленте и в списке активных событий.
-
Сценарий 2: Регистрация команды в полном составе: Капитан команды находит открытое для регистрации соревнование через фильтры (дата, формат, дисциплина, регион). Внутри соревнования создает команду, и вводит в поля участников их идентификационные номера (или предложите свой альтернативный вариант). В личном кабинете выбранных спортсменов, появляется приглашение взаимодействуя с которым они подтверждают присоединение. После чего система автоматически подставляет необходимые данные в информацию об спортсмене в форму заявки на соревнование. После заполнения всех необходимых данных капитан отправляет на модерацию командную заявку на соревнование. Система присваивает статус «На модерации». Организатор подтверждает или отклоняет заявку
-
Сценарий 3: Регистрация команды с частичным составом: Капитан создает команду на соревнование, оставляет свободные места и устанавливает статус «Требуются спортсмены». Указывает требуемые роли в описании. Команда отображается в списке формирующихся составов на странице соревнования.
-
Сценарий 4: Присоединение к команде: Спортсмен выбирает открытое соревнование, просматривает списки утвержденных и формирующихся команд. Отправляет запрос капитану. Капитан принимает или отклоняет заявку. Утвержденный спортсмен добавляется в команду
-
Сценарий 5: Создание федерального соревнования с заявками от регионов: Всероссийская Федерация спортивного программирования создает федеральное соревнование. Региональные представители подают заявки от своих регионов через раздел федеральных событий, заполняя уникальные идентификаторы (или предложите свой альтернативный вариант) ФСП проверяет и утверждает заявки, после чего команды включаются в список допущенных к участию.
-
Сценарий 6: Регистрация на региональное соревнований: Региональный представитель создает соревнование с форматом «Региональное». Система автоматически назначает регион (на основе данных представителя). Также должна быть возможность создать межрегиональное соревнование (например между Санкт-Петербургом и Москвой). Спортсмены из других регионов не могут подать заявку — система отклоняет их автоматически. Спортсмены из указанного региона регистрируются без ограничений.
-
Сценарий 7: Индивидуальная регистрация: Спортсмен просматривает информацию о текущих и завершенных соревнованиях. Выбирает событие с индивидуальным зачетом, заполняет необходимые данные и подает заявку.
-
Сценарий 8: Подведение итогов и обновление портфолио: После завершения соревнования организатор распределяет места и вносит баллы спортсменов. Система автоматически обновляет профили спортсменов и публикует результаты на странице события.
-
Сценарий 9: Личный профиль: Спортсмен просматривает и редактирует данные личного профиля. Просматривает историю участия в соревнованиях, включая достижения и результаты. Подтверждает своё участие в команде на соревнованиях.
-
Сценарий 10: Аналитика достижений и соревнований: Представитель ФСП просматривает и анализирует данные о текущих и прошедших соревнованиях, а также о зарегистрированных спортсменах, используя фильтры по дисциплине, региону, дате и статусу. Имеется возможность выгрузки данных в отдельном файле для работы.
- Пользовательский интерфейс и серверная часть будут взаимодействовать по протоколу REST API (HTTPS)
- Серверная часть (Flask) будет взаимодействовать с PostgreSQL через запросы SQLalchemy
Текстовое описание связей в базе данных:
-
users и regions (1:N):
- users.region_id (FK) → regions.region_id (PK).
- Один регион может быть у многих пользователей.
-
competitions и disciplines (1:N)
- competitions.discipline_id (FK) → disciplines.discipline_id (PK).
- Одна дисциплина может быть у многих соревнований.
-
competitions и regions (1:N)
- competitions.region_id (FK) → regions.region_id (PK).
- Только для региональных соревнований.
-
teams и competitions (1:N)
- teams.competition_id (FK) → competitions.competition_id (PK).
- Одно соревнование может включать множество команд.
-
teams и team_members (1:N)
- team_members.team_id (FK) → teams.team_id (PK).
- Одна команда может иметь много участников.
-
team_members и users (N:M)
- team_members.user_id (FK) → users.user_id (PK).
- Таблица team_members является промежуточной для связи многие-ко-многим.
-
applications и competitions (1:N)
- applications.competition_id (FK) → competitions.competition_id (PK).
- Одно соревнование может иметь множество заявок.
-
applications и users (1:1 или N:1)
- applications.user_id (FK) → users.user_id (PK).
- Индивидуальные заявки: один пользователь → одна заявка.
-
applications и teams (1:1 или N:1)
- applications.team_id (FK) → teams.team_id (PK).
- Командные заявки: одна команда → одна заявка.
-
results и competitions (1:N)
- results.competition_id (FK) → competitions.competition_id (PK).
- Одно соревнование может иметь множество результатов.
-
results и users/teams (1:1 или N:1)
- results.user_id (FK) → users.user_id (PK) — для индивидуальных результатов.
- results.team_id (FK) → teams.team_id (PK) — для командных результатов.
-
achievements и results (1:1)
- achievements.result_id (FK) → results.result_id (PK).
- Одно достижение соответствует одному результату.
-
achievements и users (1:N)
- achievements.user_id (FK) → users.user_id (PK).
- Один пользователь может иметь множество достижений.

