From ee52db3f7c7d3ce416eac2d491a406a735f8f244 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Mon, 9 Sep 2024 01:34:38 +0800 Subject: [PATCH] make tags of exported transaction data in the same order as they displayed in transaction --- pkg/services/transaction_tags.go | 6 ++++++ pkg/utils/slices.go | 9 +++++++++ pkg/utils/slices_test.go | 8 ++++++++ 3 files changed, 23 insertions(+) diff --git a/pkg/services/transaction_tags.go b/pkg/services/transaction_tags.go index 71fbd8b0..baf8da0b 100644 --- a/pkg/services/transaction_tags.go +++ b/pkg/services/transaction_tags.go @@ -9,6 +9,7 @@ import ( "github.com/mayswind/ezbookkeeping/pkg/datastore" "github.com/mayswind/ezbookkeeping/pkg/errs" "github.com/mayswind/ezbookkeeping/pkg/models" + "github.com/mayswind/ezbookkeeping/pkg/utils" "github.com/mayswind/ezbookkeeping/pkg/uuid" ) @@ -440,5 +441,10 @@ func (s *TransactionTagService) GetGroupedTransactionTagIds(tagIndexes []*models transactionTagIds = append(transactionTagIds, tagIndex.TagId) allTransactionTagIds[tagIndex.TransactionId] = transactionTagIds } + + for _, tagIds := range allTransactionTagIds { + utils.Int64Sort(tagIds) + } + return allTransactionTagIds } diff --git a/pkg/utils/slices.go b/pkg/utils/slices.go index f6342e65..d46ad607 100644 --- a/pkg/utils/slices.go +++ b/pkg/utils/slices.go @@ -1,5 +1,7 @@ package utils +import "sort" + // Int64SliceEquals returns whether specific two int64 arrays equal func Int64SliceEquals(s1, s2 []int64) bool { if (s1 == nil) != (s2 == nil) { @@ -58,6 +60,13 @@ func ToUniqueInt64Slice(items []int64) []int64 { return uniqueItems } +// Int64Sort sorts the specified array with int64 items +func Int64Sort(items []int64) { + sort.Slice(items, func(i, j int) bool { + return items[i] < items[j] + }) +} + // ToSet returns a map where the keys are the items in the specified array func ToSet(items []int64) map[int64]bool { itemExistMap := make(map[int64]bool) diff --git a/pkg/utils/slices_test.go b/pkg/utils/slices_test.go index 1ae8bc71..2511fa0b 100644 --- a/pkg/utils/slices_test.go +++ b/pkg/utils/slices_test.go @@ -131,6 +131,14 @@ func TestToUniqueInt64Slice_NilOrEmpty(t *testing.T) { assert.Equal(t, expectedValue, actualValue) } +func TestInt64Sort(t *testing.T) { + actualValue := []int64{4, 3, 2, 1, 5} + expectedValue := []int64{1, 2, 3, 4, 5} + + Int64Sort(actualValue) + assert.Equal(t, expectedValue, actualValue) +} + func TestToSet(t *testing.T) { arr := []int64{0, 1, 2, 3, 2, 4, 0} actualValue := ToSet(arr)