Категория | Технологии |
---|---|
Бэкенд | Java 21, Spring Boot 3 (WebFlux, R2DBC, Security, OAuth2) |
Базы данных | PostgreSQL, Redis (кеширование) |
Инфраструктура | Docker, Testcontainers |
UI | Thymeleaf, HTML, CSS, JavaScript |
Инструменты | Lombok, MapStruct, OpenAPI Generator |
Веб-приложение представляет собой витрину товаров.
Незарегистрированный пользователь может просматривать витрину товаров и карточки товаров.
Для доступа к полному функционалу приложения необходимо зарегистрироваться и авторизоваться.
Авторизация доступна 2 способами:
- Если чекбокс "Запомнить меня" неактивен, сессия будет удалена после закрытия браузера
- Если чекбокс "Запомнить меня" активен, сессия будет восстановлена после закрытия браузера.
Авторизованный пользователь получает доступ к полному функционалу приложения: он может положить товар в корзину, оформить, оплатить и отменить заказ, а также наполнить витрину товаров новыми товарами.
По умолчанию баланс счета пользователя равен 15 000 рублей (payment.default-balance). Если пользователь отменяет оплаченный заказ, стоимость заказа возвращается на счет пользователя. Если средств на балансе счета пользователя недостаточно, оплата не совершается и отображается сообщение о недостатке средств.
- OAuth 2.0 Authorization Server, который работает по схеме Client Credentials Flow, для авторизации доступа к сервису оплаты
- Remember me аутентификация использует токен с Base64 шифрованием и восстанавливает полноценный Authentication объект с UserDetails.
- Для отображения актуальной стоимости корзины и реализации UI элементов согласно её состоянию применен @ControllerAdvice.
- Для уменьшения нагрузки на приложение состояние корзин пользователей и список товаров кешируются с помощью Redis.
- Клиент сервиса витрины товаров (showcase-service) для осуществления запросов в сервис платежей (payment-service) и контроллер сервиса платежей генерируются автоматически на основе OpenAPI спецификации.
- Для исполнения @Testcontainers тестов сервиса витрины товаров (showcase-service) с помощью Docker реализована установка Docker в тестовый Docker-контейнер.
- В случае ошибок при регистрации и аутентификации пользователь получает сообщения об ошибках.
- Если сервис оплаты недоступен, а пользователь хочет оплатить или отменить оплаченный(!) заказ, кнопки на соответствующих страницах блокируются и отображается сообщение о проблеме
- Если недостаточно средств на счете для оплаты заказа, пользователь получает сообщение об ошибке.
docker-compose --profile test up --build --abort-on-container-exit
Если ответ 0, все тесты прошли успешно
docker-compose --profile prod up -d
Приложение будет доступно по адресу: http://localhost:8080/products.
Чтобы остановить все запущенные контейнеры, выполните:
docker-compose down
Если вы хотите также удалить тома (volumes), используйте:
docker-compose down -v
-
Убедитесь, что у вас установлен PostgreSQL на порту 5432
-
Убедитесь, что у вас устновлен Redis на порту 6379
-
Убедитесь, что у вас запущен Docker Desktop и соберите оба сервиса (+тесты):
mvn clean package
- (Опционально) запустите сервис авторизации:
mvn clean install -pl auth-service
- Запустите сервис витрины товаров:
java -jar showcase-service/target/showcase-service.jar --spring.profiles.active=prod
- (Опционально) запустите сервис оплаты:
java -jar payment-service/target/payment-service.jar --spring.profiles.active=prod
Приложение будет доступно по адресу: http://localhost:8080/products.