From 1b23178a42b7b855ddd01dd90f8bf9f7ca5dfbe1 Mon Sep 17 00:00:00 2001 From: Geoffrey Ragot Date: Tue, 8 Apr 2025 10:40:46 +0200 Subject: [PATCH] fix: inconsistent accounts list --- internal/storage/ledger/accounts_test.go | 14 ++++++++++---- internal/storage/ledger/resource_accounts.go | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/storage/ledger/accounts_test.go b/internal/storage/ledger/accounts_test.go index eadb280412..e2c6299645 100644 --- a/internal/storage/ledger/accounts_test.go +++ b/internal/storage/ledger/accounts_test.go @@ -53,6 +53,12 @@ func TestAccountsList(t *testing.T) { }, })) + err = store.CommitTransaction(ctx, pointer.For(ledger.NewTransaction(). + WithPostings(ledger.NewPosting("world", "account:1", "USD", big.NewInt(100))). + WithTimestamp(now). + WithInsertedAt(now)), nil) + require.NoError(t, err) + err = store.CommitTransaction(ctx, pointer.For(ledger.NewTransaction(). WithPostings(ledger.NewPosting("world", "account:1", "USD", big.NewInt(100))). WithTimestamp(now.Add(4*time.Minute)). @@ -112,7 +118,7 @@ func TestAccountsList(t *testing.T) { require.NoError(t, err) require.Len(t, accounts.Data, 1) require.Equal(t, ledger.VolumesByAssets{ - "USD": ledger.NewVolumesInt64(200, 50), + "USD": ledger.NewVolumesInt64(300, 50), }, accounts.Data[0].Volumes) }) @@ -129,7 +135,7 @@ func TestAccountsList(t *testing.T) { require.NoError(t, err) require.Len(t, accounts.Data, 1) require.Equal(t, ledger.VolumesByAssets{ - "USD": ledger.NewVolumesInt64(100, 0), + "USD": ledger.NewVolumesInt64(200, 0), }, accounts.Data[0].Volumes) }) @@ -145,7 +151,7 @@ func TestAccountsList(t *testing.T) { require.NoError(t, err) require.Len(t, accounts.Data, 1) require.Equal(t, ledger.VolumesByAssets{ - "USD": ledger.NewVolumesInt64(200, 50), + "USD": ledger.NewVolumesInt64(300, 50), }, accounts.Data[0].EffectiveVolumes) }) @@ -161,7 +167,7 @@ func TestAccountsList(t *testing.T) { require.NoError(t, err) require.Len(t, accounts.Data, 1) require.Equal(t, ledger.VolumesByAssets{ - "USD": ledger.NewVolumesInt64(100, 0), + "USD": ledger.NewVolumesInt64(200, 0), }, accounts.Data[0].EffectiveVolumes) }) diff --git a/internal/storage/ledger/resource_accounts.go b/internal/storage/ledger/resource_accounts.go index 6a0a7f5d93..0c4638e874 100644 --- a/internal/storage/ledger/resource_accounts.go +++ b/internal/storage/ledger/resource_accounts.go @@ -162,7 +162,7 @@ func (h accountsResourceHandler) expand(store *Store, opts ledgercontroller.Reso Where("insertion_date <= ?", opts.PIT) } else { selectRowsQuery = selectRowsQuery. - ColumnExpr("first_value(post_commit_volumes) over (partition by (accounts_address, asset) order by effective_date desc) as volumes"). + ColumnExpr("first_value(post_commit_volumes) over (partition by (accounts_address, asset) order by effective_date desc, seq desc) as volumes"). Where("effective_date <= ?", opts.PIT) } } else {