- при запуске автоматически создаются два пользователя с ролями "администратор" и "модератор"
- регистрация и авторизации пользователей с присвоением роли "пользователь"
- создание авторизованными пользователями новых документов, загрузка файлов, редактирование и удаление
- настройка области видимости созданных\загруженных сущностей - "публичный" или "виден только определённым пользователям", по умолчанию созданная сущность видна только автору или администатору
- добавлены ограничения для редактирования данных и удаление сущностей:
- это доступно только автору или администратору
- пользователю доступны для редактирования не все поля(например, только администратор может изменить автора документа)
- добавлен поиск по всем основным полям сущностей, сортировка отображения по полям, способ сортировки(по возрастанию или обратный), пагинация при поиске
- есть возможность редактирования пользователя:
- для роли "пользователь" доступны основные поля для редактрования и удаление только своих данных из базы
- для роли "администратор" доступно полное редактирование полей пользователя, включая присвоение тому новых ролей, а также удаление любыз пользователейиз базы
- реализована возможность добавлять адрес для пользователя с использованием external-API(сервиса Dadata)
- добавлена фронтенд-часть для взаимодействия с пользователем
- Фреймворк: Spring Boot
- Аутентификация: Spring Security, JWT-токен
- Работа с базой данных Spring Data JPA-Hibernate
- Менеджеры транзакций: JpaTransactionManager, DataSourceTransactionManager
- Автоматический маппинг: Mapstruct, JsonNullable, Jackson
- Шаблон проектирования: DTO
- Сокращение шаблонного кода: Lombok
- Поиск, сортировка сущностей из БД: JPA Criteria API, JPQL
- Работа с файлами: Apache FileUpload
- Работа с миниатюрами файлов: Thumbnails, Apache pdfbox
- Общий обработчик ошибок реализован через метод: AOP
- Документация по API-приложения: Springdoc Openapi, Swagger
- Тесты: JUnit 5, MockWebserver, Mockito
- Базы данных и управление миграциями: PostgresSQL, Liquibase
- Подключенный клиент внешней API: DaData
- Среды разработки: development, test, production
- Выполнение разработки возможно, как при подключении локальной БД PostgresSQL, так и через Docker Compose
- Настроены конфиг файлы для работы приложения через Minikube(папка k8s)
- Развертывание в production: Docker, Docker Compose, Yandex Cloud
- Задеплоено на виртуальную машину на серверах Яндекса
- Для редеплоя используются два способа - локальный через bash-скрипты, удаленный через GitHub Actions
- Фронтенд-часть: HTML + CSS + JS
Создать БД с атрибутами:
name: docs
user: ivan
password: password
Или изменить данные значения в файле application-development.properties на свои
-
Прежде всего, скачайте Docker Desktop, установите и запустите его.
-
Расскоментируйте значения конфигарции подключения к БД в файле
application-development.properties
с пометкойdata for start in docker-compose
и закомендируйте/удалите текущие данные -
Проверьте открыт ли порт 5432 для работы Docker, например командой(для Linux)
sudo netstat -tulpn
,- если порт уже прослушивается, убейте процесс командой
sudo kill -9 <PID-процесса>
- если порт уже прослушивается, убейте процесс командой
-
Поднимите приложение командой:
sudo docker-compose up --build -d
или
make run
При первом запуске процесс может быть долгим, далее он будет быстрее.
-
- Нужно иметь утсановленный Docker desktop или Docker engine
- Вы должны установить Minikube и утилиту Kubectl(проверьте их работу командами
minikube
иkubectl
- должен быть вывод с информацией о командах). - Расскоментируйте значения конфигарции подключения к БД в файле
application-development.properties
с пометкойdata for start in docker-compose
и закомендируйте/удалите текущие данные - Запустите кластер командой
minikube start --driver=docker
(или используйте другой драйвер, подробнее - в оф. документации) - Проверьте успешность создания кластера командой
kubectl get all
- если все ок, будет выведена информация о кластере-кубернетиса - Находясь в корне проекта запустите манифесты для создания контейнеров в миникубе
kubectl apply -f ./k8s/pv-postgres.yaml
kubectl apply -f ./k8s/pvc-postgres.yaml
kubectl apply -f ./k8s/deployment-postgres.yaml
kubectl apply -f ./k8s/service-postgres.yaml
kubectl apply -f ./k8s/deployment-spring-boot.yaml
kubectl apply -f ./k8s/service-spring-boot.yaml
- Проверьте запустились все контейнеры
kubectl get all
- Дождитесь, пока статус подов с деплойментов контейнеров(бекенд и БД) будет
Running
- Откройте в отдельном терминале тунельное соединение к бекенд контейнеру командой
minikube tunnel
ВАЖНО! Чтоб внешнее подключение работало, терминал с туннелем нельзя закрывавть! kubectl get all
, найдитеEXTERNAL-IP
иPORTS
в выведенной информации- перейдите по адресу, для подключения к приложению, в моем случае это было
127.0.0.1:80
Документация по API/Swagger доступены по адресам при запущенном приложении
localhost:8080/v3/api-docs
localhost:8080/swagger-ui/index.html
Для входа под админом, используйте данные:
username: admin
password: password
Текущие баги или критические недоработки указаны в разделе Issues
Обо всех моментах, уточнениях, пожелания или идеях по улучшению проекта, пишите мне в телеграм