А. Описание решения Микросервис написан на java с применением фреймворка Spring, система сборки maven. В качестве базы данных выступает Postgres, миграциями схем базы данных управляет liquibase. Вся программа разбита на слои:
- domain описывает сущность объекта файла, содержит: название, описание, время создания(в ТЗ не сказано, что время создания - время загрузки в хранилище, а сказано, что оно передается вместе с файлом, поэтому предполагается что время создания не генерируется автоматически, а указывается в качестве атрибута файла) и саму информацию файла. Информация файлов хранится в БД в виде бинарных файлов, что позволяет быстрее сохранять и извлекать большие объемы данных из БД по сравнению с данными хранящимися как текст.
- repository позволяет выполнять нужные операции из CRUD для дальнейшей манипуляции с объектами
- dto объект для передачи "во вне" и получения "из вне"
- mapper преобразует доменную модель в дто и обратно, используется библиотека mapStruct. В нем также происходит переход от бинарного представления информации в представление base64.
- service основная логика микросервиса, тут взаимодействуют маппер и репозиторий
- controller endpoints микросервиса Благодаря этому достигается принцип чистой архитектуры.
EndPoints: http://localhost:8080/api/file/ post запрос - передается json с нашим файлом, пример: { "title": "book", "description": "This book is about feauture", "creationDate": "2018-10-02T20:34:11", "base64FileData": "0J/RgNC40LLQtdGCINC80LjRgCE=" } Обратно возвращается id созданного файла в формате UUID, UUID генерируется автоматически при сохранении в базе данных. all?page,size get запрос получающий страницу под номером page с размерностью size, файлы в которой отсортированы по возрастанию даты создания. Если указать номер страницы больше, чем возможный, то выведется последняя из страниц с информацией. Если данных нет получим HTTP ответ с кодом 204 - No Content. {id} get запрос получающий файл с указанным id. Если id неверный, получим 404 - Not Found.
Контроллер проекта покрыт тестами с использованием библиотек REST-assured и jUnit5, интеграционные тесты полностью затрагивают все слои микросервиса. Во время тестирования была использована библиотека Testcontainers, которая позволяет писать тесты с использованием реальной БД находящейся в контейнере Docker. Для проведения тестов необходим запущенный Docker.
В environment находится docker compose file в котором описаны зависимости и параметры для поднятия БД, микросервиса и среды pgAdmin в одном docker контейнере.
B. Инструкцию по запуску приложения
- Убедится, что java, maven, git и docker установлены на ПК и docker запущен
- Клонировать репозиторий в удобную папку: git clone https://github.com/ne-kit-28/GreenAtomTest.git
- Перейти в папку с микросервисом: cd GreenAtomTest
- Собрать образ с помощью команды: mvn spring-boot:build-image
- Вернутся в исходный каталог: cd ..
- Перейти в каталог с docker-compose файлом: cd environment
- Запустить контейнер: docker compose up Можно пользоваться микросервисом/ тестировать через Postman
C. Примеры тестовых запросов для проверки API-методов Изначально БД пустая, для заполнения необходимо выполнить запросы:
post запрос http://localhost:8080/api/file ,где в теле json: { "title": "book", "description": "This book is about feauture", "creationDate": "2018-10-02T20:34:11", "base64FileData": "0J/RgNC40LLQtdGCINC80LjRgCE=" } В ответ мы получим id созданного файла. Можно сделать еще несколько аналогичных запросов меняя тело, чтобы заполнить разными файлами.
get запрос http://localhost:8080/api/file/{id} , где id - идентификатор файла отданный микросервисом обратно при выполнении post запроса
get запрос http://localhost:8080/api/file/all?page=3&size=2 , где page - номер страницы, size - количество файлов на одной странице.
в pgAdmin логин и пароль можно поставить свои в docker-compose.yaml