shad-go/ledger/README.md

24 lines
2.2 KiB
Markdown
Raw Normal View History

2022-03-31 11:19:47 +00:00
# ledger
Реализуйте объект для хранения банковских счетов. Требуемый интерфейс находится в `model.go`.
- Функция `New` должна создавать таблицу в базе данных.
- Метод `CreateAccount` должен создавать новый счёт с заданным `id`.
- Метод `GetBalance` должен возвращать текущий баланс.
- Метод `Deposit` должен зачислять деньги на счёт.
- При попытке пополнить счёт на сумму меньше нуля, метод должен возвращать ошибку `ledger.ErrNegativeAmount`.
2022-03-31 11:19:47 +00:00
- Метод `Withdraw` должен снимать деньги со счёта.
- Если на счету недостаточно денег, метод должен возвращать ошибку `ledger.ErrNoMoney`.
- При попытке снять со счёта сумму меньше нуля, метод должен возвращать ошибку `ledger.ErrNegativeAmount`.
2022-03-31 11:19:47 +00:00
- Метод `Transfer` должен переводить деньги со счёта `from` на счёт `to`.
- Если на счету `from` недостаточно денег, метод должен возвращать ошибку `ledger.ErrNoMoney`.
- При попытке перевести между счетами сумму меньше нуля, метод должен возвращать ошибку `ledger.ErrNegativeAmount`.
2022-04-13 15:13:39 +00:00
- Метод `Close` закрывает коннекты к базе данных.
2022-03-31 11:19:47 +00:00
Все операции должны быть атомарными. Для реализации некоторых методов
вам потребуется использовать транзакции и row-level локи. Ваша реализация не должна создавать дедлоки на уровне базы данных.
Мы рекомендуем использовать функциональность `SELECT FOR UPDATE`.
Комментарии по запуску postgres смотрите в задаче [dao](../dao/).