Введение
Некоторое время назад у меня возникла необходимость автоматизировать проведение спортивных соревнований по единоборствам в ILMMA, в результате получилось данное web приложение.
Ниже в посте я хочу описать процесс его создания и с какими подводными камнями я столкнулся в процессе проектирования.
Обследование предметной области
Итак, разработка началась с обследования предмета автоматизации а именно как это все происходит.
Первая стадия любого турнира это сбор заявок от участников. И тут возникла первая сложность, как их собирать централизовано, так как каналов поступления информации очень много: соц. сети, email, звонки и т.д. Исходя из этого было принято решение сделать личный кабинет для тренера, который мог бы делать групповую заявку на турнир своих спортсменов, но после нескольких турниров я понял что это не работает.
Было принято решение сделать личный кабинет каждого спортсмена, из которого он мог бы производить регистрацию на интересующий его турнир.
Когда кабинет был реализован, нужно было выяснить как именно спортсмен заявляется на турнир, для того чтобы это понять необходимо определиться что же такое турнир. Отбросив лишнее можно определить турнир как сборник весовых категорий в которые непосредственно заявляются спортсмены.
Полностью процесс заявки на турнир выглядит так:

Из выше описанного следует что нужно также управление весовыми категориями внутри турнира, и это было реализовано следующим шагом. Теперь спортсмен при заявке выбирал категорию куда заявляется.
Следующим шагом было автоматизировать формирование пар, и тут возникала следующая сложность: в зависимости от категории пары могут формировать олимпийскую сетку (при нужном кол-ве участников) или составлять просто набор одиночных пар.
После того как генератор пар был сделан, оказалось, что иногда автоматом сформированные пары нужно править вручную (так как иногда данный процесс слабо формализуем), поэтому следующим шагом эта возможность была добавлена.
Когда турнир завершается всем интересно посмотреть результаты общекомандного зачета и распределение результатов между клубами, поэтому заключительным шагом было добавление статистики в турнир и профиль спортсмена.
Процесс проведения турнира выглядит так:

Технологический стек
В процессе разработки данной системы стек менялся несколько раз, сначала это был Python + Django c серверным рендерингом шаблонов и JQuery для анимации. Затем я в результате определенных решений по интерфейсу было принято решение уйти на SPA и в качестве фреймворка взять AngularJS.
Затем устав отлавливать баги от динамической типизации бэкэнд был переведен на Golang, а со временем при обновлении интерфейса было принято решение уйти с AngulaJS на VueJS.
В качестве хранилища используется PostgreSQL.
В качестве архитектурного шаблона был выбран MVC.
Разработка велась месячными итерациями, с применением рекомендаций из ГОСТ 19.
Заключение
В конечном счете получилась гибкая система, которую с разумным кол-вом доработок можно использовать в смежных видах спорта.
comments powered by Disqus