- Язык программирования: Java 17
- Фреймворк: Spring Boot
- Spring Data JPA: для работы с базой данных.
- Spring Security: для аутентификации и защиты API.
- Spring Kafka: для обмена сообщениями через Kafka.
- Система управления зависимостями и сборки: Gradle
- База данных: PostgreSQL
- Документация API: Swagger
- Логирование: SLF4J с Logback
- Контейнеризация: Docker
- Микросервисная архитектура: независимые сервисы для пользователей и ролей
- Убедитесь, что установлены Java 17 и Gradle.
- Установите PostgreSQL и Kafka (если используется локально).
- Откройте файл
application.propertiesкаждого микросервиса (например,usermanager,rolemanager). - Настройте параметры базы данных:
spring.datasource.url=jdbc:postgresql://localhost:5432/your_database spring.datasource.username=your_username spring.datasource.password=your_password
- Запустите Kafka на локальном сервере или настройте соединение через
application.properties.
- Выполните команду для каждого микросервиса:
./gradlew bootRun
- После запуска приложения перейдите по адресам:
- Координатор: http://localhost:7070/swagger-ui.html
- Менеджер пользователей: http://localhost:8080/swagger-ui.html
- Менеджер ролей: http://localhost:9090/swagger-ui.html
- Запуск тестов с помощью Gradle:
./gradlew test
По умолчанию, в системе для всех модулей создан пользователь с правами администратора:
- Логин:
admin - Пароль:
admin - Данный пользователь имеет доступ ко всем эндпоинтам системы и полные права.
- В модуле
usermanagerреализованы различные уровни доступа в зависимости от роли пользователя:- Администратор: имеет полный доступ ко всем эндпоинтам.
- Обычный пользователь: доступ ограничен в соответствии с его правами.
- По умолчанию в модуле
rolemanagerсуществуют два типа пользователей:- Администратор: имеет полный доступ ко всем эндпоинтам.
- Модератор: имеет доступ только к GET-запросам.
- Модуль
coordinatorимеет аналогичные настройки, как иrolemanager:- Администратор: имеет полный доступ ко всем эндпоинтам.
- Модератор: имеет доступ только к GET-запросам.
- Модель данных:
Userс полямиid,username,email,password,createdAt,updatedAt, иaccessLevel. - Пароль: шифруется с помощью Spring Security.
- REST API:
GET /api/users— получить всех пользователей.GET /api/users/{id}— получить пользователя по ID.POST /api/users— создать пользователя.PUT /api/users/{id}— обновить пользователя.DELETE /api/users/{id}— удалить пользователя.
- Валидация:
- Проверка на уникальность имени пользователя и email.
- Валидация email и пароля.
- Модель данных:
Roleс полямиid,name,description. - REST API:
GET /api/roles— получить все роли.GET /api/roles/{id}— получить роль по ID.POST /api/roles— создать роль.PUT /api/roles/{id}— обновить роль.DELETE /api/roles/{id}— удалить роль.
- Валидация:
- Название роли проверяется на уникальность.
- Модель данных:
UserRoleсодержит идентификаторы пользователя и роли. - REST API:
GET /api/users/{userId}/roles— получить роли пользователя.POST /api/users/{userId}/roles/{roleId}— назначить роль пользователю.DELETE /api/users/{userId}/roles/{roleId}— удалить роль у пользователя.
- Приложение разделено на 3 микросервиса:
- Менеджер пользователей (
usermanager) - Менеджер ролей (
rolemanager) - Координатор (
coordinator) для взаимодействия между сервисами
- Менеджер пользователей (
- Отдельные базы данных: для каждого микросервиса используется своя база данных с собственной схемой.
- Контроллеры: обработка запросов API.
- Сервисный слой: бизнес-логика.
- Репозитории: взаимодействие с базой данных.
- Unit-тесты: покрывают сервисный слой для проверки бизнес-логики.
- Интеграционные тесты: проверяют работу REST API.
- Postman Collection:
Successful_Post_Tests
- Эта коллекция состоит из успешных POST-запросов к каждому сервису, предназначена для демонстрации работоспособности приложения. Она позволяет быстро убедиться в корректном функционировании сервисов и их взаимодействии.
- Микросервисная архитектура: REST Layered System.
- Репозиторий (Repository): изоляция работы с базой данных.
- DTO (Data Transfer Object): для сокращения объема передаваемых данных.
- Mapper: централизованная логика преобразования данных.
- Adapter для Kafka: унифицированный интерфейс для взаимодействия с Kafka.
- Модульность и гибкость: микросервисы можно разрабатывать и развёртывать независимо.
- Устойчивость: сбой одного микросервиса не влияет на работу других.
- Масштабируемость: отдельные компоненты можно масштабировать независимо.
- Асинхронное взаимодействие: разгрузка HTTP-запросов.
- Отказоустойчивость: сообщения сохраняются и могут быть обработаны позже.
- Масштабируемость: легко добавлять новые микросервисы.
- Высокая производительность: поддержка распределенной обработки сообщений.
- Горизонтальное масштабирование: запуск нескольких экземпляров микросервисов.
- Автономное масштабирование: разное количество экземпляров для разных микросервисов в зависимости от нагрузки.
- Разделение баз данных: каждая база данных разгружается за счет распределения нагрузки между сервисами.
- Kafka: позволяет разгрузить систему за счет асинхронного обмена сообщениями.