Тестовое задание разработчика Python
Дано
Структура проекта:
- конфиг файлы в которых содержится вся необходимая для функционирования проекта информация (в том числе для бд, в отдельном файле)
- requirements.txt - файл в котором содержится список установленных модулей
- .py файлы проекта
Задание
Следующее задание является обязательным для выполнения.
Необходимо разработать HTTP сервер, способный принимать post/get запросы.
Типы post запросов:
- Запрос на сохранение данных в SQL бд (MYSQL 8.0)
- Запрос на сохранение данных в redis Дополнение: При всех запросах сохраняемые данные и полученные статусы req/resp должны дублироваться в log.json
Типы get запросов:
- Запрос на получение всех данных из redis
- Запрос на получение всех данных из mysql
- Запрос на получение всех данных из log.json
Для улучшения портабильности использовать виртуальное окуржение virtualenv.
Использование ORM (SQLAlchemy и др.) для работы с БД не допускается.
!!!ВАЖНО!!! использовать python3.6 или старше !!!ВАЖНО!!!
Дополнительные задания
Следующие задания не являются обязательными и имеют повышенную сложность, однако их выполнение является желаемым. Можно выполнить только некоторые из них. За каждое выполненное задание будут присваиваться дополнительные баллы.
- Выделить логику взаимодействия с SQL и редисом в отдельные классы, сделать их максимально гибкими, для упрощения теоретического расширения проекта.
- Реализовать обработку ошибок в процессе работы приложения, их логгирование и установку соответствующих кодов ответа в HTTP в случае ошибки.
- Реализовать возможность авторизации пользователей (авторизованным пользователям присваивать токены, по которым определять их права на доступ к функционалу), закрыть доступ к get и post методам неавторизованным пользователям, добавить страницу с возможностью авторизации/регистрации, на основной странице для авторизованных пользователей выводить статистику из бд.
- Реализовать функционал вывода списком нарушителей режима сна: людей, которые в период времени 22:00 - 06:00 спали менее шести часов. Формат списка: Откуда был отправлен запрос (в случае выполнения пункта 3, здесь указать идентификатор пользователя и его ник) и перечисление дат, когда был нарушен режим.
- Добавить градацию уровней доступа, разделить функционал на части которые доступны разным типам пользователей, сделать суперпользователя которому доступен весь функционал, добавить ему возможность менять права доступа других пользователей.
- Использовать для создания примитивного фронтенда (исключительно необходимого минимума для работы приложения) vue js или typescript
- Создать тесты для проверки сервера с использованием библиотеки requests или любой другой.
Примечания
Для проверки работы можно использовать REST-клиенты, например Insomnia, Postman или иные.
Необходимые внешние пакеты необходимо добавить в requirements.txt