FastAPI-проект для управления студентами и группами. Реализованы все эндпоинты из задания. База данных PostgreSQL в Docker. Слоистая архитектура: API → Services → Repositories → Models.
- Python 3.11+
- Docker и Docker Compose
- Библиотеки из
requirements.txt
# 1. Создать .env файл
cp .env.example .env
# 2. Запустить приложение
docker-compose up --build
# 3. Открыть документацию
# http://localhost:8000/docsОстановка:
docker-compose down -vБазовый URL: /api/v1
POST /students— Создать студентаGET /students— Список всех студентовGET /students/{id}— Получить студента по IDDELETE /students/{id}— Удалить студента
POST /groups— Создать группуGET /groups— Список всех группGET /groups/{id}— Получить группу по IDDELETE /groups/{id}— Удалить группуGET /groups/{id}/students— Студенты группыPOST /groups/add-student— Добавить студента в группуPOST /groups/remove-student— Удалить студента из группыPOST /groups/transfer-student— Перевести студента между группами
students-api/
├── src/
│ ├── api/routers/ # API эндпоинты
│ │ ├── students.py
│ │ └── groups.py
│ ├── services/ # Бизнес-логика
│ ├── repositories/ # Работа с БД
│ ├── schemas/ # Pydantic схемы
│ ├── models/ # ORM модели
│ ├── database/ # Настройка БД
│ └── config.py # Конфигурация
├── main.py # Точка входа
├── docker-compose.yml # Docker Compose
├── Dockerfile
├── requirements.txt
└── .env.example
curl -X POST "http://localhost:8000/api/v1/students" \
-H "Content-Type: application/json" \
-d '{
"first_name": "Иван",
"last_name": "Иванов",
"email": "ivan@example.com"
}'curl -X POST "http://localhost:8000/api/v1/groups" \
-H "Content-Type: application/json" \
-d '{
"name": "Группа 101",
"description": "Первая группа"
}'curl -X POST "http://localhost:8000/api/v1/groups/add-student" \
-H "Content-Type: application/json" \
-d '{
"student_id": 1,
"group_id": 1
}'curl -X POST "http://localhost:8000/api/v1/groups/transfer-student" \
-H "Content-Type: application/json" \
-d '{
"student_id": 1,
"from_group_id": 1,
"to_group_id": 2
}'POSTGRES_USER=student_user
POSTGRES_PASSWORD=student_password
POSTGRES_DB=students_db
POSTGRES_HOST=localhost
POSTGRES_PORT=5432- FastAPI 0.115.5 — веб-фреймворк
- SQLAlchemy 2.0.36 — ORM
- PostgreSQL 15 — база данных
- Pydantic 2.10.3 — валидация данных
- asyncpg 0.30.0 — асинхронный драйвер PostgreSQL
- Docker — контейнеризация
Откройте Swagger UI для интерактивного тестирования:
http://localhost:8000/docs
students — студенты
- id, first_name, last_name, email (unique)
groups — группы
- id, name (unique), description
student_group_association — связь M2M
- student_id, group_id
┌─────────────┐
│ API Layer │ ← Роутеры (students.py, groups.py)
├─────────────┤
│ Service │ ← Бизнес-логика
├─────────────┤
│ Repository │ ← Работа с БД
├─────────────┤
│ Models │ ← ORM модели SQLAlchemy
└─────────────┘
База данных не подключается:
docker-compose down -v
docker-compose up --buildПроверить логи:
docker-compose logs app
docker-compose logs dbПодключиться к БД:
docker exec -it students_db psql -U student_user -d students_db