/recruit-python

Тестовое задание соискателя Python

Тестовое задание разработчика Python

Дано

Структура проекта:

  • конфиг файлы в которых содержится вся необходимая для функционирования проекта информация (в том числе для бд, в отдельном файле)
  • requirements.txt - файл в котором содержится список установленных модулей
  • .py файлы проекта

Задание

Следующее задание является обязательным для выполнения.

Необходимо разработать HTTP сервер, способный принимать post/get запросы.

Типы post запросов:

  1. Запрос на сохранение данных в SQL бд (MYSQL 8.0)
  2. Запрос на сохранение данных в redis Дополнение: При всех запросах сохраняемые данные и полученные статусы req/resp должны дублироваться в log.json

Типы get запросов:

  1. Запрос на получение всех данных из redis
  2. Запрос на получение всех данных из mysql
  3. Запрос на получение всех данных из log.json

Для улучшения портабильности использовать виртуальное окуржение virtualenv.

Использование ORM (SQLAlchemy и др.) для работы с БД не допускается.

!!!ВАЖНО!!! использовать python3.6 или старше !!!ВАЖНО!!!

Дополнительные задания

Следующие задания не являются обязательными и имеют повышенную сложность, однако их выполнение является желаемым. Можно выполнить только некоторые из них. За каждое выполненное задание будут присваиваться дополнительные баллы.

  1. Выделить логику взаимодействия с SQL и редисом в отдельные классы, сделать их максимально гибкими, для упрощения теоретического расширения проекта.
  2. Реализовать обработку ошибок в процессе работы приложения, их логгирование и установку соответствующих кодов ответа в HTTP в случае ошибки.
  3. Реализовать возможность авторизации пользователей (авторизованным пользователям присваивать токены, по которым определять их права на доступ к функционалу), закрыть доступ к get и post методам неавторизованным пользователям, добавить страницу с возможностью авторизации/регистрации, на основной странице для авторизованных пользователей выводить статистику из бд.
  4. Реализовать функционал вывода списком нарушителей режима сна: людей, которые в период времени 22:00 - 06:00 спали менее шести часов. Формат списка: Откуда был отправлен запрос (в случае выполнения пункта 3, здесь указать идентификатор пользователя и его ник) и перечисление дат, когда был нарушен режим.
  5. Добавить градацию уровней доступа, разделить функционал на части которые доступны разным типам пользователей, сделать суперпользователя которому доступен весь функционал, добавить ему возможность менять права доступа других пользователей.
  6. Использовать для создания примитивного фронтенда (исключительно необходимого минимума для работы приложения) vue js или typescript
  7. Создать тесты для проверки сервера с использованием библиотеки requests или любой другой.

Примечания

Для проверки работы можно использовать REST-клиенты, например Insomnia, Postman или иные.

Необходимые внешние пакеты необходимо добавить в requirements.txt