Skip to content
This repository has been archived by the owner on Dec 15, 2024. It is now read-only.

Solution for the Qualifying Round of Championship of Russia

Notifications You must be signed in to change notification settings

one-zero-eight/hackathon-calendars

Repository files navigation

Единый Календарь Спорта

Развернутый проект: https://hack.innohassle.ru

Important

Для работы уведомлений необходимо разрешить их в браузере.

Описание

  • Наше решение - система поиска и просмотра спортивных мероприятий из Единого календарного плана Минспорта России.
  • Целевая аудитория — спортсмены и тренеры, и другие люди, интересующиеся спортом, которые хотят узнавать о предстоящих соревнованиях по интересующему их видам спорта / дисциплинам.
  • Интерфейс выполнен в виде веб-приложения, где пользователь может использовать поле поиска или фильтры для поиска мероприятий.
  • Также есть возможность просмотра детальной информации о мероприятии или об отдельном виде спорта.
  • В качестве фронтенда используется фреймворк React с использованием библиотеки shadcn/ui.
  • В качестве бэкенда используется сервер на FastAPI, который обращается к базе данных MongoDB для выдачи данных о мероприятиях, а также обеспечивает аутентификацию пользователей.
  • На сервере предварительно загружаются данные из парсера, который берёт данные из pdf-файлов, размещенных на сайте Минспорта России.
  • Пользователь также может подписаться на получение уведомлений о предстоящих мероприятиях по интересующему его виду спорта или по конкретному мероприятию, разрешив уведомления в браузере.

Диаграмма архитектуры

Используется база данных MongoDB для легкого горизонтального масштабирования.

Сервер FastAPI запускается через менеджер процессов Gunicorn, который способен запускать несколько воркеров для обработки запросов, что позволяет обрабатывать большое количество запросов.

Модульная архитектура приложения позволяет легко добавлять новый функционал и улучшать существующий.

Architecture

(1) Парсер парсит PDF-файлы с сайта Минспорта, нормализует данные и (2) загружает в базу данных. Пользователи, используя веб-интерфейс (3), выбирают интересующие их фильтры. Браузер делает запрос к API (4), бэкенд получает данные из базы данных, применяя фильтры и сортировки (5) и возвращает результаты пользователю.

Скриншоты веб-интерфейса

Screenshot0 Screenshot1 Screenshot2

Инструкция по локальному запуску

Протестировано на Ubuntu 22.04 с архитектурой amd64.

  1. Установить Docker и Docker Compose последней версии.
  2. Склонировать этот репозиторий.
    git clone https://github.com/hackathonsrus/pp_50040_pfo_ta_onezeroeight_69
    
  3. Перейти в папку с проектом.
    cd pp_50040_pfo_ta_onezeroeight_69
    
  4. Запустить базу данных.
    docker compose up -d db
    
  5. Загрузить дамп базы данных.
    docker compose exec db sh -c 'mongorestore "mongodb://$MONGO_INITDB_ROOT_USERNAME:$MONGO_INITDB_ROOT_PASSWORD@localhost:27017/db?authSource=admin" --drop /dump/db'
    
  6. Запустить проект.
    docker compose up -d --build
    
  7. Зайти на http://localhost:8000 в браузере.

Note

При запуске на localhost без https может не работать отправка уведомлений в браузеры.