Необходимо разработать платежную систему с пользовательскими кошельками. Валюта сервиса - USD.
-
Сервис предоставляет возможность добавить кошелек - каждый кошелек имеет уникальное имя.
-
Клиенты могут делать друг другу денежные переводы в пределах баланса кошелька, способ хранения баланса выбирается при реализации.
-
Сохраняется информация о всех операциях на кошельке клиента, ее можно выгрузить по HTTP запросу,
-
Проект представляет из себя HTTP API, содержащее основные операции по "кошелькам" и endpoint для отчетов.
-
HTTP API должен представлять следующие интерфейсы:
- добавление кошелька
- зачисление денежных средств на кошелек клиента
- перевод денежных средств с одного кошелька на другой
- выгрузка операций по кошельку с фильтрацией по дате проведения и направлению операции (депозит, вывод), формат отчета csv
-
Сервис должен быть защищен от возможности задвоения операций, баланс кошелька не должен быть отрицательным.
- Wallet - пользовательский кошелек.
- Transaction - операция со счетом.
- Deposit - внести деньги на счет.
- Withdraw - снять деньги со счета.
- Transfer - перевести деньги с одного счета на другой.
Реализует use cases на уровне сервисов, которые требуют ТЗ. В бизнес-слое используются стандартные уровни:
В качестве базы данных задействована PostgreSQL. Для создания базы данных и миграции используется отдельный пакет db. Для миграции используются scripts.
Использует сервисы бизнес слоя для представления данных пользователю.
В качестве web-сервера используется Gin Web Framework. Дополнительно сделан декоратор Graceful shutdown graceful.go для корректной остановки сервера по сигналам ОС.
К серверу добавлен пакет gin-swagger, который позволяет автоматически генерировать REST API и работать с сервисами приложения из браузера swagger.
Также можно генерировать документацию, исходя из кода с помощью команды в корневом каталоге:
make swag
Документация представлена в swagger.json и swagger.yaml swagger-форматах, и может экспортироваться в сторонние приложения.
Для создания отчета заполняется предварительно filter. Используется диапазон дат. Даты требуется вводить в формате RFC3339. Тип операции берется из списка operation:
1-Deposit
2-Withdraw
3-Both
Посмотреть документацию кода можно с помощью 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")