Skip to content

Веб-приложение "Витрина товаров" (Java 21, Spring Boot (WebFlux, Security, OAuth2), R2DBC, PostgreSQL, Redis, Lombok, Mapstruct, Maven, Docker, Thymeleaf, HTML, CSS, JavaScript)

Notifications You must be signed in to change notification settings

cptntotoro/yp-online-store-showcase

Repository files navigation

Java CI with Maven Coverage Status

🛍️ Витрина онлайн-магазина | Reactive Spring Boot + Java 21

🛠️ Технологии

Категория Технологии
Бэкенд 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-контейнер.

UI особенности

  • В случае ошибок при регистрации и аутентификации пользователь получает сообщения об ошибках.
  • Если сервис оплаты недоступен, а пользователь хочет оплатить или отменить оплаченный(!) заказ, кнопки на соответствующих страницах блокируются и отображается сообщение о проблеме
  • Если недостаточно средств на счете для оплаты заказа, пользователь получает сообщение об ошибке.

Демонстрация

🚀 Как запускать приложение

В Docker

Только тесты для сервисов витрины и оплаты

docker-compose --profile test up --build --abort-on-container-exit

Если ответ 0, все тесты прошли успешно

Только продакшен (все 3 сервиса)

docker-compose --profile prod up -d

Приложение будет доступно по адресу: http://localhost:8080/products.

Остановка контейнеров

Чтобы остановить все запущенные контейнеры, выполните:

docker-compose down

Если вы хотите также удалить тома (volumes), используйте:

docker-compose down -v

Локально

  1. Убедитесь, что у вас установлен PostgreSQL на порту 5432

  2. Убедитесь, что у вас устновлен Redis на порту 6379

  3. Убедитесь, что у вас запущен Docker Desktop и соберите оба сервиса (+тесты):

mvn clean package
  1. (Опционально) запустите сервис авторизации:
mvn clean install -pl auth-service
  1. Запустите сервис витрины товаров:
java -jar showcase-service/target/showcase-service.jar --spring.profiles.active=prod
  1. (Опционально) запустите сервис оплаты:
java -jar payment-service/target/payment-service.jar --spring.profiles.active=prod

Приложение будет доступно по адресу: http://localhost:8080/products.

About

Веб-приложение "Витрина товаров" (Java 21, Spring Boot (WebFlux, Security, OAuth2), R2DBC, PostgreSQL, Redis, Lombok, Mapstruct, Maven, Docker, Thymeleaf, HTML, CSS, JavaScript)

Topics

Resources

Stars

Watchers

Forks