shad-go/ledger/README.md

2.2 KiB
Raw Blame History

ledger

Реализуйте объект для хранения банковских счетов. Требуемый интерфейс находится в model.go.

  • Функция New должна создавать таблицу в базе данных.
  • Метод CreateAccount должен создавать новый счёт с заданным id.
  • Метод GetBalance должен возвращать текущий баланс.
  • Метод Deposit должен зачислять деньги на счёт.
    • При попытке пополнить счёт на сумму меньше нуля, метод должен возвращать ошибку ledger.ErrNegativeAmount.
  • Метод Withdraw должен снимать деньги со счёта.
    • Если на счету недостаточно денег, метод должен возвращать ошибку ledger.ErrNoMoney.
    • При попытке снять со счёта сумму меньше нуля, метод должен возвращать ошибку ledger.ErrNegativeAmount.
  • Метод Transfer должен переводить деньги со счёта from на счёт to.
    • Если на счету from недостаточно денег, метод должен возвращать ошибку ledger.ErrNoMoney.
    • При попытке перевести между счетами сумму меньше нуля, метод должен возвращать ошибку ledger.ErrNegativeAmount.
  • Метод Close закрывает коннекты к базе данных.

Все операции должны быть атомарными. Для реализации некоторых методов вам потребуется использовать транзакции и row-level локи. Ваша реализация не должна создавать дедлоки на уровне базы данных.

Мы рекомендуем использовать функциональность SELECT FOR UPDATE.

Комментарии по запуску postgres смотрите в задаче dao.