Skip to content

Информационная система йогатерапевта и демонстрационный проект Эргономичного подхода

Notifications You must be signed in to change notification settings

ergonomic-code/Trainer-Advisor

Repository files navigation

Trainer Advisor

Информационная система йогатерапевта.

Данный проект является иллюстрацией кодовой базы, выполненной в соответствии с Эргономичным подходом.

Посты с описанием проекта можно найти у меня в блоге и Telegram-канале.

Требования к инфраструктуре

  • JDK: 21 (Temurin)
  • PostgreSQL 15.2

Требования к рабочему окружению

  • Docker
  • Docker Compose

Локальная разработка

TDD

Разработку рекомендуется вести преимущественно через TDD - то есть реализация продового кода ведётся в рамках " озеленения" теста.

Запуск инфраструктуры

Опционально можно руками запустить инфраструктуру для тестов c помощью IDEA Run Configuration (далее - ран конфига) " Infra - Tests - Up":

img.png

Это позволит сэкономить полсекунды на запуск тестов, за счёт пропуска инициализации testcontainers.

Вообще у IDEA есть специализированные ран конфиги для Docker Compose, но у меня идея крэшится при их использовании

Остановить инфраструктуру можно ран конфигом "Infra - Tests - Down".

Запуск одного теста

В случае простых/небольших фич и багфиксов можно ограничиться запуском одного класса или теста через гуттер

img.png

Запуск быстрых тестов

Если изменения затрагивают несколько частей системы, их разработку можно драйвить с помощью ран конфига "Tests - Fast":

img.png

Эта конфигурация запускает все тесты, не отмеченные тегом "slow" и её есть смысл запускать, если в рамках решения задачи, был затронут большой процент кода проекта.

Запуск всех тестов

Если разработка совсем вышла из-под контроля и починка одного теста влечёт падение другого, то лучше перейти на ран конфиг "Tests - All":

img.png

Ручное тестирование

Отладка и тестирования вёрстки и динамических частей страниц выполняется в ручном режиме, поэтому для этих целей необходимо запустить проект с помощью ран конфига "QYogaApp":

img.png

В проекте настроена интеграция Spring Boot Docker Compose, поэтому для запуска проекта достаточно запустить только само приложение в IDEA.

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

При необходимости, остановить инфраструктуру можно ран конфигом "Infra - Dev - Down":

img.png

Отладка приложения в контейнере

Для отладки работы приложения в докере можно воспользоваться ран конфигом "System - Local - Up":

img.png

Этот конфиг выполняет сборку приложения в jar-файл (из текущего состояния рабочей директории), после чего собирает докер-контейнер на базе этого файла и затем в терминале запускает композ всей системы.

Композ запускается в интерактивном режиме, поэтому для остановки надо в консоли ввести Ctrl+c.

Проверка перед пушем

Перед пушем рекомендуется запускать Gradle-таск check. Этот таск выполняет все тесты и проверяет процент покрытия кода тестами. Для запуска таска можно воспользоваться ран конфигом "Tests - Check":

img.png

Локальная разработка фронта в контейнере

Запуск контейнера

Для запуска проекта необходимо в корне проекта (репозитория) выполнить команду:

docker compose -f deploy/qyoga/docker-compose-infra-base.yml -f deploy/qyoga/docker-compose-front-dev.yml up --build app 

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

В случае успешного запуска, в логах докера должна появиться строка

pro.qyoga.app.QYogaAppKt - Started QYogaAppKt in 1.938 seconds (process running for 2.224)

После этого приложение будет доступно по URL http://localhost:8080, а все изменения в HTML/CSS/JavaScript в директории src/main/resources будут видимы сразу после сохранения файла.

Пересборка контейнера

Для того чтобы обновить бэк в контейнере (напирмер, после переключения ветки), необходимо удалить старый компоуз-проект:

docker compose -f deploy/qyoga/docker-compose-infra-base.yml -f deploy/qyoga/docker-compose-front-dev.yml down

После чего запустить контейнер заново

Работа с продом

Перед работой с продом на новой машине необходимо выполнить шаги из раздела "Сетап хоста"

Деплой

Для деплоя актуальной версии приложения необходимо выполнить скрипт:

deploy/host/deploy.sh

Этот скрипт подключится к серверу, загрузит последний образ приложения и задеплоит его.

Просмотр логов

deploy/host/logs.sh

Обновление сертификата

deploy/host/update-cert.sh

Сетап хоста

deploy/host/setup-host.sh

Сетап нового сервера

deploy/host/setup-server.sh