module
0.0.0-20241121095751-ac3e653f01f3
Repository: https://github.com/jamshedj/walletapi.git
Documentation: pkg.go.dev
# README
WalletAPI
Этот проект представляет собой REST API «Электронного кошелька» для финансового учреждения.
Описание задачи:
Внедрите Rest API для финансового учреждения, где он предоставляет своим партнёрам услуги
электронного кошелька. У него есть два типа учетных записей электронного кошелька:
идентифицированные и неидентифицированные.
API может поддерживать несколько клиентов, и следует использовать только методы http,
post с json в качестве формата данных. Клиенты должны быть аутентифицированы через http
параметр заголовок X-UserId и X-Digest.
X-Digest — это hmac-sha1, хэш-сумма тела запроса. Должны быть предварительно записанные
электронные кошельки, с разными балансами, а максимальный баланс составляет 10.000 сомони
для неидентифицированных счетов и 100.000 сомони для идентифицированных счетов.
Для хранения данных можете использовать по вашему выбору.
API методы сервиса:
- Проверить существует ли аккаунт электронного кошелька.
- Пополнение электронного кошелька.
- Получить общее количество и суммы операций пополнения за текущий месяц.
- Получить баланс электронного кошелька.
Используемые технологии
- Go
- Gin
- Gorm postgres
- Zerolog
- Viper
- Mockery
- Swagger api docs
Запуск проекта
- Клонируйте репозиторий:
git clone https://github.com/JamshedJ/WalletAPI.git
- Создайте файл config.yaml внутри папки config с слкедующим содержимым:
app: port: 8080 environment: "development" # or "production" database: dsn: "host=localhost port=5432 user=postgres password=postgres dbname=wallet sslmode=disable"
- Поднимите базу данных PostgreSQL:
- Запустите приложение:
go run cmd/main.go
- Перед использованием API необходимо вводить тестовые данные в таблицу wallets.
Тесты
Для запуска тестов используйте команду:
go test ./...
Примеры запросов в Postman
Проверка баланса электронного кошелька
URL: http://localhost:8080/v1/wallet/balance Метод: POST Тело запроса (raw, JSON):
{
"account": "992900100299",
}
Headers: X-UserId: (id партнера). X-Digest: (вычисляется с помощью HMAC-SHA1).
Проверка существует ли аккаунт электронного кошелька
URL: http://localhost:8080/v1/wallet/exists Метод: POST Тело запроса (raw, JSON):
{
"account": "992900100299",
}
Headers: X-UserId: X-Digest:
Пополнение электронного кошелька
URL: http://localhost:8080/v1/wallet/topup Метод: POST Тело запроса (raw, JSON):
{
"account": "992900100299",
"amount": 100.0
}
Headers: X-UserId: X-Digest:
Получение общего количества и суммы операций пополнения за текущий месяц
Метод: POST URL: http://localhost:8080/v1/wallet/summary Headers: X-UserId: X-Digest: