Один развивающийся и перспективный маркетплейс активно растет в настоящее время. Текущая команда разработки вовсю занята тем, что развивает ядро системы. Помимо этого, перед CTO маркетплейса стоит задача — разработать подсистему аналитики, которая на основе накопленных данных формировала бы разнообразные отчеты и статистику.
Вы — компания подрядчик, с которой маркетплейс заключил рамочный договор на выполнение работ по разработке этой подсистемы. В рамках первого этапа вы условились провести работы по прототипированию и определению целевого технологического стека и общих подходов к разработке.
На одном из совещаний с Заказчиком вы определили задачу, на которой будете выполнять работы по прототипированию. В качестве такой задачи была выбрана разработка отчета о периодах наибольших трат со стороны пользователей.
Аналитики со стороны маркетплейса предоставили небольшой срез массива данных (файл format.json) о покупках пользователей, на примере которого вы смогли бы ознакомиться с форматом входных данных. Каждая запись данного среза содержит следующую информацию:
- Идентификатор пользователя;
- Дата и время оформления заказа;
- Статус заказа;
- Сумма заказа.
В пояснительной записке к массиву данных была уточняющая информация относительно статусов заказов:
- COMPLETED (Завершенный заказ);
- CANCELED (Отмененный заказ);
- CREATED (Созданный заказ, еще не оплаченный);
- DELIVERY (Созданный и оплаченный заказ, который доставляется).
Необходимо разработать отчет, вычисляющий по полученному массиву данных месяц, когда пользователи тратили больше всего. Если максимальная сумма пользовательских трат была в более, чем одном месяце, отчет должен показывать все такие месяцы. В отчете должны учитываться только завершенные заказы.
Требования к реализации:
- Реализация должна содержать, как минимум, одну процедуру (функцию/метод), отвечающую за формирование отчета, и должна быть описана в readme.md в соответствии с чек-листом;
- В качестве входных данных программа использует json-файл (input.json), соответствующий структуре, описанной в условиях задания;
- Процедура (функция/метод) формирования отчета должна возвращать строку в формате json следующего формата:
- {«months»: [«march»]}
- {«months»: [«march», «december»]}
- Найденный в соответствии с условием задачи месяц должен выводиться на английском языке в нижнем регистре. Если месяцев несколько, то на вывод они все подаются на английском языке в нижнем регистре в порядке их следования в течение года.
Петров Игорь Андреевич
Решение состоит из 4-ех проектов:
- School2024.Domain
Проект содержит базовые сущности для решения:
- Order (Заказ)
- OrderStatus (Статус Заказа) - перечисление
- School2024.Application
В этом проекте описывается базовая бизнес-логика решения, содержит в себе интерфейсы, задуманные для специфичной реализации под разные задачи:
- IDTO - определение временных данных
- IDTOConverter - реализация разных ситуаций конвертации временных данных
- IOrderAnalyzer - аналитика заказов
- IReportCreator - создатель отчетов
- School2024.ServicesForTestTask
Реализация бизнес-логики для тестового задания
- BasicReportCreator - базовая реализация создателя отчетов
- OrderAnalyzer - реализация аналитики заказов
- WorkerDTOs - местный рабочий с конверторами, предоставляет конверторы и добавляет их в общий список
- \Models\InputingFileFeatures - описание файла с вводными данными, существует как отдельный сервис, для корректной работы внедрения зависимостей
- \Models\DTOs\OrderDTO - временные данные заказа, для корректной сериализации и десериализации Заказа при общих случаях транспортировки данных
- \DTOConverters\DTOConverterOrder - конвертер из временных данных в базовые для Заказа
- School2024.TestTask
Проект предоставляющий вариативность и упрощение получения отчета об аналитике
- TestTaskWorker - на основе сервиса(создателя отчета) предоставляет отчет в виде строки или в виде .json файла, путь к которому нужно указать! Конструктор обязательно запросит путь к файлу с данными о заказах
- TestTaskInitializer - статическая сущность предоставляющая рабочему сервис создателя отчета. Создает отчет и предоставляет ему сервисы.
- School2024.Tests
Тесты для проверки работы проекта School2024.TestTask
Также для быстрого показа функций решения, присутствует проект School2024.Presentation, в котором уже есть файл с данными(input.json). После его работы в папке проекта будет создан файл с результатами аналитики(result.json).
- Клонировав репозиторий, через терминал перейдите в папку \src, и соберите проекты с помощью .sln файла. Далее подключаем проект School2024.TestTask как библиотеку и тестируем ее функции в вашем решении.
- Иначе переходим в проект School2024.Presentation и передаем пути к файлам с заказами при запуске проекта, будет генерироваться ответ в файле result.json, в этой же директории
Шаг действий для
-
Таким образом решение соберется и будет готово к работе
cd .\src dotnet build School2024.sln
-
Иначе
cd .\src dotnet build School2024.sln cd .\School2024.Presentation dotnet run //Ваш путь к файлу с данными