Изначальное тестовое задание: 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 - Вывод ошибок и их описание - Тесты + моки - Добавить логер, закинуть его в контекст и использовать.