/java-explore-with-me

Template repository for ExploreWithMe project.

Primary LanguageJava

ExploreWithMe

Приложение, которое позволяет пользователям делиться информацией об интересных событиях и находить компанию для участия в них.

Приложение состоит из двух сервисов:

  • основной сервис, который содержит всё необходимое для работы продукта;
  • сервис статистики, который хранит количество просмотров и позволит делать различные выборки для анализа работы приложения.

Основной сервис

API основного сервиса состоит из трех частей:

  • публичная: доступна без регистрации любому пользователю сети;
  • закрытая: доступна только авторизованным пользователям;
  • административная — для администраторов сервиса.

Сервис статистики

Собирает информацию о ,во-первых, о количестве обращений пользователей к спискам событий и, во-вторых, о количестве запросов к подробной информации о событии. На основе этой информации формируется статистика о работе приложения.

Разработка

В ходе разработки в рамках обучения в Яндекс.Практикуме выполнена следующая работа:

  • Разработаны два микросервиса на основе спецификаций OpenAPI
  • Микросервисы контактируют друг с другом при помощи HTTP-клиента
  • Для каждого экземпляра микросервисов запускается свой экземпляр PostgreSQL в Docker-контейнере
  • Приложение запускается в Docker-контейнерах с помощью Docker compose
  • Написана коллекция тестов Postman

Самостоятельно на сегодняшний день выполнена следующая работа:

  • Реализована поддержка HATEOAS для основного сервиса (уровень 3 модели зрелости Ричардсона)
  • Добавлена поддержка Spring Cloud Config: файлы конфигураций перенесены в удаленный репозиторий (github), используется шифрование чувствительных данных (пароль от БД)
  • Добавлена поддержка Spring Cloud Netflix: микросервисы регистрируются в Eureka
  • Поддержка Spring Cloud Stream (Kafka): основной сервис посылает сообщение сервису статистики с помощью брокера сообщений вместо синхронного обмена запросами
  • Сбор статистики с помощью Prometheus и Grafana

TODO:

  • Поддержка HTTP-клиентом механизма обнаружения служб Eureka и балансировщика нагрузки
  • Поддержка Resilience4j Retry
  • Поддержка Keycloak через Spring Security: добавлены роли пользователей и конфигурация
  • Оптимизация Docker-образов с помощью Buildpacks
  • Тесты (Testcontainers)