RESTful веб-застосунок для управління базою даних туристичних напрямків (Країни -> Курорти -> Готелі).
Проєкт реалізовано на Java Spring Boot з використанням PostgreSQL (Docker), Spring Security та шаблонізатора Thymeleaf.
Застосунок дозволяє працювати з трирівневою ієрархією даних:
- Країни (Countries)
- Курорти (Resorts)
- Готелі (Hotels)
- GUEST (Неавторизований): Бачить тільки сторінку логіну.
- USER: Має доступ тільки на перегляд даних (Read-only).
- ADMIN: Має повний доступ (перегляд, додавання нових записів, видалення).
- Java 21
- Spring Boot 3.x / 4.x (Web, Data JPA, Security)
- PostgreSQL 15 (база даних у Docker контейнері)
- Thymeleaf (веб-інтерфейс)
- Lombok (для скорочення бойлерплейт-коду та логування)
- Docker & Docker Compose (для швидкого розгортання БД)
- Встановлений Docker Desktop (або Docker Engine).
- Встановлений JDK 17 або вище.
- Maven.
У корені проєкту знаходиться файл docker-compose.yaml та скрипт ініціалізації init.sql.
Відкрийте термінал у папці проєкту та виконайте:
docker compose up -dЦя команда завантажить образ postgres:15-alpine, запустить контейнер і автоматично створить таблиці та наповнить їх початковими даними.
Перед запуском Java-додатка необхідно задати змінні середовища.
Необхідні змінні:
DB_USER—<Ваш користувач>DB_PASSWORD—<Ваш пароль>(або значення, вказане у вашому файлі.env)
В IntelliJ IDEA:
Запустіть клас VacationAppApplication.java через IDE
або за допомогою Maven:
./mvnw spring-boot:runПісля запуску додаток буде доступний за адресою:
👉 http://localhost:8080
Дані користувачів ініціалізуються автоматично при старті Docker-контейнера.
| Роль | Логін | Пароль | Опис |
|---|---|---|---|
| ADMIN | admin | admin | Повний доступ (CRUD) |
| USER | user | user | Тільки перегляд |
Паролі в базі даних зберігаються не у відкритому вигляді, а закодовані в Base64.
Реалізовано кастомний PasswordEncoder у класі SecurityConfig.
База даних розгортається в ізольованому Docker-контейнері, що забезпечує портативність та однакове середовище запуску.
Використано легковаговий образ alpine.
Креденшали для підключення до бази даних передаються через Environment Variables, а не хардкодяться у файлі application.properties.
Ключові операції (додавання, видалення, перегляд) логуються в консоль за допомогою бібліотеки Lombok (@Slf4j).
- users (
id,login,password(Base64),role) - countries (
id,name) - resorts (
id,name,description,country_id) - hotels (
id,name,stars,resort_id)