- Язык программирования: 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: позволяет разгрузить систему за счет асинхронного обмена сообщениями.