Giter Site home page Giter Site logo

igorpetrovcm / school2024-test-task1 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from croc-code/school2024-test-task1

0.0 0.0 0.0 360 KB

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

C# 100.00%

school2024-test-task1's Introduction

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Условие задания

Один развивающийся и перспективный маркетплейс активно растет в настоящее время. Текущая команда разработки вовсю занята тем, что развивает ядро системы. Помимо этого, перед CTO маркетплейса стоит задача — разработать подсистему аналитики, которая на основе накопленных данных формировала бы разнообразные отчеты и статистику.

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

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

Аналитики со стороны маркетплейса предоставили небольшой срез массива данных (файл format.json) о покупках пользователей, на примере которого вы смогли бы ознакомиться с форматом входных данных. Каждая запись данного среза содержит следующую информацию:

  • Идентификатор пользователя;
  • Дата и время оформления заказа;
  • Статус заказа;
  • Сумма заказа.

В пояснительной записке к массиву данных была уточняющая информация относительно статусов заказов:

  • COMPLETED (Завершенный заказ);
  • CANCELED (Отмененный заказ);
  • CREATED (Созданный заказ, еще не оплаченный);
  • DELIVERY (Созданный и оплаченный заказ, который доставляется).

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

Требования к реализации:

  1. Реализация должна содержать, как минимум, одну процедуру (функцию/метод), отвечающую за формирование отчета, и должна быть описана в readme.md в соответствии с чек-листом;
  2. В качестве входных данных программа использует json-файл (input.json), соответствующий структуре, описанной в условиях задания;
  3. Процедура (функция/метод) формирования отчета должна возвращать строку в формате json следующего формата:
    • {«months»: [«march»]}
    • {«months»: [«march», «december»]}
  4. Найденный в соответствии с условием задачи месяц должен выводиться на английском языке в нижнем регистре. Если месяцев несколько, то на вывод они все подаются на английском языке в нижнем регистре в порядке их следования в течение года.

Автор решения

Петров Игорь Андреевич

Описание реализации

Решение состоит из 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).

Инструкция по сборке и запуску решения

  1. Клонировав репозиторий, через терминал перейдите в папку \src, и соберите проекты с помощью .sln файла. Далее подключаем проект School2024.TestTask как библиотеку и тестируем ее функции в вашем решении.
  2. Иначе переходим в проект School2024.Presentation и передаем пути к файлам с заказами при запуске проекта, будет генерироваться ответ в файле result.json, в этой же директории

Шаг действий для

  1. Таким образом решение соберется и будет готово к работе

    cd .\src
    dotnet build School2024.sln
    
  2. Иначе

    cd .\src
    dotnet build School2024.sln
    cd .\School2024.Presentation
    dotnet run  //Ваш путь к файлу с данными
    

school2024-test-task1's People

Contributors

igorpetrovcm avatar ph4rr3ll 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.