ПО ЭТОМУ АДРЕСУ ДОСТУПЕН: http://212.19.134.63:8000/docs#/ поднял на ssh сервере
Небольшой backend для интерактивного каталога товаров и корзины.
Сделано на FastAPI + SQLAlchemy + PostgreSQL.
- Список товаров с фильтрацией, сортировкой, поиском и пагинацией
- Детальная карточка товара
- Корзина (добавить, получить, изменить количество, удалить позицию)
- JWT авторизация (регистрация, логин, текущий пользователь)
- Загрузка изображения товара
- Swagger/OpenAPI документация
- Python 3.12
- FastAPI
- SQLAlchemy (async)
- Alembic
- PostgreSQL
- Docker / docker-compose
- Поднимите сервис по докер компосее:
docker-compose up --build2.API будет доступен:
http://localhost:8000- Swagger:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
При старте контейнера API автоматически применяются миграции Alembic.
- Поднимите PostgreSQL локально и проверьте
DATABASE_URLв.env. - Установите зависимости:
pip install -r requirements.txt- Примените миграции:
alembic upgrade head- Запустите приложение:
uvicorn main:app --reloadМинимально необходимые:
DATABASE_URLSECRET_KEY
Остальные:
ALGORITHM(по умолчаниюHS256)ACCESS_TOKEN_EXPIRE_MINUTES(по умолчанию30)CORS_ORIGINS(список origin)POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DB(нужны для docker-compose db сервиса)
Для корзины нужно передавать хотя бы один способ идентификации:
Authorization: Bearer <token>(для авторизованного пользователя)- или
X-Session-ID: <ваш-session-id>(для гостя)
Если не передать ни токен, ни X-Session-ID, API корзины вернет 400.
Подробно: docs/API.md
GET /api/products/GET /api/products/{product_id}/POST /api/products/(нужен Bearer token)POST /api/products/{product_id}/image/(нужен Bearer token)POST /api/cart/GET /api/cart/PUT /api/cart/{item_id}/DELETE /api/cart/{item_id}/POST /api/auth/registerPOST /api/auth/loginGET /api/auth/me
Получить товары:
curl "http://localhost:8000/api/products/?limit=20&offset=0&search=iphone&sort_by=price&sort_order=asc&has_image=true"Добавить товар в корзину как гость:
curl -X POST "http://localhost:8000/api/cart/" \
-H "Content-Type: application/json" \
-H "X-Session-ID: guest-123" \
-d '{"product_id":"11111111-1111-1111-1111-111111111111","quantity":2}'app/
api/ # роутеры
core/ # конфиг, security, зависимости
db/ # сессия и Base
models/ # SQLAlchemy модели
repositories/ # запросы к БД
schemas/ # Pydantic схемы
services/ # бизнес-логика
utils/ # вспомогательные функции
alembic/ # миграции
main.py # точка входа FastAPI
Для ручной проверки API удобно использовать Swagger (/docs) или curl.
pip install -r requirements-dev.txt
pytest -q