Coder Social home page Coder Social logo

drf_rocshers_test_assignment's Introduction

Better Uptime Badge main Lines of code

Make Python  Pytest  Poetry  Django  REST-API  Docker  PostgreSQL  Gunicorn 

Заданию было уделено ~15 часов. Покрытие кода тестами 100%

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

Python developer в команду https://www.linkedin.com/in/rocshers/

Стек

Python, Django, DRF, coverage, OpenAPI, Docker, Docker-compose, PostgreSQL.

Приложение

Сервис по управлению космическими станциями.

В сервисе хранится информация станциях и их позиции в пространстве. Через сервис можно CRUD станций и изменять из позицию.

У станции 3 координаты: x, y, z. При запуске станции ее координаты по умолчанию равны: 100, 100, 100. Станция исправно может двигаться только в диапазоне положительных координат. Если Станция вышла за эти координаты, мы считаем ее неисправной, даже если в будущем она вернулась обратно в разрешенную зону.

Позиция станции меняется через Указание: ось и значение смещения. За одно Указание можно сместиться только в одну сторону на неограниченное расстояние. Например: Указание #1: ось: x, смещение: -100. После получения этого указания станция сдвинется по оси X на 100 в лево

Также реализована система регистрации и аутентификации пользователей.

Авторизация возможна через сессии либо через токен.

API

Реализованы эндпоинты:

Управление станциями

  • GET, POST: /stations/
    • Схемы запроса и ответа совпадают со схемой модели "Станция".
  • GET, PUT, PATCH, DELETE: /stations/{station_id}/
    • Схемы запроса и ответа совпадают со схемой модели "Станция".
  • GET: /stations/{station_id}/state/ - Получение координат станции.
    • Схема ответа - позиция станции в пространстве:
      • x: int
      • y: int
      • x: int
  • POST: /stations/{station_id}/state/ - Изменение позиции станции.
    • Схема запроса совпадает со схемой модели "Указание".
    • Схема ответа - позиция станции в пространстве:
      • x: int
      • y: int
      • x: int

Управление учетными записями

  • GET, POST: /api/users/profile/

    • Регистрация нового пользователя / получение всех профилей
    • Схемы запроса и ответа совпадают со схемой модели пользователя
  • GET, PUT, PATCH, DELETE: /api/users/profile/{id}/

    • CRUD пользователей
    • Схемы запроса и ответа совпадают со схемой модели пользователя
  • POST: /api/users/login/

    • Получение токена авторизации для пользователя

Документация

На основе эндпоинтов генерируется swagger через drf-spectacular.

Использование

Без docker (используется база данных SQlite)

  1. Склонируйте данный репозиторий на свою локальную машину
  2. Убедитесь, что у вас установлен пакет Poetry
  3. Установите зависимости командой:
poetry install # или poetry install --with dev (для зависимостей разработки)
  1. Примените миграции:
poetry run python src/manage.py migrate
  1. Для запуска сервера используйте команду:
poetry run python src/manage.py runserver 
  1. Для авторизации создайте суперпользователя:
poetry run python src/manage.py createsuperuser 

либо зарегистрируйтесь по эндпойнту: /api/users/profile/

  1. Тестирование приложения происходит через pytest следующими командами:
poetry run pytest src 
  1. Покрытие кода тестами через coverage:
poetry run pytest src --cov 

Results

Использование через docker (используется база данных PostgreSQL)

  1. Склонируйте данный репозиторий на свою локальную машину
  2. Выполните команду:
docker-compose build  

затем

docker-compose up 
  1. Для авторизации создайте суперпользователя одной из команд
docker-compose exec web make su 

либо зарегистрируйтесь по эндпойнту: /api/users/profile/

Доступные Make команды

make venv           Создание виртуального окружения (poetry install)
make venv-dev       Создание виртуального окружения c dev зависимостями (poetry install --with dev)
make run            Запуск локального сервера (python manage.py runserver)
make run-prod       Запуск сервера через gunicorn
make format         Форматирование кода через black, isort.
make sh             Запуск django shell (python manage.py shell)
make su             Создать суперпользователя (python manage.py createsuperuser)
make migrations     Создание миграций (python manage.py makemigrations)
make migrate        Применение миграций (python manage.py migrate)
make static         Сбор статических файлов (python manage.py collectstatic)
make test           Запуск тестов (pytest src)
make cov            Запуск проверки покрытия кода тестами (pytest src --cov)
make docker         Сборка образа (docker-compose build)
make docker-run     Запуск контейнера (docker-compose up)
make docker-clean   Очистка всех образов приложения

drf_rocshers_test_assignment's People

Contributors

swankyalex avatar

Watchers

 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.