Изначальное тестовое задание: https://github.com/avito-tech/autumn-2021-intern-assignment

Для запуска в контейнере: docker compose up --build

Примеры ввода/вывода эндпоинтов:

1.
0.0.0.0:8080/user/wallet/upbalance - пополнение/списание 

Принимает:
{
	"user_id": 1,
	"amount": 100
}

Возвращает:
{
	"balance": "100.00" // в задании четко не указано, что именно необходимо возвращать(и надо ли это делать) - решил передавать
  текущий актуальный баланс после совершения операции, чтобы пользователь увидел эту информацию
}

2.
0.0.0.0:8080/user/wallet/balance - вывод баланса

Принимает:
{
	"user_id": 1, 
	"currency": "eur" // Отсутствие данного поля в запросе выводит базовую валюту, иностранная валюта не зависима от регистра: UsD, usd и т.п.
}

Возвращает:

{
	"ID": 3,
	"UserID": 1,
	"Balance": "1.749"
}

3.
0.0.0.0:8080/user/wallet/transfer - перевод между пользователями

Принимает:

{
	"sender_id": 1, 
	"amount": 1,
	"receiver_id": 2
}

Возвращает:

{
	"id": 7,
}

Решение что выводить так же принято самостоятельно, в задании не указано.

4.
0.0.0.0:8080/user/wallet/transactions - вывод списка транзакции пользователя

Принимает:

{
	"user_id": 1,
	"limit": 5,
	"offset": 0
}

Возвращает:

{
	"response": [
		{
			"id": 7,
			"from_wallet": 3,
			"to_wallet": 2,
			"amount": "1",
			"created_at": "2022-06-24T19:10:11.36074Z",
			"status": "transfer" // перевод между юзерами
		},
		{
			"id": 5,
			"from_wallet": 3,
			"to_wallet": 3,
			"amount": "100",
			"created_at": "2022-06-24T18:47:43.572095Z",
			"status": "replenishment" // пополнение/списаниек
		}
	],
	"total": 2
}

Проблемы и решения не описанные в ТЗ:

- При переводе от пользователя Х пользователю У, если у последнего нет кошелька, то ошибки не будет и пользователю У будет автоматически создан кошелек.
Здесь скорее вопрос к бизнесу - подразумевается ли это пользовательским соглашением или нет, можно придумать механизм уведомления У о пополнении ему кошелька и т.п.

- В случае пополнения/списания денег у пользователя(не перевод) в таблицу транзакции попадает информация о получателе/отправителе в виде одного лица.
В качестве подсказки реализовано доп поля с типом enum которое можно выводить для понимания пользователем с комментарием об операции.

- Механизм денежных операции лучше выполнять с применением технологии очередей, но для теста реализовано в текущем варианте.

- Т.к. проект тестовый, пароли размещены в репозитории (api key + pass db) файл env не добавлен в gitignore.

В процессе доработки:

- Валидация полей в структуре decimal 
- Вывод ошибок и их описание
- Тесты + моки
- Добавить логер, закинуть его в контекст и использовать.