# README
Микросервис-менеджер баланса пользователей
Пример микровервиса предназначенного для работы с балансом пользователей. Сервис предоставляет HTTP API и принимает/отдает запросы/ответы в формате JSON.
Используемые технологии:
- PostgreSQL (в качестве хранилища данных)
- Docker (для запуска сервиса) -- Work in process
- Swagger (для документации API)
- gorilla/mux (веб фреймворк)
- slog (логгер)
- golang-migrate/migrate (для миграций БД)
- tesify, mockery (для тестирования) -- Work in process
Основные функции:
- Метод начисления средств на баланс. Принимает id пользователя и сколько средств зачислить.
- Метод получения баланса пользователя. Принимает id пользователя.
- Метод резервирования средств с основного баланса на отдельном счете. Принимает id пользователя, ИД услуги, ИД заказа, стоимость.
- Метод признания выручки – списывает из резерва деньги. Принимает id пользователя, ИД услуги, ИД заказа, сумму.
- Метод отмены резервирования - возвращает деньги на баланс. Принимает id пользователя, ИД услуги, ИД заказа, сумму.
Использование
Документацию после завпуска сервиса можно посмотреть по адресу http://localhost:8080/swagger/index.html
с портом 8080 по умолчанию
Примеры использования
- Регистрация
- Аутентификация
- Пополнение счёта
- Получение баланса
- Резервирование средств
- Признание выручки
- Отмена резервирования
Регистрация
curl -X POST 'http://localhost:8080/auth/sign-up' \
--header 'Content-Type: application/json' \
--data-raw '{
"username":"[email protected]",
"password":"123456"
}'
Ответ:
{
"id": 1
}
Аутентификация
curl -X POST 'http://localhost:8080/auth/sign-in' \
--header 'Content-Type: application/json' \
--data-raw '{
"username":"[email protected]",
"password":"123456"
}'
Ответ:
{
"Token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODgxMjMzNzksImlhdCI6MTY4ODExNjE3OSwiVXNlcklkIjoxfQ.tydIAyeaaZVP01mv5iEXGbkNbw4OhBZZn1mjwFe0TM8"
}
Пополнение счета
curl -X POST 'http://localhost:8080/api/v1/account/deposit' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODgxMjMzNzksImlhdCI6MTY4ODExNjE3OSwiVXNlcklkIjoxfQ.tydIAyeaaZVP01mv5iEXGbkNbw4OhBZZn1mjwFe0TM8' \
--header 'Content-Type: application/json' \
--data-raw '{
"user_id":1,
"amount":1000
}'
Ответ:
{
"user_id": 1,
"balance": 1000
}
Получение баланса
curl -X GET 'http://localhost:8080/api/v1/account/' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODgxMjMzNzksImlhdCI6MTY4ODExNjE3OSwiVXNlcklkIjoxfQ.tydIAyeaaZVP01mv5iEXGbkNbw4OhBZZn1mjwFe0TM8' \
--header 'Content-Type: application/json' \
--data-raw '{
"user_id":1
}'
Ответ:
{
"user_id": 1,
"balance": 1000
}
Резервирование средств
curl -X POST 'http://localhost:8080/api/v1/reservation/create' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODgxMjMzNzksImlhdCI6MTY4ODExNjE3OSwiVXNlcklkIjoxfQ.tydIAyeaaZVP01mv5iEXGbkNbw4OhBZZn1mjwFe0TM8' \
--header 'Content-Type: application/json' \
--data-raw '{
"account_id": 1,
"amount": 500,
"order_id": 1,
"service_id": 1
}'
Ответ:
{
"id": 1,
}
Признание выручки
curl -X POST 'http://localhost:8080/api/v1/reservation/revenue' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODgxMjMzNzksImlhdCI6MTY4ODExNjE3OSwiVXNlcklkIjoxfQ.tydIAyeaaZVP01mv5iEXGbkNbw4OhBZZn1mjwFe0TM8' \
--header 'Content-Type: application/json' \
--data-raw '{
"account_id": 1,
"amount": 500,
"order_id": 1,
"service_id": 1
}'
Ответ:
{
"msg": "OK"
}
Отмена резервирования
curl -X POST 'http://localhost:8080/api/v1/reservation/refund' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODgxMjMzNzksImlhdCI6MTY4ODExNjE3OSwiVXNlcklkIjoxfQ.tydIAyeaaZVP01mv5iEXGbkNbw4OhBZZn1mjwFe0TM8' \
--header 'Content-Type: application/json' \
--data-raw '{
"account_id": 1,
"amount": 500,
"order_id": 1,
"service_id": 1
}'
Ответ:
{
"msg": "OK"
}