infotecs-ewallet

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 14, 2024 License: MIT

README

Тестовое задание для стажера на позицию «Go-разработчик»

Необходимо разработать приложение EWallet реализующее систему обработки транзакций платёжной системы. Приложение должно быть реализовано в виде HTTP сервера, реализующее REST API. Сервер должен реализовать 4 метода и их логику:

Создание кошелька

  • Эндпоинт - POST /api/v1/wallet
  • Параметры запроса отсутствуют
  • Ответ содержит JSON-объект с состоянием созданного кошелька. Объект содержит параметры:
    • id – строковый ID кошелька. Генерируется сервером
    • balance – дробное число, баланс кошелька
    • Созданный кошелек должен иметь сумму 100.0 у.е. на балансе

Перевод средств с одного кошелька на другой

  • Эндпоинт - POST /api/v1/wallet/{walletId}/send
  • Параметры запроса:
    • walletId – строковый ID кошелька, указан в пути запроса
    • JSON-объект в теле запроса с параметрами:
      • to – ID кошелька, куда нужно перевести деньги
      • amount – сумма перевода
  • Статус ответа 200 если перевод успешен
  • Статус ответа 404 если исходящий кошелек не найден
  • Статус ответа 400 если целевой кошелек не найден или на исходящем нет нужной суммы

Получение историй входящих и исходящих транзакций

  • Эндпоинт – GET /api/v1/wallet/{walletId}/history
  • Параметры запроса:
    • walletId – строковый ID кошелька, указан в пути запроса
  • Ответ с статусом 200 если кошелек найден. Ответ должен содержать в теле массив JSON-объектов с входящими и исходящими транзакциями кошелька. Каждый объект содержит параметры:
    • time – дата и время перевода в формате RFC 3339
    • from – ID исходящего кошелька
    • to – ID входящего кошелька
    • amount – сумма перевода. Дробное число
  • Статус ответа 404 если указанный кошелек не найден

Получение текущего состояния кошелька

  • Эндпоинт – GET /api/v1/wallet/{walletId}
  • Параметры запроса:
    • walletId – строковый ID кошелька, указан в пути запроса
  • Ответ с статусом 200 если кошелек найден. Ответ должен содержать в теле JSON-объект с текущим состоянием кошелька. Объект содержит параметры:
    • id – строковый ID кошелька. Генерируется сервером
    • balance – дробное число, баланс кошелька
  • Статус ответа 404 если кошелек не найден

Для удобства к тестовому заданию приложено описание API в формате OpenAPI 3.0. Его можно открыть любым онлайн редактором, например Swagger Editor или ReDoc. Это описание дублирует написанное выше и уточняет его.

На что нужно обратить внимание при реализации:

  • Безопасность: в приложении не должно быть уязвимостей, позволяющих произвольно менять данные в базе.
  • Персистентность: данные и изменения не должны «теряться» теряться при перезапуске приложения.

Список используемых библиотек не ограничен, однако нужно учесть требования к стеку:

  • Язык реализации – Go 1.21
  • База данных – PostgreSQL, SQLite или MongoDB

Плюсом будет:

  • Наличие в решении Dockerfile для сборки контейнера с приложением.
  • Хранение исходного кода в системе контроля версий, например Git с публикацией на GitHub. В решении необходимо предоставить ссылку на репозиторий.

Directories

Path Synopsis
cmd
internal
service/mock
Package service_mock is a generated GoMock package.
Package service_mock is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL