Нужно реализовать 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