Skip to content

ne-kit-28/GreenAtomTest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

GreenAtomTest

А. Описание решения Микросервис написан на 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. Инструкцию по запуску приложения

  1. Убедится, что java, maven, git и docker установлены на ПК и docker запущен
  2. Клонировать репозиторий в удобную папку: git clone https://github.com/ne-kit-28/GreenAtomTest.git
  3. Перейти в папку с микросервисом: cd GreenAtomTest
  4. Собрать образ с помощью команды: mvn spring-boot:build-image
  5. Вернутся в исходный каталог: cd ..
  6. Перейти в каталог с docker-compose файлом: cd environment
  7. Запустить контейнер: 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages