https://github.com/microphoneabuser/balance-service
Golang REST API реализующий работу с балансом пользователей
https://github.com/microphoneabuser/balance-service
docker docker-compose postgresql rabbitmq
Last synced: 6 months ago
JSON representation
Golang REST API реализующий работу с балансом пользователей
- Host: GitHub
- URL: https://github.com/microphoneabuser/balance-service
- Owner: microphoneabuser
- Created: 2021-10-17T04:50:16.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-11-03T16:07:40.000Z (over 4 years ago)
- Last Synced: 2024-11-16T00:43:14.951Z (over 1 year ago)
- Topics: docker, docker-compose, postgresql, rabbitmq
- Language: Go
- Homepage:
- Size: 41 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Микросервис для работы с балансом пользователей
## Список используемых технологий:
* [Gin](https://github.com/gin-gonic/gin) - HTTP Go Framework
* [Postgres](https://github.com/lib/pq) - СУБД PostgreSQL
* [Redis](https://github.com/go-redis/redis) - Реализация кэширования курса валют (ответа [freecurrencyapi.net](https://freecurrencyapi.net))
* [RabbitMQ](https://github.com/streadway/amqp) - RabbitMQ для реализации очереди SMS-уведомлений для последующей отправки, выполняемой другим микросервисом
* [Docker](https://www.docker.com/) - Docker
* [viper](https://github.com/spf13/viper) - Работа с файлами конфигурации
* [sqlx](https://github.com/jmoiron/sqlx) - Работа с БД
* [migrate](https://github.com/golang-migrate/migrate) - Миграции в БД
## Для запуска приложения:
``` bash
make build && make run
```
Если приложение запускается впервые, необходимо применить миграции к базе данных:
``` bash
make migrate
```
# Примеры запросов/ответов
[](https://www.postman.com/altimetry-cosmonaut-24747535/workspace/9b7c651f-7961-43ec-99a6-3af777ee7f1e/documentation/17406947-515440b7-8466-465d-bc3e-a49c8e40cc53)
### Получить баланс пользователя
``` bash
GET http://localhost:8080/balance
# Body(json)
{
"id": 1
}
```
### Получить баланс пользователя в валюте, отличной от рубля (пример - USD)
``` bash
GET http://localhost:8080/balance?currency=USD
# Body(json)
{
"id": 1
}
```
### Зачислить деньги на счет
``` bash
POST http://localhost:8080/accrual
# Body(json)
{
"id": 1,
"amount": 1000.0
}
```
### Списать деньги со счета
``` bash
POST http://localhost:8080/debiting
# Body(json)
{
"id": 1,
"amount": 200.0
}
```
### Перевести деньги с одного счета на другой
``` bash
POST http://localhost:8080/transfer
# Body(json)
{
"sender_id": 1,
"recipient_id": 2,
"amount": 1000.0,
"description": "Перевод на покупку чего-то"
}
```
### Просмотреть транзакции связанные с заданным счетом (с сортировкой по убыванию даты и пагинацией)
``` bash
GET http://localhost:8080/transactions?limit=10&offset=0&sort=timestamp:desc
# Body(json)
{
"id": 2
}
```
### Просмотреть транзакции связанные с заданным счетом (с сортировкой по возрастанию суммы и пагинацией)
``` bash
GET http://localhost:8080/transactions?limit=10&offset=0&sort=amount:asc
# Body(json)
{
"id": 2
}
```
## RabbitMQ
Чтобы просмотреть содержимое очереди для отправки SMS-уведомлений нужно перейти по ссылке: http://localhost:15672/#/queues/%2F/sms-queue
* Username: guest
* Password: guest
Данная очередь предназначена для уведомления пользователей о всех действиях произведенных с его счетом (зачисления, списания, переводы). В коде данного микросервиса формируется и публикуется в очередь полное сообщение с id пользователя, которому нужно отправить SMS.
Пример сообщения:
``` bash
{
"account_id":2,
"message":"Счет-2 Зачисление 1000.00р Баланс: 1000.00р"
}
```
Задумка в том, что данные сообщения должен читать другой микросервис (consumer) и непосредственно производить отправку SMS-сообщения.