Skip to content

PaKicek/Cats-Service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cats Service

Приложение с использованием микросервисной архитектуры для управления питомцами (котиками) и их владельцами с использованием 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:

1. Cats Service

Микросервис для управления питомцами (котиками). Хранит информацию о котиках, включая их имя, дату рождения, породу, цвет и идентификатор владельца. Не имеет информации о владельцах, кроме внешнего идентификатора.

2. Persons Service

Микросервис для управления владельцами питомцев. Хранит информацию о владельцах, включая их имя и дату рождения. Не имеет информации о питомцах владельца.

3. Web Gateway

HTTP-шлюз, принимающий REST-запросы от клиентов. Хранит информацию о пользователях (аутентификация и авторизация), управляет JWT-токенами и транслирует запросы к микросервисам через Kafka. Для конечного пользователя контракт взаимодействия остаётся неизменным.

Функциональные требования

Сущности

Питомец (Cat)

  • Имя
  • Дата рождения
  • Порода
  • Цвет (один из вариантов: WHITE, BLACK, GINGER, GREY, TABBY)
  • Идентификатор владельца (внешний ключ)
  • Список друзей (идентификаторы других котиков)

Хозяин (Person)

  • Имя
  • Дата рождения

Пользователь (User) — только в Web Gateway

  • Имя пользователя
  • Пароль
  • Роль (ADMIN / USER)

CRUD операции

Для каждой сущности реализованы стандартные операции:

  • save(entity) — сохранение сущности
  • getAll() — получение всех записей
  • getById(id) — получение по идентификатору
  • update(entity) — обновление сущности
  • deleteById(id) — удаление по идентификатору
  • deleteByEntity(entity) — удаление по сущности
  • deleteAll() — удаление всех записей

REST API (Web Gateway)

Метод 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

About

A microservices-based backend system for managing cats and their owners. Implements a distributed architecture with three independent services communicating via Apache Kafka.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages