Skip to content

Latest commit

 

History

History
108 lines (68 loc) · 8.16 KB

File metadata and controls

108 lines (68 loc) · 8.16 KB

Тестовое задание для вступления в секту

Данное задание нацелено на определение примерного уровня вашей прошаренности и обязательно для выполнения всем желающим вступить в секту. Есть 4 варианта задания: Intern, Junior, Middle и Senior, каждый вариант, очевидно, сложнее предыдущего. Для вступления обязательно выполнить хотя бы Intern, однако имеет смысл делать более сложные варианты, если претендуете на соответствующий уровень.

Общие требования к заданию

  • Проект должен быть выполнен на C++17;
  • Приветствуется использование фич современных плюсов (к примеру, std::filesystem), а также ООП;
  • Выполненное задание требуется залить на свой Github;
  • Запрещено использовать сторонние библиотеки (Boost и пр.).

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

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

Файл "Шаблон отчёта"

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

Text {parameter1} text {parameter2} text {*parameter3}

Можно считать, что символы “{}” никогда не появляются в произвольном тексте.
Обязательные параметры отмечаются символом “*”. Обязательным является тот параметр, без значения которого отчёт генерироваться не должен. Для обязательных текстовых параметров их значение должно присутствовать в файле, содержащем значения текстовых параметров. Если параметр не является обязательным и его значение не удалось получить — в отчёт подставляется пустая строка.
Ниже приведён пример шаблона отчёта:

Dear {*user_name},
Thank you very much for choosing the services of our company!
Your order number {*order_number} will be delivered in 10 working days after {current_date}.
Sincerely yours,
Online store administration.

Intern

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

  • Файл с шаблоном отчёта;
  • Файл, содержащий значения текстовых параметров (каждый i-й параметр находится на i-й строчке).

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

  • Файл со сгенерированным отчётом (отчёт можно просто выводить на экран).

Junior

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

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

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

  • В зависимости от аргументов командной строки:
    • "-f" – файл со сгенерированным отчётом;
    • "-c" – вывод сгенерированного отчёта в консоль.

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

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

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

Middle

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

Те же, что у Junior.

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

Те же, что у Junior + лог-файл, содержащий сообщения об ошибках и записи об успешной генерации отчёта.

Логирование

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

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

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

Прочие требования

  • Сборка проекта осуществляется через CMake;
  • Необходимо разработать структуру данных для хранения параметров в памяти и регистрации функциональных параметров (см. Типы параметров отчёта).

Senior

На этом уровне необходимо построить клиент-серверное приложение (на сокетах):

Клиент

Передаёт JSON/XML-файл с параметрами в виде строки на сервер и получает сгенерированный сервером отчёт.

Сервер

Хранит произвольный шаблон отчёта, принимает строку с JSON/XML-файлом и отправляет сгенерированный отчёт либо лог с ошибкой.

Прочие требования

  • Те же, что у Middle;
  • Работа с сокетами асинхронная (допускается использование библиотеки libevent);
  • Сильно поощряется наличие кроссплатформенности, приветствуется написание кода для UNIX-подобных ОС.