Надежный бэкенд для интернет-магазина с фокусом на микросервисную архитектуру, безопасность (JWT) и производительность (Redis).
- Проект запущен: (Java-приложение, PostgreSQL, Redis, Kafka).
- Соберите JAR:
mvn clean package; - Соберите образы:
docker compose build - Запустите контейнеры:
docker compose up -d.
- База данных инициализирована (Liquibase)
- Postman коллекции импортированы:
ecommerce-api.postman_collection.jsonиecommerce-api-part2.postman_collection.json - Демо: DEMO.md и DEMO-2.md
- Демо-видео: demo-video и demo-video-2
Бэкенд для e-commerce платформы — RESTful API на Spring Boot для онлайн-магазина. Реализованы микросервисы с Feign клиентами, JWT аутентификация, Redis кэширование профилей, PostgreSQL хранение.
- 👤
user-service– микросервис пользователей - 🏪
product-service– каталог товаров - 🛒
cart-service– корзина пользователя - 📦
order-service– заказы и оплата
- Управление пользователями: регистрация, аутентификация.
- Каталог товаров: просмотр, поиск, фильтрация товаров.
- Управление запасами: резервирование товаров при добавлении в корзину, TTL 1 час, автоматическое освобождение.
- Корзина покупок: добавление, удаление, изменение количества товаров.
- Оформление и управление заказами: создание заказа, выбор способа оплаты и доставки, отслеживание статуса.
-
Брокер сообщений: Apache Kafka (событийное взаимодействие)
-
Безопасность: Spring Security + JWT
-
Коммуникация: Feign Clients
-
Тестирование: JUnit, Mockito, Testcontainers, WireMock
| Сервис | URL |
|---|---|
| Prometheus | localhost:9090 |
| Сервис | URL | Логин | Пароль |
|---|---|---|---|
| Grafana | localhost:3000 | admin | admin |
Все эндпоинты защищены JWT, кроме публичных:
POST /api/auth/register | POST /api/auth/login
👤 User Service (http://localhost:8081)
| Метод | Эндпоинт | Описание | Роли |
|---|---|---|---|
POST |
/api/auth/register |
Регистрация пользователя | public |
POST |
/api/auth/login |
Авторизация | public |
GET |
/api/users/profile |
Профиль текущего пользователя | user |
PUT |
/api/users/profile |
Обновить профиль | user |
🏪 Product Service (http://localhost:8082)
| Метод | Эндпоинт | Описание | Роли |
|---|---|---|---|
POST |
/api/categories |
Создать категорию | admin |
PUT |
/api/categories/{id} |
Обновить категорию | admin |
DELETE |
/api/categories/{id} |
Удалить категорию | admin |
GET |
/api/categories |
Список категорий | user |
GET |
/api/categories/{id} |
Категория по Id | user |
| Метод | Эндпоинт | Описание | Роли |
|---|---|---|---|
POST |
/api/products |
Создать товар | admin |
PUT |
/api/products/{id} |
Обновить товар | admin |
DELETE |
/api/products/{id} |
Удалить товар | admin |
GET |
/api/products/{id} |
Детали товара | user |
GET |
/api/products |
Список товаров | user |
GET |
/api/products/search |
Поиск товаров | user |
| Метод | Эндпоинт | Описание | Роли |
|---|---|---|---|
GET |
/api/stocks/products/{productId} |
Информация о запасах товара | user |
POST |
/api/stocks/products/{productId}/reserve |
Зарезервировать товар | admin |
POST |
/api/stocks/reservations/{code}/confirm |
Подтвердить резерв | admin |
DELETE |
/api/stocks/reservations/{code} |
Отменить резерв | admin |
🛒 Cart Service (http://localhost:8083)
| Метод | Эндпоинт | Описание | Роли |
|---|---|---|---|
POST |
/api/cart/items |
Добавить товар в корзину | user |
GET |
/api/cart |
Получить корзину | user |
PUT |
/api/cart/items |
Обновить корзину | user |
DELETE |
/api/cart/items/{id} |
Удалить товар из корзины | user |
DELETE |
/api/cart |
Очистить корзину | user |
📦 Order Service (http://localhost:8084)
| Метод | Эндпоинт | Описание | Роли |
|---|---|---|---|
POST |
/api/orders |
Создать заказ | user |
GET |
/api/orders |
Список заказов | user |
GET |
/api/orders/{id} |
Детали заказа | user |
GET |
/api/admin/orders |
Список всех заказов | admin |
PUT |
/api/admin/orders/{id}/status |
Обновить статус заказа | admin |
|
Alexander Korotkov numerouno-life |
Alexander Chermnykh A-Cherm |
Anastasiya Bogdanova AnastasiyaBogdanova |
Andrey Okunevich andreiokunevich |
|
Aidar Safin V1chers |
Valeria Butko progingir |
Ekaterina Badeeva EkaterinaBadeeva |
Ilya Greshnov GreshnovIlya |
|
Irina Gavrilina Irina-Gavrilina |
Nadezhda Tupitsyna NadezhdaTA |
Sergey Zizganov s-zizganov |
Eduard Gritsак GritsED |
Запуск:
- Соберите JAR: mvn clean package;
- Собрать образы: docker compose build
- Запустите контейнеры: docker compose up -d.
Для запуска только основных сервисов без метрик:
docker compose -f docker-compose.dev.yml up -d
| Дашборд | URL | Описание |
|---|---|---|
| Kafka Exporter Overview | http://localhost:3000/d/jwPKIsniz/kafka-exporter-overview | Мониторинг Kafka: consumer lag, throughput, партиции (ID: 7589) |
| Stock Management | http://localhost:3000/d/stock-management | Метрики товарных запасов: low stock, reserved/available ratio |
Алерты доступны в Prometheus http://localhost:9090/alerts:
| Алерт | Условие | Длительность | Серьёзность |
|---|---|---|---|
| KafkaHighConsumerLag | consumer lag > 1000 | 2m | warning |
| KafkaUnderReplicatedPartitions | under-replicated partitions > 0 | 1m | critical |
| LowStockAlert | product_low_stock_count > 0 | 5m | warning |
- Kafka metrics: kafka-exporter (порт 9308) + JMX exporter (порт 5556)
- Stock metrics: product-service через Micrometer (/actuator/prometheus)
- System metrics: node-exporter (порт 9100)
- Prometheus: localhost:9090
- Grafana:
- url: localhost:3000
- login: admin
- password: admin
