Skip to content

CorporationX/achievement_service

Repository files navigation

Service Template

Стандартный шаблон проекта на SpringBoot

Использованные технологии

  • Spring Boot – как основной фрэймворк
  • PostgreSQL – как основная реляционная база данных
  • Redis – как кэш и очередь сообщений через pub/sub
  • testcontainers – для изолированного тестирования с базой данных
  • Liquibase – для ведения миграций схемы БД
  • Gradle – как система сборки приложения
  • Lombok – для удобной работы с POJO классами
  • MapStruct – для удобного маппинга между POJO классами

База данных

  • База поднимается в отдельном сервисе infra
  • Redis поднимается в единственном инстансе тоже в infra
  • Liquibase сам накатывает нужные миграции на голый PostgreSql при старте приложения
  • В тестах используется testcontainers, в котором тоже запускается отдельный инстанс postgres
  • В коде продемонстрирована работа как с JdbcTemplate, так и с JPA (Hibernate)

Как начать разработку начиная с шаблона?

  1. Сначала нужно склонировать этот репозиторий
git clone https://github.com/FAANG-School/ServiceTemplate
  1. Далее удаляем служебную директорию для git
# Переходим в корневую директорию проекта
cd ServiceTemplate
rm -rf .git
  1. Далее нужно создать совершенно пустой репозиторий в github/gitlab

  2. Создаём новый репозиторий локально и коммитим изменения

git init
git remote add origin <link_to_repo>
git add .
git commit -m "<msg>"

Готово, можно начинать работу!

Как запустить локально?

Сначала нужно развернуть базу данных из директории infra

Далее собрать gradle проект

# Нужно запустить из корневой директории, где лежит build.gradle.kts
gradle build

Запустить jar'ник

java -jar build/libs/ServiceTemplate-1.0.jar

Но легче всё это делать через IDE

Код

RESTful приложения калькулятор с единственным endpoint'ом, который принимает 2 числа и выдает результаты их сложения, вычитаяни, умножения и деления

  • Обычная трёхслойная архитектура – Controller, Service, Repository
  • Слой Repository реализован и на jdbcTemplate, и на JPA (Hibernate)
  • Написан GlobalExceptionHandler который умеет возвращать ошибки в формате {"code":"CODE", "message": "message"}
  • Используется TTL кэширование вычислений в CalculationTtlCacheService
  • Реализован простой Messaging через Redis pub/sub

Тесты

Написаны только для единственного REST endpoint'а

  • SpringBootTest
  • MockMvc
  • Testcontainers
  • AssertJ
  • JUnit5
  • Parameterized tests

TODO

  • Dockerfile, который подключается к сети запущенной postgres в docker-compose
  • Redis connectivity
  • ...

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published