🖥 Тестовое задание для стажера в юнит Market Intelligence



Нужно реализовать HTTP сервис для голосования. Например, для выбора самого популярного покемона. UI не нужен, достаточно сделать JSON API сервис. Должна быть возможность:



Задача



Нужно реализовать HTTP сервис для голосования. Например, для выбора самого популярного покемона. UI не нужен, достаточно сделать JSON API сервис. Должна быть возможность:



Создать новое голосование с разными вариантами ответов

Отдать свой голос за какой-либо вариант

Получить текущий результат голосования



Реализовать методы:



- POST /api/createPoll/ создать голосование c вариантами ответов

- POST /api/poll/ проголосовать за конкретный вариант: <poll_id, choice_id>

- POST /api/getResult/ получить результат по конкретному голосованию: <poll_id>



Структура и формат входных и выходных данных на ваше усмотрение.



Описание идеального решения

Задание декомпозировано, составлен иерархический список работ. Каждый пункт из этого списка может быть реализован за небольшое время.

Составлена схема архитектуры со всеми сущностями и их связями в Miro

Код слабо связан, функции не имеют побочных эффектов

История коммитов осмысленная. По ней видно, в каком порядке решалась задача.

Покрытие тестами >70%



Требования

Язык: Python

Результаты голосования должны храниться в базе данных. Мы обычно используем PostgreSQL и MongoDB, но можно выбрать любую другую.

Код нужно выложить на github (просьба не делать форк этого репозитория, чтобы не плодить плагиат)

Предоставить инструкцию по запуску приложения. В идеале (но не обязательно) – использовать контейнеризацию с возможностью запустить проект командой docker-compose up

Сервис должен отвечать на 8000 порту



Усложнения

Написаны тесты (постарайтесь достичь покрытия в 70% и больше)

Опишите, как изменится архитектура, если мы ожидаем большую нагрузку (Реализация не требуется)

Опишите, как можно защититься от накруток (Реализация не требуется)

Попробуйте оценить, какую нагрузку в RPS сможет выдержать ваш сервис



Что будет оцениваться

Декомпозиция задачи (например, в виде вложенного списка подзадач)

Архитектура решения

Корректность реализации

Подход к тестированию

Понятность инструкций и документации

Codestyle

[Python] Typehints



@python_job_interview