Skip to content

denis-sukhoverkhov/billing

Repository files navigation

Billing

Стек:

  • python3.8
  • fastapi
  • SqlAlchemy
  • PostgreSql
  • pytest - авто-тесты

Запуск проекта - docker-compose up Документация - http://0.0.0.0:8000/api/v1/docs Запуск авто-тестов - docker-compose -f docker-compose-test.yml up

Фреймворк fastapi для меня в новинку, это первое приложение написанное мной на этом fastapi. Бенчмарки по немумне понравились, со всеми плюсами описанными в документация согласен. Планирую использовать его в продакшене.

SqlAlchemy взял в качесвте ORM по заданию, поэтому написал синхронный код. В ситуации когда есть больше времени - я бы поисследовал производительность сервиса с ORM и без ORM, без ORM можно было бы использовать Query-builder к примеру из алхимии и использовать iopg. Это бы исключило блокировки при общении с бд и в теории дало бы большую производительность. В общем - нужно исследовать, сейчас это синхронный код.

Заложил структуру проекта аля DDD, есть автоматические тесты.

Важные моменты в реализации API

Уровень изоляции READ COMMITTED, считаю его достаточным для реализации текущегой API)

Запрос создания пользователя с кошельком

Достаточно обернуть создание пользователя и кошелька в транзацию, то есть создастся все или ничего

Запрос на пополнение счета

Использовал атомарные операции postgress

Запрос на перевод денег с одного кошелька на другой

Использовал конструкцию select for update