Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 14 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,19 @@
# Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

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

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

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

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

В пояснительной записке к массиву данных была уточняющая информация относительно статусов заказов:
- COMPLETED (Завершенный заказ);
- CANCELED (Отмененный заказ);
- CREATED (Созданный заказ, еще не оплаченный);
- DELIVERY (Созданный и оплаченный заказ, который доставляется).
## Автор решения
Клочков Никита Сергеевич
## Описание реализации
Импортирование модулей `json` и `datetime`;

Необходимо разработать отчет, вычисляющий по полученному массиву данных месяц, когда пользователи тратили больше всего. Если максимальная сумма пользовательских трат была в более, чем одном месяце, отчет должен показывать все такие месяцы. В отчете должны учитываться только завершенные заказы.
Функция `make_report` принимает json-файл в качестве переменной:
- Функция открывает `input.json`, записывает информацию из него в переменную `data`;
- Следующий цикл парсит дату заказов со статусом `COMPLETED` и `DELIVERY`, конвертирует её в объект `datetime`, извлекает имя месяца в нижнем регистре, а после записывает прибыль каждого месяца в `month_earnings`;
- Если данные по заказам имеются (`month_earnings.values()` != 0), функция находит максимальную выручку `max_earning` среди всех месяцев, записывает в `max_month_names` названия месяцев с максимальной выручкой;
- Функция формирует отчет `result` в нужном формате, конвертирует его в json;

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

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

## Описание реализации
- Если в файле `input.json` отсутствуют данные (пустой список), функция выведет пустой список (`max_month_names` = [ ]);

После вызова функции результат выводится в командную строку
## Инструкция по сборке и запуску решения
Запуск происходит следующим образом:
- Разместить `main.py` и `input.json` в выбранной директории
- Используя командную строку, перейти в эту директорию и ввести команду `python3 main.py`
File renamed without changes.
34 changes: 34 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import json
from datetime import datetime


def make_report(input_file):
with open(input_file, 'r') as file:
data = json.load(file)

month_earnings = {}

for order in data:
if order['status'] == 'COMPLETED' or order['status'] == 'DELIVERY':
order_date = datetime.strptime(order['ordered_at'], "%Y-%m-%dT%H:%M:%S.%f")
month_name = order_date.strftime('%B').lower()

if month_name not in month_earnings:
month_earnings[month_name] = 0.0

month_earnings[month_name] += float(order['total'])

if len(month_earnings.values()) == 0:
max_month_names = []
else:
max_earning = max(month_earnings.values())
max_month_names = [month for month, spending in month_earnings.items() if spending == max_earning]

result = {'months': max_month_names}
return json.dumps(result)


if __name__ == '__main__':
input_file = 'input.json'
report = make_report(input_file)
print(report)