+380 57 755 34 05 team@fulcrum.software


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

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

Необходимо разработать  упрощенный вариант Text Report System для создания параметризованных текстовых отчетов.

Входные данные

  • Файл с шаблоном отчета.
  • JSON/XML/INI-файл, содержащий значения текстовых параметров. Формат этого файла — произвольный и подразумевается, что ошибок форматирования в нем не будет.

Выходные данные

  • Файл со сгенерированным отчетом (можно отчет выводить просто на  экран).
  • Лог-файл, содержащий сообщения об ошибках и записи об успешной генерации отчета .

Файл «Шаблон отчета»

Шаблон отчета – это простой текстовый файл. Проблему локализации можно не решать — считая, что весь текст у нас на английском языке. В этом файле в произвольном тексте размещены параметры в виде следующей конструкции:

Тескт {параметр1} текст {параметр2} текст {*параметр3}

Можно считать, что символы “{}” никогда не появляются в произвольном тексте.

Обязательные параметры отмечаются символом “*”. Обязательным является тот параметр, без значения которого отчет генерироваться не должен. Для обязательных текстовых параметров их значение должно присутствовать в JSON/XML/INI-файле.  Если параметр не является обязательным и его значение не удалось получить — в отчет подставляется пустая строка.

Ниже приведен пример шаблона отчета

Здравствуйте {*user_name},Большое спасибо, что вы решили воспользоваться услугами нашей компании.
Ваш заказ номер {*order_number} будет доставлен через 10 рабочих дней после {current_date}. С Уважением, Администрация интернет магазина.

 Типы параметров отчета

Параметры отчета могут быть двух видов

  • Текстовые параметры. В этом случае для работы с ними достаточно совпадения имени параметра в файле шаблона отчета и в JSON/XML/INI-файле без учета регистра.
  • Функциональные параметры. Представляют собой результат вызова предопределенной функции.  Допустимы только зарегистрированные в программе имена подобных параметров, каждому из которых соответствует вызов определенной функции. При попадании имени функционального параметра в JSON/XML/INI—файл должна генерироваться ошибка. (В рамках тестового задания должна быть реализована только одна функция – возвращающая current_date. Формат даты времени – произвольный).

Необходимо разработать структуру данных для хранения параметров в памяти и регистрации функциональных параметров.

Логирование

Как часть проекта необходимо разработать класс, реализующий функциональность логирования. Для упрощения — лог сообщения и ошибки могут выводиться на экран. Логируется факт успешной генерации отчета и перечисленные ниже ошибки.

  • Если в процессе генерации отчета любой из обязательных параметров не получил значения.
  • Если имя зарегистрированного функционального параметра попало в JSON/XML/INI-файл.
  • Если вызов функции, инициированный функциональным параметром привел к ее внутреннему исключению.
  • Ошибка чтения файла отчета
  • Ошибка чтения JSON/XML/INI-файла

При возникновении любой из этих ошибок — отчет не создается.

Возможные дополнительные вопросы

  • Как бы вы реализовали хранение параметров в шаблоне отчета при условии, что символы “{}” могут присутствовать в произвольном тексте?
  • Как расширить вашу реализацию для добавления новых типов параметров?

В вашем решении мы ждем применения удачной объектно ориентированной декомпозиции.

Удачи!!!