From cea2a44ab73b70047544bca2adaa431f09efe048 Mon Sep 17 00:00:00 2001 From: Arseny Balobanov Date: Wed, 13 Apr 2022 18:07:35 +0300 Subject: [PATCH 1/2] [dao] Add Close() method. --- dao/README.md | 1 + dao/dao_test.go | 1 + dao/model.go | 1 + 3 files changed, 3 insertions(+) diff --git a/dao/README.md b/dao/README.md index a9a43cf..f3f7500 100644 --- a/dao/README.md +++ b/dao/README.md @@ -10,6 +10,7 @@ - Метод `Delete` удаляет пользователя из таблицы. - Метод `Lookup` возвращает `Name` пользователя по `ID`. - Метод `List` возвращает список всех пользователей в таблице. +- Метод `Close` закрывает коннекты к базе данных. ## Запуск тестов на linux diff --git a/dao/dao_test.go b/dao/dao_test.go index deae678..a891b22 100644 --- a/dao/dao_test.go +++ b/dao/dao_test.go @@ -17,6 +17,7 @@ func TestDao(t *testing.T) { dao, err := CreateDao(ctx, dsn) require.NoError(t, err) + defer func() { _ = dao.Close() }() _, err = dao.Lookup(ctx, 42) require.ErrorIs(t, err, sql.ErrNoRows) diff --git a/dao/model.go b/dao/model.go index d2cebbe..5cdaf59 100644 --- a/dao/model.go +++ b/dao/model.go @@ -18,5 +18,6 @@ type ( Delete(ctx context.Context, id UserID) error Lookup(ctx context.Context, id UserID) (User, error) List(ctx context.Context) ([]User, error) + Close() error } ) From 4bbb4ddd0154549e2eab7b63863285548a8034a5 Mon Sep 17 00:00:00 2001 From: Arseny Balobanov Date: Wed, 13 Apr 2022 18:13:39 +0300 Subject: [PATCH 2/2] [ledger] Add Close() method. --- ledger/README.md | 1 + ledger/ledger_test.go | 1 + ledger/model.go | 1 + 3 files changed, 3 insertions(+) diff --git a/ledger/README.md b/ledger/README.md index bf402b8..873753b 100644 --- a/ledger/README.md +++ b/ledger/README.md @@ -10,6 +10,7 @@ Если на счету недостаточно денег, метод должен возвращать ошибку `ledger.ErrNoMoney`. - Метод `Transfer` должен переводить деньги со счёта `from` на счёт `to`. Если на счету `from` недостаточно денег, метод должен возвращать ошибку `ledger.ErrNoMoney`. +- Метод `Close` закрывает коннекты к базе данных. Все операции должны быть атомарными. Для реализации некоторых методов вам потребуется использовать транзакции и row-level локи. Ваша реализация не должна создавать дедлоки на уровне базы данных. diff --git a/ledger/ledger_test.go b/ledger/ledger_test.go index cfc909f..81d7491 100644 --- a/ledger/ledger_test.go +++ b/ledger/ledger_test.go @@ -20,6 +20,7 @@ func TestLedger(t *testing.T) { l0, err := ledger.New(ctx, dsn) require.NoError(t, err) + defer func() { _ = l0.Close() }() t.Run("SimpleCommands", func(t *testing.T) { checkBalance := func(account ledger.ID, amount ledger.Money) { diff --git a/ledger/model.go b/ledger/model.go index 3bafcc0..727ed62 100644 --- a/ledger/model.go +++ b/ledger/model.go @@ -18,4 +18,5 @@ type Ledger interface { Deposit(ctx context.Context, id ID, amount Money) error Withdraw(ctx context.Context, id ID, amount Money) error Transfer(ctx context.Context, from, to ID, amount Money) error + Close() error }