По поводу сроков выполнения: тестовые задания принимаются до тех пор, пока открыта вакансия.
Результат лучше всего присылать ссылкой на репозиторий Github
В базе данных хранится список шаблонов форм.
Шаблон формы, это структура, которая задается уникальным набором полей, с указанием их типов.
Пример шаблона формы:
{
"name": "Form template name",
"field_name_1": "email",
"field_name_2": "phone"
}
Всего должно поддерживаться четыре типа данных полей:
email
телефон
дата
текст.
Все типы кроме текста должны поддерживать валидацию. Телефон передается в стандартном формате +7 xxx xxx xx xx, дата передается в формате DD.MM.YYYY или YYYY-MM-DD.
Имя шаблона формы задается в свободной форме, например MyForm или Order Form. Имена полей также задаются в свободной форме (желательно осмысленно), например user_name, order_date или lead_email.
На вход по url /get_form POST запросом передаются данные такого вида:
f_name1=value1&f_name2=value2
В ответ нужно вернуть имя шаблона формы, если она была найдена. Чтобы найти подходящий шаблон нужно выбрать тот, поля которого совпали с полями в присланной форме. Совпадающими считаются поля, у которых совпали имя и тип значения. Полей в пришедшей форме может быть больше чем в шаблоне, в этом случае шаблон все равно будет считаться подходящим. Самое главное, чтобы все поля шаблона присутствовали в форме.
Если подходящей формы не нашлось, вернуть ответ в следующем формате
{
f_name1: FIELD_TYPE,
f_name2: FIELD_TYPE
}
где FIELD_TYPE это тип поля, выбранный на основе правил валидации, проверка правил должна производиться в следующем порядке дата, телефон, email, текст.
В качестве базы данных рекомендуем использовать tinyDB, вместе с исходниками задания должен поставляться файл с тестовой базой, содержащей шаблоны форм. Но если сможете поднять и использовать контейнер Docker с MongoDB - это будет отличное решение, однако оно может отнять у вас много времени и не является обязательным.
Также в комплекте должен быть скрипт, который совершает тестовые запросы. Если окружение приложения подразумевает что-то выходящее за рамки virtualenv, то все должно быть упаковано в Docker контейнеры или таким способом, чтобы не приходилось ставить дополнительные пакеты и утилиты на машине. Все необходимые действия для настройки и запуска приложения должны находится в файле README.
Версия Python остается на ваш выбор. Мы рекомендуем использовать версию 3.6 и выше.
Список полей со значениями в теле POST запроса.
Имя наиболее подходящей данному списку полей формы, при отсутствии совпадений с известными формами произвести типизацию полей на лету и вернуть список полей с их типами.
Для реализации данного тестового задания применены следующий стек технологий:
- Python 3.10
- FastAPI 0.104
- UviCorn 0.24
- MongoDB
- PyMongo
- Motor
Архитектура проекта выполнена с разделением функциональных частей приложения по различным модулям.
В корневой директории проекта расположен файл Test task from e.Kom.postman_collection.json содержащий коллекцию запросов к API приложения.
Запуск приложения возможен в двух вариантах на локальной машине и с помощью инструментов контейнеризации Docker Compose.
Для запуска проекта на локальной машине необходимо выполнить следующие шаги:
- Скопировать код проекта на локальную машину.
- Создать тестовую базу данных e_Kom
- Создать и активировать виртуальное окружение выполнив команды в терминале:
$ python3 -m venv venv
$ source venv/bin/activate
- Установить зависимости проекта с помощью команд в терминале:
$ pip install -r requirements.txt
- Создать файл .env содержащий чувствительные данные для запуска приложения. В качестве основы содержания файла нужно использовать файл .env_sample. И записать в него значения необходимых данных для запуска сервера приложения и соединения с базой данных.
- Заполнить базу данных тестовыми значениями. Для этого выполнить следующую команду в терминале:
$ python3 fill_db.py
- Запустить север приложения выполнив команду в терминале:
$ uvicorn --reload main:app
- Для просмотра документации по API в браузере перейти по URL адресу http://127.0.0.1:8000/docs - для просмотра документации Swagger или по URL адресу http://127.0.0.1:8000/redoc - для просмотра документации redoc.
- Для выполнения запросов к API приложения можно использовать страницу swagger в браузере или выполнять запросы с помощью Postman.
- Для запуска приложения с помощью Docker Compose необходимо создать образы контейнеров выполнив команду в терминале:
$ docker compose build
- Создать и запустить контейнеры выполнив команду в терминале:
$ docker compose up -d
- Приложение будет доступно по URL адресу http://0.0.0.0:8000
- Если тестовое заполнение базы данных не подтягивает значения из установленного volume. Выполнить следующие команды в терминале:
$ docker compose exec -it api /bin/bash
# python3 fil_db.py
- Для просмотра документации по API в браузере перейти по URL адресу http://0.0.0.0:8000/docs - для просмотра документации Swagger или по URL адресу http://0.0.0.0:8000/redoc - для просмотра документации redoc.
- Для выполнения запросов к API приложения можно использовать страницу swagger в браузере или выполнять запросы с помощью Postman. В корневой директории проекта расположен файл Test task from e.Kom.postman_collection.json содержащий коллекцию запросов к API приложения.