API documentation located in api folder in OpenAPI v3 format.
- get user account
- deposit funds to user account
- get list of account transactions
- reserve funds from user account
- cancel funds reservation
- revenue declaration
- Run all containers except applicaton one:
$ make compose-up
- Compile and run the app with migrations
$ make run-migrate
Cmd from above will run go run
with build tag migrate
.
Or if you don't need run migrate up
on startup:
$ make run
To run the app in fully in docker:
$ make compose-all
Makefile cmd from above will run all containers from docker-compose.yml
To stop all containers:
$ make compose-down
- В каком формате хранить баланс? Т.к. в go нет decimal решил хранить в наименьшем эквиваленте (копейки, центы), есть сторонние реализации, но решил не тащить лишнюю зависимость.
- Откуда лучше вызывать транзакции? Изначально думал будет хорошим решением вызывать транзакции только из репозиториев, но хотелось добиться простоты доступа к данным (1 репозиторий - 1 таблица БД) и иметь возможность выполнять методы из разных репозиториев атомарно при этом не засоряя код бизнес-логики. В итоге написал простую библиотеку для оборачивания методов Query, Exec, QueryRow из pgx и обертку для ф-ии, внутри которой будут выполняться все операции атомарно. Библиотека доступна в репозитории https://github.com/ysomad/pgxatomic
- Стоит ли хранить uuid в string, чтобы не нести зависимость в бизнес-логику? Если идеально следовать чистой архитектуре, то наверное да, но я в угоду удобства и в меру того, что uuid достаточно стандартизирован, решил использовать uuid тип там, где мне нужно чтобы он был.