Стек технологий: Java8, H2 database, Hibernate, SpringBoot
При старте приложения создаются таблицы и автоматически заполняются данными в соответствии с переданным в виде параметра командной строки XML-файлом. Про формат ссылок можно почитать здесь.
Чтобы запустить проект, надо скомпилировать классы и в терминале прописать одну из следующих команд:
- mvn spring-boot:run -Dspring-boot.run.arguments="file:src\main\resources\input.xml"
- mvn spring-boot:run -Dspring-boot.run.arguments="url:file:///D:/ira/IdeaProject/test-alfabank/src/main/resources/input.xml"
- mvn spring-boot:run -Dspring-boot.run.arguments="classpath:input.xml"
!!! Обратите внимание, что при указании пути через локальный url необходимо подать на вход абсолютный (полный) путь к файлу. В других случаях достаточно относительного пути.
http://localhost:8080/h2/ - консоль СУБД Н2. Здесь можно посмотреть таблицы и их содержимое. Все креды к бд описаны в файле src\main\resources\application.properties
Чтобы выгрузить данные из бд в файл, необходимо в файле application.properties изменить параметр spring.datasource.url property на файловый вывод (деактивировать строчку spring.datasource.url=jdbc:h2:file:./data/fileDB)
После загрузки файла приложение работает, как REST-сервис, который возвращает id предметов заданного цвета (color), содержащиеся в ящике c заданным идентификатором (idBox) с учётом того, что в ящике может быть ещё ящик с предметами требуемого цвета.
Пример post-запроса
POST /test HTTP/1.1
Host: localhost
Accept: application/json
Content-Type:application/json
Content-Length: 25
{"boxId":"1","color":"red"}
Ссылка имеет следующий формат: type:path, где:
- type - тип ссылки
- path - путь к файлу
Ссылка определяет источник, из которого загружаются данные в XML-формате.
Тип ссылки (type):
- file (внешний файл)
- classpath (файл в classpath)
- url (URL)
Примеры:
- file:input.xml
- classpath:input.xml
- url:file:/input.xml
- Ящики могут быть пустыми или содержать предметы или другие ящики
- У каждого ящика и предмета есть id
- ID какого-либо предмета и какого-либо ящика могут совпадать, но в совокупности предметов они уникальны (как и в совокупности ящиков)
- Предметы могут не иметь цвета
- Предметы могут быть не в ящике
- Вложенность ящиков может быть любой;