👩🏻‍💻Тестовое для backend-стажёра от Avito в команду Trade Marketing Продолжаем отрабатывать навыки на задачах, которые дают при прохождении собеседований 👇🏻

🔢Нужно разработать микросервис для счётчиков статистики. Сервис должен уметь взаимодействовать с клиентом при помощи REST API или JSON RPC-запросов. Также нужно реализовать валидацию входных данных.

API-методы: 1️⃣ Метод сохранения статистики. 2️⃣ Метод показа статистики. 3️⃣ Метод сброса статистики.

1️⃣ Метод сохранения статистики Принимает на вход: date – дата события; views – количество показов; clicks – количество кликов; cost – стоимость кликов (в рублях с точностью до копеек); Поля views, clicks и cost – опциональные. Статистика агрегируется по дате.

2️⃣ Метод показа статистики Принимает на вход: from – дата начала периода (включительно); to – дата окончания периода (включительно); Отвечает статистикой, отсортированной по дате. В ответе должны быть поля: date – дата события; views – количество показов; clicks – количество кликов; cost – стоимость кликов; cpc = cost/clicks (средняя стоимость клика); cpm = cost/views * 1000 (средняя стоимость 1000 показов).

3️⃣ Метод сброса статистики Удаляет всю сохранённую статистику.

✅ Критерии приёмки: 🔸Можно использовать любое хранилище (PostgreSQL, MySQl, Redis и т.д.) или обойтись без него (in-memory). При использовании СУБД нужен файл с запросами на создание всех необходимых таблиц. 🔸Формат даты YYYY-MM-DD. 🔸Стоимость указывается в рублях с точностью до копеек. 🔸Простая инструкция для запуска (в идеале – с возможностью запустить в docker).

🤯 Необязательные усложнения: 🔹В методе показа статистики можно выбрать сортировку по любому из полей ответа. 🔹Покрытие unit-тестами. 🔹Документация (достаточно структурированного описания методов и примеров их вызова в README.md).

#тестовое |⚡️ Забустить канал 🚀