Giter VIP home page Giter VIP logo

tt_bewise's Introduction

Тестовое задание на позицию junior python developer в компанию Bewise.ai

Перед запуском необходимо обновить .env под свои нужды, для докера можно не трогать

Установка с Docker

Prerequisites: установленный докер, проверить что нет совпадающих volume

docker-compose up
  1. БД скрыта от внешних запросов, взаимодействует только с приложением, по умолчанию порт контейнера стоит 5432
  2. Приложение поднимается на http://localhost:8000, порт по необходимости можно изменить в docker-compose файле
  3. Тестировать эндпойнт можно здесь http://localhost:8000/docs (Swagger)

Локальная установка

prerequisites: установленные python 3.11.3, postgres 15

  1. Настроить пустую бд, без таблиц
  2. Указать всё необходимоe в .env
  3. Установить окружение можно либо:
pip install -r requirements.txt

либо:

poetry install
  1. Если необходимо включить логи, это можно сделать в app/settings, в классе AppDescriptions необходимо установить флаг debug=True

находясь в корневой директории

  1. Накатить миграции
alembic upgrade head
  1. При необходимости можно прогнать тесты (в докере они прогоняются при запуске контейнера)
  2. Запустить приложение командой
uvicorn app.main:app
  1. Повторить п2 п3 из Установка с докером

Инструменты

  • sqlalchemy
  • alembic
  • pydantic
  • fastapi
  • loguru
  • docker
  • postgresql

Схема

alt text

Замечание

Не очень понял следующие пункты задания:

  1. Необходимо возвращать последний вопрос или предпоследний (выбрал предпоследний)
  2. Повторная подгрузка вопросов, если предыдущий вопрос уже есть в БД (как то противоречит с 1м пунктом)

По итогу сделал так:

  1. Грузится questions_num вопросов, если есть повторяющиеся, повторяем до тех пор пока не сохраним в кол-ве questions_num
  2. Возвращается предпоследний вопрос (а он по условию задачи может быть пустым), даже несмотря на то, что questions_num большой. Соответсвенно, если Вы передаете questions_num = 5, то Вам вернется 4й сохраненный вопрос (при условии что повторений не было). А если они были, то соответсвенно предпоследний из {questions_num + кол-во ошибок} вопросов которые мы подгружали.

Идеи по улучшению

заменить установку apt-get -y install libpq-dev gcc в докерфайле, слишком сильно увеличивает образ, но необходимая мера, т к psycopg2 не хотел искать конфиг. Как вариант поставить psycopg-binary?

tt_bewise's People

Contributors

yuiauo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.