potalestor / custom-wallet

A payment system that uses custom wallets

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Custom wallet

Задание

Необходимо разработать платежную систему с пользовательскими кошельками. Валюта сервиса - USD.

Требования

  1. Сервис предоставляет возможность добавить кошелек - каждый кошелек имеет уникальное имя.

  2. Клиенты могут делать друг другу денежные переводы в пределах баланса кошелька, способ хранения баланса выбирается при реализации.

  3. Сохраняется информация о всех операциях на кошельке клиента, ее можно выгрузить по HTTP запросу,

  4. Проект представляет из себя HTTP API, содержащее основные операции по "кошелькам" и endpoint для отчетов.

  5. HTTP API должен представлять следующие интерфейсы:

    • добавление кошелька
    • зачисление денежных средств на кошелек клиента
    • перевод денежных средств с одного кошелька на другой
    • выгрузка операций по кошельку с фильтрацией по дате проведения и направлению операции (депозит, вывод), формат отчета csv
  6. Сервис должен быть защищен от возможности задвоения операций, баланс кошелька не должен быть отрицательным.

Терминология

  • Wallet - пользовательский кошелек.
  • Transaction - операция со счетом.
  • Deposit - внести деньги на счет.
  • Withdraw - снять деньги со счета.
  • Transfer - перевести деньги с одного счета на другой.

Use cases

Use cases

Структура приложения

Бизнес-слой

Business

Реализует use cases на уровне сервисов, которые требуют ТЗ. В бизнес-слое используются стандартные уровни:

В качестве базы данных задействована PostgreSQL. Для создания базы данных и миграции используется отдельный пакет db. Для миграции используются scripts.

Web-сервер

Использует сервисы бизнес слоя для представления данных пользователю.

Web

В качестве web-сервера используется Gin Web Framework. Дополнительно сделан декоратор Graceful shutdown graceful.go для корректной остановки сервера по сигналам ОС.

К серверу добавлен пакет gin-swagger, который позволяет автоматически генерировать REST API и работать с сервисами приложения из браузера swagger.

Также можно генерировать документацию, исходя из кода с помощью команды в корневом каталоге:

make swag

Документация представлена в swagger.json и swagger.yaml swagger-форматах, и может экспортироваться в сторонние приложения.

Создание кошелька

create

Депозит

deposit

Перевод

transfer

Отчет

report

Для создания отчета заполняется предварительно filter. Используется диапазон дат. Даты требуется вводить в формате RFC3339. Тип операции берется из списка operation:

1-Deposit

2-Withdraw

3-Both

Инициализация приложения

Init

Посмотреть документацию кода можно с помощью godoc. Для запуска необходимо выполнить команду:

make godoc

Затем перейти по ссылке docs.

Деплой приложения

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

make docker

Также для запуска приложения при запущенной PosgreSQL по адресу localhost:5432, можно воспользоваться командой:

make run

Однако, если настройки окружения нестандартные, то необходимо запуск приложения сконфигурировать с помощью флагов командной строки:

custom-wallet -h
A payment system that uses custom wallets.

Usage:
  custom-wallet [flags]

Flags:
  -a, --addr string     WEB-address (default ":8080")
  -d, --dbname string   DB name (default "wallet")
  -h, --help            help for custom-wallet
  -s, --host string     DB address (default "localhost")
  -l, --log             Default log to Console
  -n, --mon             Migration enabled (default true)
  -m, --mpath string    Migration path scripts (default "../../scripts/")
  -p, --pass string     DB password (default "postgres")
  -o, --port int        DB port (default 5432)
  -u, --user string     DB username  (default "postgres")

About

A payment system that uses custom wallets


Languages

Language:Go 96.9%Language:Makefile 2.3%Language:Dockerfile 0.7%Language:Shell 0.1%