В рамках лабораторной следует переписать лабораторную работу №4 из прошлого семестра.
Необходимо использовать Javadoc и сгенерировать html-документацию.
Фреймворк для тестирования - JUnit.
Система сборки: Maven.
Существующая информация о котиках:
- Имя
- Дата рождения
- Порода
- Цвет (один из заранее заданных вариантов)
- Хозяин
- Список котиков, с которыми дружит этот котик (из представленных в базе)
Существующая информация о хозяевах:
- Имя
- Дата рождения
- Список котиков
Сервис должен реализовывать архитектуру Сontroller-Service-Dao.
Вся информация хранится в БД PostgreSQL. Для связи с БД должен использоваться Hibernate.
При тестировании рекомендуется использовать Mockito, чтобы избежать подключения к реальным базам данных.
Сервис должен предоставлять HTTP интерфейс (REST API) для получения информации о конкретных котиках и владельцах и для получения фильтрованной информации (например, получить всех рыжих котиков)
Внимание: недопустимо отдавать через HTTP интерфейс сущности JPA. Рекомендуется создать отдельные оберточные классы.
Сервисы и DAO должны превратиться в Spring Bean’ы с использованием Dependency Injection (Autowired). DAO при этом наследуют JpaRepository и имеет шаблонные Spring Data JPA методы.
Необходимо показать работоспособность endpoint’ов через HTTP запросы (рекомендуется Postman).
Владельцы недовольны, что инфрмацию о котиках может получить кто угодно. В этой лабораторной мы добавим авторизацию к сервису.
Добавляется роль администратора. Он имеет доступ ко всем методам и может создавать новых пользователей. Пользователь связан с владельцем в соотношении 1:1.
Методы по получению информации и котиках и владельцах должны быть защищены Spring Security. Доступ к соотвутсвующим endpoint’ам имеют только владельцы котиков и администраторы. Доступ к методам для фильтрации имеют все авторизованные пользователи, но на выходе получают только данные о своих котиках.
Внимание: эндпоинты, созданные на предыдущем этапе, не должны быть удалены.
Бизнес прочитал статью о том, что микросервисы это круто и попросил нас разбить программу на микросервисы.
Из созданного приложения выделяются три микросервиса:
- Микросервис доступа к котикам.
- Микросервис доступа к владельцам.
- Микросервис с внешними интерфейсами.
Все они являются разными приложениями.
Все созданные ранее эндпоинты и авторизация переезжает на третий микросервис.
Общение между микросервисами происходит посредством RabbitMQ/Kafka (на выбор студента).
Сервисы доступа к котикам и доступа к владельцам могут либо быть подключены к одной БД, либо иметь разные БД. Во втором случае недопустимо делать один запрос на получение данных из двух БД, запроса должно быть два (по одному в каждую).
Внимание: недопустимо передавать через RabbitMQ/Kafka JPA сущности. Рекомендуется создать отдельные оберточные классы.
Рекомендуется выделить модуль с JPA сущностями в отдельный подключаемый модуль.