Приложение с использованием микросервисной архитектуры для управления питомцами (котиками) и их владельцами с использованием Spring Boot, Spring Security, аутентификации с использованием JWT и брокера сообщений Kafka.
| Компонент | Технология |
|---|---|
| Язык программирования | Java 21 |
| Фреймворк | Spring Boot 3.x |
| ORM | Spring Data JPA (Hibernate) |
| База данных | PostgreSQL |
| Миграции | Liquibase |
| Брокер сообщений | Apache Kafka |
| Безопасность | Spring Security 6.x, JWT |
| Документация API | SpringDoc OpenAPI (Swagger) |
| Сборка | Maven |
| Тестирование | JUnit 5, Mockito, MockMVC |
Проект состоит из трех независимых микросервисов, взаимодействующих через Apache Kafka:
Микросервис для управления питомцами (котиками). Хранит информацию о котиках, включая их имя, дату рождения, породу, цвет и идентификатор владельца. Не имеет информации о владельцах, кроме внешнего идентификатора.
Микросервис для управления владельцами питомцев. Хранит информацию о владельцах, включая их имя и дату рождения. Не имеет информации о питомцах владельца.
HTTP-шлюз, принимающий REST-запросы от клиентов. Хранит информацию о пользователях (аутентификация и авторизация), управляет JWT-токенами и транслирует запросы к микросервисам через Kafka. Для конечного пользователя контракт взаимодействия остаётся неизменным.
- Имя
- Дата рождения
- Порода
- Цвет (один из вариантов:
WHITE,BLACK,GINGER,GREY,TABBY) - Идентификатор владельца (внешний ключ)
- Список друзей (идентификаторы других котиков)
- Имя
- Дата рождения
- Имя пользователя
- Пароль
- Роль (
ADMIN/USER)
Для каждой сущности реализованы стандартные операции:
save(entity)— сохранение сущностиgetAll()— получение всех записейgetById(id)— получение по идентификаторуupdate(entity)— обновление сущностиdeleteById(id)— удаление по идентификаторуdeleteByEntity(entity)— удаление по сущностиdeleteAll()— удаление всех записей
| Метод | Endpoint | Описание | Доступ |
|---|---|---|---|
| POST | /api/auth/login |
Аутентификация, получение JWT | Все |
| POST | /api/auth/register |
Регистрация нового пользователя | Все |
| POST | /api/auth/logout |
Завершение сессии | USER, ADMIN |
| GET | /api/cats |
Получение всех котиков (с пагинацией и фильтрацией) | USER, ADMIN |
| GET | /api/cats/{id} |
Получение котика по ID | USER, ADMIN |
| POST | /api/cats |
Создание нового котика | USER (только своих), ADMIN |
| PUT | /api/cats/{id} |
Обновление информации о котике | USER (только своих), ADMIN |
| DELETE | /api/cats/{id} |
Удаление котика | USER (только своих), ADMIN |
| GET | /api/persons |
Получение всех владельцев (с пагинацией) | USER, ADMIN |
| GET | /api/persons/{id} |
Получение владельца по ID | USER, ADMIN |
| POST | /api/persons |
Создание нового владельца | ADMIN |
| PUT | /api/persons/{id} |
Обновление информации о владельце | ADMIN |
| DELETE | /api/persons/{id} |
Удаление владельца | ADMIN |
- Пагинация: параметры
page(по умолчанию 0) иsize(по умолчанию 10) - Фильтрация котиков:
color— фильтр по цветуbreed— фильтр по породеownerId— фильтр по идентификатору владельца
- ADMIN: полный доступ ко всем ресурсам, может управлять любыми котиками и владельцами, создавать/удалять пользователей.
- USER: может просматривать всех котиков и владельцев, но изменять может только собственных питомцев (владельцем которых является). Может зарегистрироваться самостоятельно.
- Аутентификация через JWT (JSON Web Token)
- Пароли хранятся в зашифрованном виде (BCrypt)
- Неаутентифицированные запросы отклоняются с кодом 401 Unauthorized
- Доступ к изменению информации имеют только владельцы котиков и администраторы
- При попытке изменения чужого питомца возвращается 403 Forbidden
- CSRF и CORS отключены
- Использование Spring Boot для конфигурации и управления зависимостями
- Dependency Injection через JavaBeans
- Использование DTO для передачи данных через HTTP
- Spring Data JPA для работы с базами данных
- Автоматическое управление зависимостями через Maven
- Swagger/OpenAPI документация доступна по адресу
/swagger-ui.html
- PostgreSQL для каждого микросервиса (три отдельные базы данных)
- Миграции базы данных с помощью Liquibase
- Apache Kafka как брокер сообщений
- Синхронный запрос-ответ через Kafka с использованием
@KafkaListenerиreplyTemplate - Каждый микросервис имеет собственную базу данных
- JUnit 5 для unit-тестов
- MockMVC для тестирования endpoint'ов без запуска веб-сервера
- Mockito для создания заглушек
- JDK 21 или выше
- Maven 3.8+
- Docker и Docker Compose (для запуска PostgreSQL и Kafka)
Запустите необходимые сервисы через Docker Compose в корне проекта:
docker-compose up -dБудут запущены:
- PostgreSQL (порты: 5432, 5433, 5434 для трёх микросервисов)
- Apache Kafka (порт: 9092)
- Zookeeper (порт: 2181)
Далее выполните команду в корне проекта для сборки всех модулей:
mvn clean package