Микросервисы реализованы на базе Python 3.12 + FastAPI + asyncpg + PostgreSQL.
| Сервис | Порт | БД |
|---|---|---|
catalog-service |
3001 | catalog_db (PostgreSQL, порт 5433) |
orders-service |
3002 | orders_db (PostgreSQL, порт 5434) |
Интерактивная документация (Swagger UI) доступна сразу после запуска:
cd smartlight
docker compose up --build -d
# Проверить статус
docker compose ps
# Логи конкретного сервиса
docker compose logs -f catalog-service
docker compose logs -f orders-service- Python 3.12+
- PostgreSQL 15+
- pip
cd catalog-service
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
createdb catalog_db
psql catalog_db < migrations/001_init.sql
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/catalog_db \
uvicorn app.main:app --port 3001 --reloadcd orders-service
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
createdb orders_db
psql orders_db < migrations/001_init.sql
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/orders_db \
CATALOG_SERVICE_URL=http://localhost:3001 \
uvicorn app.main:app --port 3002 --reloadsmartlight/
├── docker-compose.yml
├── shared/
│ ├── __init__.py
│ └── utils.py
│
├── catalog-service/
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── migrations/
│ │ └── 001_init.sql
│ └── app/
│ ├── main.py
│ ├── database.py
│ ├── enums.py
│ ├── schemas.py
│ ├── constants.py
│ ├── core/
│ │ └── config.py
│ └── routers/
│ ├── __init__.py
│ ├── categories.py
│ └── products.py
│
└── orders-service/
├── Dockerfile
├── requirements.txt
├── migrations/
│ └── 001_init.sql
└── app/
├── main.py
├── database.py
├── enums.py
├── schemas.py
├── constants.py
├── core/
│ └── config.py
└── routers/
├── __init__.py
├── cart.py
└── orders.py
| Метод | URL | Описание |
|---|---|---|
| GET | /api/v1/categories |
Список категорий |
| GET | /api/v1/products |
Каталог (?category=led&page=1&limit=12&status=active) |
| GET | /api/v1/products/{sku} |
Карточка товара с атрибутами и изображениями |
| POST | /api/v1/products |
Создать товар (admin) |
| PATCH | /api/v1/products/{sku} |
Частично обновить товар (admin) |
| DELETE | /api/v1/products/{sku} |
Удалить товар (admin) |
Корзина привязана к заголовку X-Session-Id (любой UUID).
| Метод | URL | Описание |
|---|---|---|
| GET | /api/v1/cart |
Содержимое корзины |
| POST | /api/v1/cart/items |
Добавить товар { "sku": "...", "quantity": 2 } |
| PATCH | /api/v1/cart/items/{item_id} |
Изменить количество { "quantity": 3 } |
| DELETE | /api/v1/cart/items/{item_id} |
Удалить позицию |
| POST | /api/v1/orders |
Оформить заказ |
| GET | /api/v1/orders |
История заказов (?page=1&limit=10) |
| GET | /api/v1/orders/{order_number} |
Детали заказа |