/dsp

Образчики моего кода, надерганные из недавнего проекта

Primary LanguageKotlin

Здесь собраны образчики моего кода, надерганные из недавнего проекта, в котором я участвовал.

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

Комменты в коде могут быть как на русском, так и на английском, потому что во мне периодически просыпается давняя привычка комментить код на буржуйском.

Представленный функционал:

  1. Подсистема отчетов
    Представляет собой настраиваемый и расширяемый движок, или если угодно микро-фреймворк, позволяющий выдавать отчеты в форматах XLSX, HTML и PDF из Excel-шаблонов на основе данных из БД (и не только).

    Для того чтобы сделать новый отчет, нужно нарисовать новый шаблон в виде Excel-файла, и реализовать новый класс Fetcher'а для выборки данных.

    Верстка в PDF была написана с нуля, т.к. имеющиеся библиотеки были либо проприетарны, либо не предоставляли нужного функционала.

    См. также: Презентация к докладу на внутреннем митапе

  2. "Умный поиск" на основе Elacticsearch
    В разных местах веб-интерфейса пользователь имеет возможность ввести строку поиска, тут же в реальном времени ему выдается список результатов, динамически обновляющийся по мере ввода в строку поиска. Поиск ведется в соответствии с бизнес-контекстом формы, откуда ведется поиск.

    Обновление поисковых индексов ведется в режиме, приближенном к риалтайму. Триггерами БД заполняется таблица с очередью изменений, которая постоянно обрабатывается джобом инкрементальной индексации.

    Здесь представлена вторая версия поискового движка, пришедшая на смену более ранней, которую в свое время разрабатывал тоже я.

    См. также: Описание API для фронтэндеров

  3. Функционал согласования изменений в объектах системы
    Пользователь что-то изменяет в интерфейсе, при этом регистрируется запрос, который передается в смежную систему. Изменения согласовываются, либо отклоняются оператором (возможно с задержкой), после чего ответ возвращается обратно. Обмен происходит через Кафку. Далее, если решение положительное, изменения применяются к экземплярам сущностей.

    По каждому атрибуту решение может быть принято независимо от остальных. Запросы могут включать в себя иерархически связанные между собой сущности.

    Задача решалась максимально обобщенно, с тем чтобы в любой момент можно было расшириться на любые типы сущностей.

    См. также: Описание формата обмена для смежных разработчиков

  4. Также россыпью представлены кое-какие утилиты за моим авторством, использующиеся в проекте.