Задача:
Необходимо реализовать микросервис для работы с балансом пользователей (зачисление средств, списание средств, перевод средств от пользователя к пользователю, а также метод получения баланса пользователя). Сервис должен предоставлять HTTP API и принимать/отдавать запросы/ответы в формате JSON.
Стек используемых в сервисе технологий
1.Golang
2.PostgreSQL(для хранения данных о балансах, id и сумм снятия пользователей)
3.Redis(для хранения и отображения всех транзакций)
Реализовано:
1.Метод начисления средств на баланс. Принимает id пользователя и сколько средств зачислить.
2. Метод списания средств с баланса. Принимает id пользователя и сколько средств списать.
3. Метод перевода средств от пользователя к пользователю. Принимает id пользователя с которого нужно списать средства, id пользователя которому должны зачислить средства, а также сумму.
4.Метод получения текущего баланса пользователя. Принимает id пользователя. Баланс всегда в рублях. (по умолчанию сервис не содержит в себе никаких данных о балансах (пустая табличка в БД). Данные о балансе появляются при первом зачислении денег)
5. В методе получения баланса сделан доп. параметр. Пример: ?currency=USD. Если этот параметр присутствует, то мы должны конвертировать баланс пользователя с рубля на указанную валюту. Данные по текущему курсу валют я беру из https://exchangeratesapi.io/.(базовая валюта хранится на балансе в рублях)
6. Метод получения списка транзакция каждого пользователя.
Работа сервиса
После запуска сервиса(файла main.go) и баз данных. Сервис будет ждать запросов(Get или Post).
Get-запросы сделаны для создания нового пользователя, получения баланса пользователя и для получения всех транзакций пользователя.
Post-запросы сделаны для снятия и внесения денег пользователем, а также для перевода между двумя существующими пользователями.
Все ошибки сервиса будут выведены как ответ на ваш запрос в формате Json.
Примеры запросов:
-
"http://localhost:8083/get-transactions/10" - данный Get-запрос возвращает JSON файл со всеми транзакциями пользователя c id = 10.\
-
"http://localhost:8083/deposit-money/" - данный Post-запрос зачисляет на баланс пользователя c id = 10 сумму указанную в теле запроса(для снятия все аналогично кроме самого запроса, там будет withdraw-money).
Тело данного запроса:
({"id": 10,
"updateValue": 10000
})\ -
"http://localhost:8082/transfer-money/" - данный Post-запрос позволяет перевести сумму от одного пользователя к другому. Тело данного запроса:
{"id-sender": 10,
"id-recipient" : 4,
"sending-amount": 50
}\ -
"http://localhost:8083/get-balance/10&EUR" - данный Get-запрос позволяет получить баланс пользователя с id = 10, переведенный в любую валюту(в данном случае в EUR- евро)
Тестовая часть
Тесты сделаны только для части repository, чтобы проверить работоспособность запросов в бд и логику взаимодействия. Тесты необходимо просто запустить с пустой таблицей в PostgreSQL(название таблицы user_table).