Skip to content

dyens/billing

Repository files navigation

Billing app

Install

Docker

Приложение можно запустить с помошью Docker-compose Для этого достаточно выполнить в корне проекта

docker-compose up

В этом случае произойдет сборка контейнера, запустится postgresql, и приложение на порту 8080

Poetry

Можно использовать virtualenv/poetry для запуска и тестирования приложения. В системе дожны быть установлены poetry, python 3.7.5 (pyenv)

Для запуска приложения сначала нужно установить зависимости в виртуальное окружения

poetry install

Запустить базу даных

make deps

Затем

make run # или poetry run python main.py

Configuration

Для конфигурирования приложения используется dynaconf Настройки хрянятся в .secrets.toml (Так сделано только для удобства режима demo !) Makefile и docker-compose.yml - соотвествуют дефолтным настройкам. Если планируется менять .secrets.toml, то и Makefile, docker-compose.yml - следует тоже изменить.

Quickstart

После установки и конфигурирования приложения, предпологается что запущен сервис на 127.0.0.1:8080

Создадим два пользователя (currency_user1 = EUR, currency_user2 = CNY):

curl -X POST "http://127.0.0.1:8080/v1/user_register" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"country\": \"country1\",  \"city\": \"city1\",  \"name\": \"user1\",  \"balance\": 100,  \"currency\": \"EUR\"}"
curl -X POST "http://127.0.0.1:8080/v1/user_register" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"country\": \"country2\",  \"city\": \"city2\",  \"name\": \"user2\",  \"balance\": 100,  \"currency\": \"CNY\"}"

Их user_id и wallet_id буду равны (1, 1), (2, 2) cоотвественно

Посмотрм информцию первого пользователя

curl -X POST "http://127.0.0.1:8080/v1/user_info" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"user_id\": 1}"

Добавим первому пользователю денег на кошелек

curl -X POST "http://127.0.0.1:8080/v1/wallet_top_up" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"wallet_id\": 1,  \"amount\": 10}"

Переведем с кошелька второго пользователя на кошелек первого 10 CNY

curl -X POST "http://127.0.0.1:8080/v1/transaction_between_wallets" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"to_wallet_id\": 1,  \"from_wallet_id\": 2,  \"amount\": 10}"

Создалась транзакция. Но она не происходит мгновенно. В данном демо эмулируется задерка получения accuracy rate к USD

Подожем секунд 5-10

curl -X POST "http://127.0.0.1:8080/v1/transactions_history" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"wallet_id\": 1}"

Можно запускать данный запрос c параметрами start, end для фильтрации транзакций.

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

curl -X POST "http://127.0.0.1:8080/v1/transaction_between_wallets" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"to_wallet_id\": 1,  \"from_wallet_id\": 2,  \"amount\": 1000}"
curl -X POST "http://127.0.0.1:8080/v1/transactions_history" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"wallet_id\": 1}"

Видим, что в результатах появилась Failed транзакция

Можно посмотерть транзакции относительно другого кошелька. В результате данного запроса поле new_balace будет пересчитываться относильно данного кошелькаю.

curl -X POST "http://127.0.0.1:8080/v1/transactions_history" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"wallet_id\": 2}"

Ну и на последок, можно узнать информацию про этапы конкретной транзакции

curl -X GET "http://127.0.0.1:8080/v1/transaction_logs/1" -H  "accept: application/json"

Swagger

Swager.json хранится по адресу http://127.0.0.1:8080/api/docs/swagger.json Swagger doc хранится по адресу http://127.0.0.1:8080/api/docs

About

billing programm

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published