# DataRush

Инновационный сервис для проведения соревнований по анализу данных

## Запуск

Склонируйте репозиторий и пропишите.

```bash
docker compose up
```

## Важные эндпоинты

* `/` - интерфейс
* `/api/v1/docs` - swagger-ui документация
* `/admin/` - админка
* `/admin/grafana` - Grafana
* `/docs` - обучающие материалы по анализу данных

После запуска по методу выше создается пользователь в админке (`/admin/`) с данными ниже:

* `admin` - логин
* `prooooooood` - пароль

Данные для Grafana:

* `admin` - логин
* `proooooood` - пароль

## Как устроен проект

В проекте используются 3 основных модуля: backend, frontend и checker

1. `backend` представляет собой приложение, написанное на Django с применением [Django Ninja](https://django-ninja.dev/), который позволяет быстро и легко создавать Restful API.

    Сам бекенд состоит из 2-х основных компонентов: приложений (где хранятся модели, тесты и настройки админ-панели) и основных колбеков (где хранятся схемы OpenAPI и сами ручки)

    Решения на проверку отсылаются через `celery` для асинхронного взаимодействия.

2. `frontend` является React приложением, которое запускается через Vite. В нем также используется TypeScript для более строгой типизации. Структура приложения является стандартной для подобного вида проектов: есть отдельная папка для компонентов, страниц, стилей, работы с API.

3. `checker` - микросервис на FastAPI, созданный для безопасного асинхронного запуска посылок пользователей.

    Данные в этот сервис отсылаются по специальной ручке `/execute`.

    Проверка заданий осуществляется через запуск кода пользователя через Docker контейнер, на который выдаются следующие ресурсы:

* 50% одного ядра
* 100 МБ ОЗУ

    Решению доступны следующие библиотеки для работы с данными:

    ```python
    pandas==2.2.3
    numpy==2.2.3
    matplotlib==3.10.1
    scipy==1.15.2
    scikit-learn==1.6.1
    seaborn==0.13.2
    statsmodels==0.14.4
    ```

    Контейнеру дается 1 минута на выполнение кода, потом - контейнер удаляется.

## Тесты

Написаны unit-тесты (на базе Django TestCase) и E2E (Postman коллекция). Они покрывают flow регистрации, просмотра и участия в соревновании.

Unit-тесты находятся в соответствующих приложениях, которые располагаются по пути `services/backend/apps`

Postman коллекция, c E2E тестами: [tests/postman_collection.json](./tests/postman_collection.json)

Запуск Postman коллекции:

![postman collection run](./assets/gif/postman_collection_run.gif)

Покрытие тестами бекенда данного приложения:

![backend tests coverage](./assets/img/backend_coverage.png)
