KirillYabl / TestTaskBewiseFirstQuestions

Первая часть тестового задания для должности python разработчика в Bewise

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Вопросы викторины

Цель проекта

Первая часть тестового задания в компанию bewise на должность python разработчика.

Как установить

  1. Клонировать репозиторий:
git clone  https://github.com/KirillYabl/TestTaskBewiseFirstQuestions.git
  1. Переименовать (или создать) файлы в директории src:
  • .dev.env.txt -> .dev.env
  • .env.txt -> .env

Это файлы переменных окружения, необходимых для запуска, самое важное в этих файлах:

  1. Заполнить переменные POSTGRES_*

  2. Переменная POSTGRES_HOST должна обязательно отличаться и должна быть равной db и testdb в файлах .env и .dev.env соответственно, потому что они так указаны в файлах docker-compose.yaml и docker-compose.dev.yaml соответственно, если вы захотите дать им другое значение, то поменяйте его также и в docker-compose

  3. Собрать боевое и тестовое (если нужно запускать тесты) окружения

docker compose build
docker compose -f docker-compose.dev.yaml build

Как запустить тесты

  1. Инициализировать БД и создать в ней таблицы (при первом запуске тестов), может выполняться около минуты
docker compose -f docker-compose.dev.yaml run --rm testapi python3 db_models.py
  1. Запустить тесты
docker compose -f docker-compose.dev.yaml run --rm testapi pytest
  1. Остановить контейнеры
docker compose -f docker-compose.dev.yaml down

Как запустить сервис

  1. Инициализировать БД и создать в ней таблицы (при первом запуске сервиса), может выполняться около минуты
docker compose run --rm api python3 db_models.py
  1. Запустить сервис
docker compose up

После этого сервис запусится по адресу 127.0.0.1:8000

Запросы можно отправлять как с со страницы документации, генерируемой FastApi

Так и непосредственно напрямую, например через curl:

curl -X POST http://127.0.0.1:8000 -H "Content-Type: application/json" -d '{"questions_num": 5}'

Переменные окружения

Название Значение по умолчанию Описание
SEARCH_QUESTIONS_QUERIES_LIMIT 4 Лимит запросов к API jservice, на один запрос пользователя, если лимит превышен, то ошибка
JSERVICE_API_DATE_FORMAT %Y-%m-%dT%H:%M:%S.%f%z Формат даты и времени в API jservice на случай изменения
LOGGING_LEVEL 1 Уровень логировани от 0 (не логировать) до 5 (только критические ошибки)
POSTGRES_PASSWORD DB_PASSWORD Пароль к БД
POSTGRES_USER USER_NAME Имя пользователя БД
POSTGRES_HOST db Имя хоста БД (значение также зашито в конфиге докера, поэтому менять нужно и там)
POSTGRES_PORT 5432 Порт БД (значение также зашито в конфиге докера, поэтому менять нужно и там)
POSTGRES_DB DB_NAME Имя БД
API_HOST 0.0.0.0 Хост API (из докера будет проецироваться в 127.0.0.1)
API_PORT 8000 Порт API

Техническое задание

  1. С помощью Docker (предпочтительно - docker-compose) развернуть образ с любой опенсорсной СУБД (предпочтительно - PostgreSQL). Предоставить все необходимые скрипты и конфигурационные (docker/compose) файлы для развертывания СУБД, а также инструкции для подключения к ней. Необходимо обеспечить сохранность данных при рестарте контейнера (то есть - использовать volume-ы для хранения файлов СУБД на хост-машине.
  2. Реализовать на Python3 веб сервис (с помощью FastAPI или Flask, например), выполняющий следующие функции:
    1. В сервисе должно быть реализован POST REST метод, принимающий на вход запросы с содержимым вида {"questions_num": integer}.
    2. После получения запроса сервис, в свою очередь, запрашивает с публичного API (англоязычные вопросы для викторин) https://jservice.io/api/random?count=1 указанное в полученном запросе количество вопросов.
    3. Далее, полученные ответы должны сохраняться в базе данных из п. 1, причем сохранена должна быть как минимум следующая информация (название колонок и типы данный можете выбрать сами, также можете добавлять свои колонки): 1. ID вопроса, 2. Текст вопроса, 3. Текст ответа, 4. - Дата создания вопроса. В случае, если в БД имеется такой же вопрос, к публичному API с викторинами должны выполняться дополнительные запросы до тех пор, пока не будет получен уникальный вопрос для викторины.
    4. Ответом на запрос из п.2.a должен быть предыдущей сохранённый вопрос для викторины. В случае его отсутствия - пустой объект.
  3. В репозитории с заданием должны быть предоставлены инструкции по сборке докер-образа с сервисом из п. 2., его настройке и запуску. А также пример запроса к POST API сервиса.
  4. Желательно, если при выполнении задания вы будете использовать docker-compose, SQLAalchemy, пользоваться аннотацией типов.

About

Первая часть тестового задания для должности python разработчика в Bewise

License:MIT License


Languages

Language:Python 98.5%Language:Dockerfile 1.5%