alashkov83 / Bewise_1

Тестовое задание 1

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Проект Quiz Service

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

  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, пользоваться аннотацией типов.

Стек технологий

  • Язык: Python 3 (CPython)
  • БД: PostgreSQL
  • Фрейморк: Flask
  • ORM: SQLAalchemy
  • Среда контейнеров: Docker(docker-compose)

Инструкция по сборке и запуску

Для удобства работы сервис включен в оркестратор вместе с ДБ и pgAdmin4 (Для просмотра ДБ). На уровне оркестратора они объединены в одну сеть. В качестве веб-сервера используется отладочный сервер Flask, поэтому данную установку не рекомендуется использовать в проде при серьёзных нагрузках и из за проблем с безопасностью. Сервис стартует (по-умолчанию) на порту 8080.

  • Старт сервиса (с БД и pgAdmin):
docker-compose --profile apiapp up -d
  • Старт только БД:
docker-compose --profile only_db up -d
  • Старт БД и pgAdmin:
docker-compose --profile admin_db up -d

В папке запуска при этом будут созданы папки для хранения данных БД, настроек БД и pgAdmin.

  • Проверка работы:
docker-compose ps

В контейнер встроена также дополнительная проверка состояния БД.

  • Просмотр логов:
docker-compose logs

Для ручной сборки и запуска контейнера только с сервисом можно использовать команды:

sudo docker build -t apiapp_image:latest .
docker run --name apiapp_container --rm -d -p 8080:8080 -e POSTGTRES_SQL_URI=postgresql://quizuser:quiz1234@localhost:5432/quizdb apiapp_image:latest

Параметры для аутентификации БД:

  • Имя БД: quizdb
  • Имя пользователя: quizuser
  • Пароль БД: quiz1234 (мастер пароль от pgAdmin тот же)
  • Имя хоста БД для подкючение pgAdmin в контейнере: quizdb_container

Пример запроса

  • Curl
curl -X POST http://localhost:8080/ -H 'Content-Type: application/json' -d '{"questions_num":10}'
  • testAPI (находится в каталоге проекта)
python testAPI.py

About

Тестовое задание 1


Languages

Language:Python 89.2%Language:Dockerfile 10.8%