Code Monkey home page Code Monkey logo

cupofjavabesthack2022's Introduction

Cup of Java cup

Финал BEST Hack '22

Направление Java Backend

Участники:

  • Борисовская Алена Алексеевна (Alienstemple) (капитан)

  • Игнатов Денис Сергеевич (Denis-spec989)

  • Циндяйкин Вадим Денисович (Vadim-Burns)

  • Чихутова Дарья Денисовна (dashachickutova)


Постановка задачи

Создать сервис, работающий с данными о заправках, который получает в форматах: ".csv",".json",".xml" и отправляет их в формате .json.


Решение задачи

Реализация получения, добавления и отправки данных из нашей БД

Созданы 2 интерфейса конвертера Converter и ConverterService. Интерфейс Converter нужен для создания конвертеров и их поиска. Разработчику остается просто реализовать интерфейс и создать бины ConvertorsConfig, а ConvertorsService автоматически подтянет новый конвертор и использует его. Это позволяет сохранять данные в БД, без необходимости дополнительного преобразования кода сервиса.

Созданы контроллеры для маппинга файлов или тела запроса соответствующего формата и их дальнейшего сохранения через сервисы - CsvController,JsonController,XMLController.

Создан контроллер PetrolController для маппинга на получение данных из БД.

Создан сервис PetrolStationServiceImpl для сохранения данных в БД и получения данных из БД.

Созданы конверторы CsvConverter,JsonConverter,XmlConverter имплементирующие от ConverterImpl, преобразующие файлы соответствующих форматов в коллекцию PetrolStationDtoList состоящую из объектов PetrolStationDto с её записью в БД через сервис PetrolStationServiceImpl.

Для получения данных из БД на репозиторном слое была добавлена фильтрация - посредством двух методов. В метод findAllByFilter можно указать любое поле petrolstation для поиска записей, если какое-то поле не указано оно просто игнорируется,а метод findAllByFilterPaginated дополнительно дает возможность пагинации.


##Деплой

Пару слов о Docker - для удобства обработки https трафика мы написали конфиг docker и docker-compouse и развернули. Также использовался nginx.


Вывод

Нами был создан гибкий,быстрый сервис для работы с данными о заправках.

Потестировать можно через сваггер - https://api.inagent.site/swagger-ui/#/


Ограничения

В связи с сжатыми сроками создания продукта, есть ограничения на вид получаемой информации в файле формата .xml.

Данные должны храниться примерно в таком виде:

<?xml version="1.0" encoding="UTF-8"?>
<PetrolStationList>
    <PetrolStation>
        <address>Denisaddress</address>
      <latitude>44.62423</latitude> 
      <longtitude>40.05552</longtitude>  
        <name>01023</name>
        <country>RU</country>
        <phone>(8772) 531.50</phone>
        <region>Республика Адыгея</region>
    </PetrolStation>
    <PetrolStation>
        <address>г.Майкоп, Батарейная, 385 А</address>
        <latitude>44.57913</latitude> 
        <longtitude>0</longtitude> 
        <name>01024</name>
        <country>RU</country>
        <phone>(8772) 56-38-20</phone>
        <region>-</region>
    </PetrolStation>
</PetrolStationList>

Не допускается замена порядка полей.

Не допускается хранение пустых полей(палка о двух концах, не хватает четкого ТЗ. Мы можем легко проверить на отсутствие значения переменной, и вместо нее записать либо 0 либо "". Но допустим, если мы знаем , что обязательно все поля должны быть заполнены в xml - тогда краш программы- лишняя проверка :shipit: ).

Не допускается многоуровневое вложение(ограничение - данное в условии задания).

cupofjavabesthack2022's People

Contributors

denis-spec989 avatar vadim-burns avatar wseng avatar borisovskayaalena avatar alienstemple avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.