└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Тестовое задание для стажёра Backend в команду Trade Marketing. 2 | 3 | Нужно разработать микросервис для счетчиков статистики. Сервис должен уметь взаимодействовать с клиентом при помощи REST API или JSON RPC запросов. Также нужно реализовать валидацию входных данных. 4 | 5 | ## API методы: 6 | - Метод сохранения статистики 7 | - Метод показа статистики 8 | - Метод сброса статистики 9 | 10 | ## Метод сохранения статистики. 11 | Принимает на вход: 12 | - **date** - дата события 13 | - **views** - количество показов 14 | - **clicks** - количество кликов 15 | - **cost** - стоимость кликов (в рублях с точностью до копеек) 16 | 17 | Поля **views**, **clicks** и **cost** - опциональные. 18 | Статистика агрегируется по дате. 19 | 20 | ## Метод показа статистики 21 | Принимает на вход: 22 | - **from** - дата начала периода (включительно) 23 | - **to** - дата окончания периода (включительно) 24 | 25 | Отвечает статистикой, отсортированной по дате. В ответе должны быть поля: 26 | - **date** - дата события 27 | - **views** - количество показов 28 | - **clicks** - количество кликов 29 | - **cost** - стоимость кликов 30 | - **cpc** = cost/clicks (средняя стоимость клика) 31 | - **cpm** = cost/views * 1000 (средняя стоимость 1000 показов) 32 | 33 | ## Метод сброса статистики 34 | Удаляет всю сохраненную статистику. 35 | 36 | ## Критерии приемки: 37 | - язык программирования: *Go/PHP/Python*. 38 | - можно использовать любое хранилище(*PostgreSQL, MySQl, Redis* и т.д.) или обойтись без него (*in-memory*). При использовании СУБД нужен файл с запросами на создание - - всех необходимых таблиц. 39 | - формат даты **YYYY-MM-DD**. 40 | - стоимость указывается в рублях с точностью до копеек. 41 | - простая инструкция для запуска (в идеале — с возможностью запустить в *docker*). 42 | 43 | ## Усложнения: 44 | - в методе показа статистики можно выбрать сортировку по любому из полей ответа. 45 | - покрытие unit-тестами. 46 | - документация (достаточно структурированного описания методов, примеров их вызова в README.md). 47 | --------------------------------------------------------------------------------