Skip to content

This application is a result of a test case completion, see README.

Notifications You must be signed in to change notification settings

NotSoOld/rest-boxes

Repository files navigation

rest-boxes

Задание:

На вход в виде параметра командной строки java-приложению передаётся
имя XML-файла, в котором задано взаимное положение предметов(Item) и ящиков(Box).

Пример такого файла:

<?xml version="1.0" encoding="UTF-8"?>
<Storage>
 <Box id="1">
   <Item id="1"/>
   <Item color="red" id="2"/>
   <Box id="3">
       <Item id="3" color="red" />
       <Item id="4" color="black" />    
   </Box>
   <Box id="6"/>
   <Item id="5"/>
 </Box>
 <Item id="6"/>
</Storage>


- ящики могут быть пустыми или содержать предметы или другие ящики;
- у каждого ящика и предмета есть id;
- id какого-либо предмета и какого-либо ящика могут совпадать,
 но в совокупности предметов они уникальны (как и в совокупности ящиков);
- вложенность ящиков может быть любой;
- предметы могут не иметь цвета;
- предметы могут быть не в ящике

Написать приложение, которое:

1. заполняет при старте SQL-БД приведённой ниже структуры в соответствии с переданным XML-файлом
CREATE TABLE BOX
(ID INTEGER PRIMARY KEY,
CONTAINED_IN INTEGER
);
CREATE TABLE ITEM
(ID INTEGER PRIMARY KEY,
CONTAINED_IN INTEGER REFERENCES BOX(ID),
COLOR VARCHAR(100)
);

2. После загрузки файла приложение должно работать, как REST-сервис, который возвращает id предметов
заданного цвета(color) содержащиеся в ящике c заданным идентификатором (box)
с учётом того, что в ящике может быть ещё ящик с предметами требуемого цвета.
Например, на POST-запрос с телом запроса в JSON вида:
POST /test HTTP/1.1
Host: localhost
Accept: application/json
Content-Type:application/json
Content-Length: 25
{"box":"1","color":"red"}

для вышеприведённого XML должен быть ответ вида:
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 01 Sep 2019 12:00:26 GMT
[2,3]

Технологии

  • Использован Spring MVC с Spring Boot для реализации REST-сервиса
  • Стандартный функционал Java для парсинга XML-файла
  • PostgreSQL в качестве СУБД
  • Spring Data для работы с СУБД
  • Имеются тесты для проверки REST-контроллера
  • Приложение является docker-ready, т.е. можно запустить приложение с СУБД одной командой с помощью docker-compose

Затраченное время

  • Проектирование: 2ч
  • Реализация и подготовка тестов: 4ч
  • Ознакомление с docker-compose (ранее не пользовался им), подготовка и отладка конфигурации для него - 1ч

Оставшиеся вопросы

  • В начале казалось, что можно будет применить паттерн Composite. Не нашел, куда именно.
  • Читал про рекурсивные SQL-запросы, но они показались куда сложнее, чем просто реализовать рекурсию в коде (что, однако, привело к необходимости делать множество мелких запросов, что может влиять на производительность).
  • Есть ли иные фреймворки, кроме Spring MVC, которые можно использовать для реализации подобных приложений?

About

This application is a result of a test case completion, see README.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published