# 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](../dao/).