Реализуйте объект для хранения банковских счетов. Требуемый интерфейс находится в 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.