# Копируем .env файл
cp .env.example .env# Собираем и запускаем сервисы в фоне
docker-compose up --build -d# Внутри контейнера
docker-compose exec app python3 scripts/migrate.pydocker-compose exec app python3 scripts/seed_db.pyhttp://localhost:8000/docs
docker-compose downAPI для управления оценками студентов. Позволяет загружать данные из CSV, анализировать успеваемость и получать статистику по двойкам.
- Загрузка данных — импорт оценок из CSV-файлов
- Аналитика — получение списков студентов с количеством двоек
- Нормализованная БД — данные разбиты на таблицы
students,groups,marks - Миграции — версионирование схемы БД через SQL-файлы
- Сиды — тестовые данные для быстрой проверки
- FastAPI — асинхронный веб-фреймворк
- asyncpg — асинхронный драйвер PostgreSQL
- Poetry — управление зависимостями
- pytest — тестирование
ecom_test/
├── app/ # Исходный код приложения
│ ├── main.py # Точка входа
│ ├── database.py # Подключение к БД
│ ├── services.py # Бизнес-логика
│ ├── schemas.py # Pydantic-схемы
│ ├── config.py # Конфигурация
│ └── routers/ # API-роуты
│ ├── grades.py
│ └── analysis.py
├── migrations/ # SQL-миграции
│ ├── 0001_initial.sql
│ └── 0002_normalize.sql
├── seeds/ # Тестовые данные
│ └── seeds.sql
├── scripts/ # Утилиты
│ ├── migrate.py # Раннер миграций
│ ├── seed_db.py # Загрузка сидов
│ ├── init_db.py # Инициализация
│ └── run_tests.py # Запуск тестов
├── tests/ # Тесты
│ ├── conftest.py
│ ├── fixtures.py
│ ├── test_upload_errors.py
│ ├── test_database_errors.py
│ └── test_analysis_endpoints.py
├── docker-compose.yml # Docker-оркестрация
├── Dockerfile # Сборка образа
├── pyproject.toml # Зависимости Poetry
└── .env.example # Пример переменных окружения
curl -sSL https://install.python-poetry.org | python3 -# Установка зависимостей
poetry install
# Применение миграций
poetry run python scripts/migrate.py
# Загрузка сидов
poetry run python scripts/seed_db.py
# Запуск сервера
poetry run uvicorn app.main:app --reload# Через скрипт (рекомендуется)
python scripts/run_tests.py
# Или напрямую
poetry run pytest tests/ -v
# В контейнере
docker-compose exec app pytest tests/ -vPOST /upload-grades
Content-Type: multipart/form-data
file: <csv-файл>
GET /students/more-than-3-twos # Студенты с >3 двойками
GET /students/less-than-5-twos # Студенты с <5 двойками
- Миграции применяются через
scripts/migrate.pyи записываются в таблицуschema_migrations migrations/— единственный источник правды для схемы БД- Проект использует
asyncpgбез ORM - Для экспорта
requirements.txt:poetry export -f requirements.txt --without-hashes