Skip to content

Test assignment for the Middle Python Developer position in RANKS.pro

Notifications You must be signed in to change notification settings

mabredin/ranks_test_task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

Тестовое задание для Python разработчика

Реализовать Django + Stripe API бэкенд со следующим функционалом и условиями:

  • Django Модель Item с полями (name, description, price)
  • API с двумя методами:
    • GET /buy/{id}, c помощью которого можно получить Stripe Session Id для оплаты выбранного Item. При выполнении этого метода c бэкенда с помощью python библиотеки stripe должен выполняться запрос stripe.checkout.Session.create(...) и полученный session.id выдаваться в результате запроса
    • GET /item/{id}, c помощью которого можно получить простейшую HTML страницу, на которой будет информация о выбранном Item и кнопка Buy. По нажатию на кнопку Buy должен происходить запрос на /buy/{id}, получение session_id и далее с помощью JS библиотеки Stripe происходить редирект на Checkout форму stripe.redirectToCheckout(sessionId=session_id)
  • Залить решение на Github, описать запуск в Readme.md
  • Опубликовать свое решение чтобы его можно было быстро и легко протестировать.

Бонусные задачи

  1. Запуск используя Docker
  2. Использование environment variables
  3. Просмотр Django Моделей в Django Admin панели
  4. Запуск приложения на удаленном сервере, доступном для тестирования
  5. Модель Order, в которой можно объединить несколько Item и сделать платёж в Stripe на содержимое Order c общей стоимостью всех Items
  6. Модели Discount, Tax, которые можно прикрепить к модели Order и связать с соответствующими атрибутами при создании платежа в Stripe - в таком случае они корректно отображаются в Stripe Checkout форме.
  7. Добавить поле Item.currency, создать 2 Stripe Keypair на две разные валюты и в зависимости от валюты выбранного товара предлагать оплату в соответствующей валюте
  8. Реализовать не Stripe Session, а Stripe Payment Intent.

Описание

Сервис, общающийся со Stripe и создающий платежные формы для товаров и заказов. На текущий момент реализовано:

  • Реализованы модели Stripe и Order в models.py
  • Получение HTML страниц со списком товаров или заказов, с информацией о выбранном товаре или заказе, об успешной оплате или прерывания оплаты
  • Получение Stripe Session Id для оплаты выбранного Item через метод GET по адресу /buy/{id}
  • Вынос environment variables в файл .env (предоставлен)
  • Очищен код с помощью линтеров black и isort
  • Настроена Django Admin панель для просмотра, создания, редактирования и удаления данных моделей
  • Контейнеризация приложения через docker
  • Запуск приложения на удаленном сервере (демонстрация по запросу)

Технологии

Сервис разработан с использованием Django, Django Rest Framework, библиотеки stripe.
В качестве БД использовался PostgreSQL. Для обеспечения корректной связи Django и PostgreSQL использовалась библиотека psycopg2-binary.
Также проект и БД были обернуты в Docker-контейнеры и запускаются при помощи docker compose

Запуск

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

git clone https://github.com/mabredin/ranks_test_task.git

Перейти в папку ranks_test_task/src/

cd ranks_test_task/src/

*Если запуск производится на сервере и используется публичный ip, необходимо добавить его в .env в ALLOWED_HOSTS через запятую

Запустить контейнер

make docker-up

Проверить результат (по желанию)

docker ps

Успешный результат команды представлен на рисунке ниже:

Заполнение данных

Для заполнения данных необходимо выполнить несколько шагов:

  • Сделать миграции
docker compose run web python manage.py migrate
или
sudo docker compose run web python manage.py migrate
  • Создать пользователя для доступа к административной панели Django
docker compose run web python manage.py createsuperuser
или
sudo docker compose run web python manage.py createsuperuser
  • Ввести данные пользователя.
  • В браузере перейти по адресу 0.0.0.0:8000/admin или <server_ip>:8000/admin
  • Войти под созданным пользователем и создать товары (заказы).
  • Снова перейти по адресу 0.0.0.0:8000/ или <server_ip>:8000/
  • Сервис готов.

Пример работы

Страница с информацией о товаре

Страница оплаты товара

Страница с информацией о заказе

Страница оплаты заказа

Пример работы сервиса на удаленном сервере

Примечание

Так как проект представляет собой выполнение тестового задания, в репозитории присутствуют файлы .env, Makefile и requirements_dev.txt

About

Test assignment for the Middle Python Developer position in RANKS.pro

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published