Git Product home page Git Product logo

billing's Introduction

Changelog:

v0.0.20 - billing service MVP version
v0.0.30 - billing api update: add endpoint
v0.0.40 - esb on rabbitmq append
v0.0.42 - webhook enpoint for two stage billing process append

Этот репозиторий: https://github.com/26remph/billing.git

Billing сервис для on-line кинотеатра

О сервисе

Сервис реализующий возможность работы с платежными транзакциями пользователей.

Сервис реализует возможность оплаты товаров и услуг через внешние платежные сервисы. В сервис заложена возможность регулярной сверки проводимых операций. Учет и состояние расчетов по каждой транзакций. Структура хранения платежной информации позволяет делать расширенный аналитический учет.

1. Описание разрабатываемой функциональности

Севрис состоит из следующих компонент:

Billing API

  • Реализует возможность работы с внешними платежными системами, учитывая особенности интеграции каждой.
  • Реализует возможность сверки расчетов с внешним платежным провайдером.
  • Предоставляет возможность расширенной аналитики по пользовательским транзакциям.

По факту совершенной оплаты или отмены оплаты купленной услуги или товара реализует возможность постановки в очередь сигналов для внутренних сервисов кинотеатра, таких как auth service и notification service. В auth отправляются сигналы на предоставление доступа к контенту или его прекращении. В notification service отправляет сигнал об оповещении по email об успешной оплате.

Стек: FastAPI + alchemy + alembic + RabbitMQ
Хранилище: PostgresSQL Схема базы данных

Provider manager

Python классы реализующие проксирование запросов от внутреннего Billing API к внешнему API провайдера. Основан на абстрактом классе, который должен уметь обрабатывать следующие сценарии:

  • Обработка сценария одно стадийного платежа и двух стадийного платежа. Подробнее тут: Одностадийный и двухстадийный платеж
  • Обработка возврата от покупателя, в том числе частичного.
  • Отмена/подтверждение платежа при включенной настройке двух стадийной обработке платежа.

Оперирует такими сущностями как: Order - заказ покупателя Cart - корзина заказа покупателя Item - продукты или услуги купленные покупателем Operation - платежная транзакция

Как точку роста класса мжно обозначить:

  • работа с сущностью Recipient - чек покупателю.

Стек: Python + aiohttp + Pydantic

Admin panel

  • Обеспечивает возможность ручного редактирования и просмотра платежной информации администраторам Billing сервиса.
  • имеет свою админ панель

Scheduler

В MVP версии планировалась реализовать две переодиеских задачи:

  • CLEARING - сверка взаиморасчетов по проведенным операциям в конце дня и закрытие зависших транзакций. Обнаружение оплат которые не были получены в callback url Billing API сервиса.
  • RENEWAL-SUBSCRIPTION - Реализация переодического списания денег по заканчивающимся подпискам с отправкой. уведомлений

Стек: Celery + RabbitMQ + Cellery bit
Хранилище: Redis (в качестве результирующего бэкэнад Redis)

2. Архитектура решения

Схемы архитектуры

Графическое представление архитектуры и взаимосвязи между компонентами представлены на иллюстрации ниже.

Технологии

Общий стек технологий

FastAPI RabbitMQ Redis Postgres
Docker Gunicorn
pythonversion

3. Как запустить проект

Полный запуск на локальном хосте

  1. Для работы проекта необходимо установить docker. Проверить доступность команды docker compose в вашей ОС.

        docker compose -f ./docker-compose.yml up -d
  2. Запустить Billing API сервис в режиме разработки:

        make run

Дождаться запуска. Процедура должна завершится бкз ошибок.

  1. Если все прошло успешно, то будут доступны адреса (при настройке как в .env.example):

  2. Остановить сервисы командой:

        docker compose -f ./infra/docker-compose.yml down

4. Реализация

Представлена в репозитории.

Об авторах

billing's People

Contributors

26remph avatar

Watchers

 avatar

billing's Issues

Code review

Здравствуйте ! Отлично поработали ! Молодец разобрались с poetry и ruff (я и сам использую ruff :) ) Оставил небольшие рекомендации:

  1. Здесь не стоит хранить апи ключ в репозитории, из соображений безопасности. То же касается и паролей к БД.
  2. Тут можно использовать async_sessionmaker https://docs.sqlalchemy.org/en/20/orm/extensions/asyncio.html
  3. Тут некритично, но я бы рекомендовал писать более лаконичные описания ) вроде Database session manger.
  4. Тут можно вместо цифровых кодов использовать https://docs.python.org/3/library/http.html#http.HTTPStatus
  5. Тут похоже неплохо иметь TODO с планом что нужно доделать.
  6. Тут видимо просто ручка - заглушка ?
  7. Тут закомментированный код можно убрать.
  8. Тут по ЮКасса просто модули заглушки (они просто пустые)?
  9. Тут отладочный принт можно убрать.
  10. Здесь немного не понял зачем этот класс ?
  11. Тут и тут похоже на заглушки - имплементации нет.
  12. Тут почему у вас __main__.py с двумя подчеркиваниями, зачем так ? Ведь в коде я встретил у Вас и просто main.py.

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.