Giter VIP home page Giter VIP logo

ddd-user-pay's Introduction

Тестовое задание. Backend, Python

Необходимо реализовать асинхронное веб приложение в парадигме REST API.

Стек:

  1. База данных - PostgreSQL
  2. SQLalchemy - для работы с базой данных
  3. FastApi
  4. Docker Compose

Необходимо реализовать работу со следующими сущностями: Пользователь Администратор Счет - имеет баланс, привязан к пользователю Платеж(пополнение баланса) - хранит уникальный идентификатор и сумму пополнения счета пользователя

Пользователь должен иметь следующие возможности:

  1. Авторизоваться по email/password
  2. Получить данные о себе(id, email, full_name)
  3. Получить список своих счетов и балансов
  4. Получить список своих платежей

Администратор должен иметь следующие возможности: Авторизоваться по email/password Получить данные о себе (id, email, full_name) Создать/Удалить/Обновить пользователя Получить список пользователей и список его счетов с балансами

Для работы с платежами должен быть реализован роут эмулирующий обработку вебхука от сторонней платежной системы. Структура json-объекта для обработки вебхука должна состоять из следующих полей:

  1. transaction_id - уникальный идентификатор транзакции в “сторонней системе”
  2. account_id - уникальный идентификатор счета пользователя
  3. user_id - уникальный идентификатор счета пользователя
  4. amount - сумма пополнения счета пользователя
  5. signature - подпись объекта

signature должна формироваться через SHA256 хеш, для строки состоящей из конкатенации значений объекта в алфавитном порядке ключей и “секретного ключа” хранящегося в конфигурации проекта ({account_id}{amount}{transaction_id}{user_id}{secret_key}).

Пример, для secret_key gfdmhghif38yrf9ew0jkf32:

{
  "transaction_id": "5eae174f-7cd0-472c-bd36-35660f00132b",
  "user_id": 1,
  "account_id": 1,
  "amount": 100,
  "signature": "7b47e41efe564a062029da3367bde8844bea0fb049f894687cee5d57f2858bc8"
}

При обработке вебхука необходимо:

  1. Проверить подпись объекта
  2. Проверить существует ли у пользователя такой счет - если нет, его необходимо создать
  3. Сохранить транзакцию в базе данных
  4. Начислить сумму транзакции на счет пользователя

Транзакции являются уникальными, начисление суммы с одним transaction_id должно производиться только один раз.

Для тестирования приложения в миграции должен быть создан:

  1. Тестовый пользователь
  2. Счет тестового пользователя
  3. Тестовый администратор

Для развертывания проекта необходимо реализовать docker compose конфигурацию состоящую из сервиса postgresql и сервиса приложения. К реализованному заданию должна прилагаться краткая инструкция по запуску проекта в двух вариантах - с использованием docker compose и без него. В инструкции также должны быть предоставлены email/password для пользователя и администратора по умолчанию созданных в миграции.

ddd-user-pay's People

Contributors

wit00 avatar scorp14 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.