Внедрите Rest API для финансового учреждения, где он предоставляет своим партнёрам услуги электронного кошелька. У него есть два типа учетных записей электронного кошелька: идентифицированные и неидентифицированные. API может поддерживать несколько клиентов, и следует использовать только методы http, post с json в качестве формата данных. Клиенты должны быть аутентифицированы через http параметр заголовок X-UserId и X-Digest. X-Digest — это hmac-sha1, хэш-сумма тела запроса. Должны быть предварительно записанные электронные кошельки, с разными балансами, а максимальный баланс составляет 10.000 сомони для неидентифицированных счетов и 100.000 сомони для идентифицированных счетов. Для хранения данных можете использовать по вашему выбору.
API методы сервиса:
- Проверить существует ли аккаунт электронного кошелька.
- Пополнение электронного кошелька.
- Получить общее количество и суммы операций пополнения за текущий месяц.
- Получить баланс электронного кошелька.
Во время разработки используйте git и Github и делайте значимые коммиты. Результаты задачи должны быть размещены в вашей учетной записи Github, отправьте нам только ссылку. Мы не принимаем результаты задач в .zip / .rar и т. д.
Golang, PostgreSQL, Nginx
Комментарии: При выполнении задания, я исходил из того, что у одного партнера может быть только один электронный кошелёк; данный сервис не занимается созданием пользователя, так как получает X-UserId извне
- Склонировать репозиторий
git clone
- Перейти в папку проекта
cd digital_wallet
- Запустить проект
docker compose up -d
Свойство | Тип | Описание |
---|---|---|
X-UserId | авторизация | Уникальный идентификатор партнера |
curl HEAD 'http://localhost:80/api/v1/wallets' \
--header 'X-UserId: 36764dc2-2653-4e7f-b24c-430deca66b88'
В случае успешного ответа, клиент получает статус код 200.
Если такого кошелька не существует, то 404.
Свойство | Тип | Описание |
---|---|---|
X-UserId | авторизация | Уникальный идентификатор партнера |
X-Digest | авторизация | Хеш сумма от тела запроса (HMAC-SHA1) в кодировке Base64 |
Не забудьте добавить свой секретный токен в .env файл
Имя | Тип | Описание |
---|---|---|
amount | float64 | Сумма пополнения |
curl POST 'http://localhost:80/api/v1/wallets' \
--header 'X-UserId: 36764dc2-2653-4e7f-b24c-430deca66b88' \
--header 'X-Digest: RnkqGygHBJmzXNB+ofYoeLsNIsI=' \
--data '{
"amount": 100
}'
Имя | Тип | Описание |
---|---|---|
error* | string | Возвращается при возникноваении ошибки |
В случае успешного ответа, клиент получает статус код 200.
Возможные статус коды в случае ошибки: 400, 401, 404, 500
{
"error": "invalid X-Digest header value"
}
Свойство | Тип | Описание |
---|---|---|
X-UserId | авторизация | Уникальный идентификатор партнера |
curl GET 'http://localhost:80/api/v1/wallets/stats' \
--header 'X-UserId: 36764dc2-2653-4e7f-b24c-430deca66b88' \
Имя | Тип | Описание |
---|---|---|
error* | string | Возвращается при возникноваении ошибки |
number | int | Общее количество пополнений |
amount | int | Сумма всех пополнений |
В случае успешного ответа, клиент получает статус код 200.
{
"number": 1,
"amount": 500
}
Возможные статус коды в случае ошибки: 400, 401, 404, 500
{
"error": "wallet not found"
}
Свойство | Тип | Описание |
---|---|---|
X-UserId | авторизация | Уникальный идентификатор партнера |
curl GET 'http://localhost:80/api/v1/wallets/balance' \
--header 'X-UserId: 36764dc2-2653-4e7f-b24c-430deca66b88' \
Имя | Тип | Описание |
---|---|---|
error* | string | Возвращается при возникноваении ошибки |
balance | float64 | Текущий баланс кошелька |
В случае успешного ответа, клиент получает статус код 200.
{
"balance": 700.65
}
Возможные статус коды в случае ошибки: 400, 401, 404, 500
{
"error": "wallet not found"
}