From 28f113d99253ea0ca5df3e58f6b75491ecabc3a5 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Thu, 4 Apr 2024 20:42:40 +0800 Subject: [PATCH] code refactor --- pkg/services/transactions.go | 8 +------- pkg/utils/datetimes.go | 17 +++++++++++++++++ pkg/utils/datetimes_test.go | 9 +++++++++ 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/pkg/services/transactions.go b/pkg/services/transactions.go index 73cf6010..6064cdbe 100644 --- a/pkg/services/transactions.go +++ b/pkg/services/transactions.go @@ -111,18 +111,12 @@ func (s *TransactionService) GetTransactionsInMonthByPage(c *core.Context, uid i return nil, errs.ErrUserIdInvalid } - startMinUnixTime, err := utils.ParseFromLongDateTimeToMinUnixTime(fmt.Sprintf("%d-%02d-01 00:00:00", year, month)) - startMaxUnixTime, err := utils.ParseFromLongDateTimeToMaxUnixTime(fmt.Sprintf("%d-%02d-01 00:00:00", year, month)) + minTransactionTime, maxTransactionTime, err := utils.GetTransactionTimeRangeByYearMonth(year, month) if err != nil { return nil, errs.ErrSystemError } - endMaxUnixTime := startMaxUnixTime.AddDate(0, 1, 0) - - minTransactionTime := utils.GetMinTransactionTimeFromUnixTime(startMinUnixTime.Unix()) - maxTransactionTime := utils.GetMinTransactionTimeFromUnixTime(endMaxUnixTime.Unix()) - 1 - var transactions []*models.Transaction condition, conditionParams := s.getTransactionQueryCondition(uid, maxTransactionTime, minTransactionTime, transactionType, categoryIds, accountIds, keyword, true) diff --git a/pkg/utils/datetimes.go b/pkg/utils/datetimes.go index 7b2fad38..538ce587 100644 --- a/pkg/utils/datetimes.go +++ b/pkg/utils/datetimes.go @@ -177,6 +177,23 @@ func GetUnixTimeFromTransactionTime(transactionTime int64) int64 { return transactionTime / 1000 } +// GetTransactionTimeRangeByYearMonth returns the transaction time range by specified year and month +func GetTransactionTimeRangeByYearMonth(year int32, month int32) (int64, int64, error) { + startMinUnixTime, err := ParseFromLongDateTimeToMinUnixTime(fmt.Sprintf("%d-%02d-01 00:00:00", year, month)) + startMaxUnixTime, err := ParseFromLongDateTimeToMaxUnixTime(fmt.Sprintf("%d-%02d-01 00:00:00", year, month)) + + if err != nil { + return 0, 0, err + } + + endMaxUnixTime := startMaxUnixTime.AddDate(0, 1, 0) + + minTransactionTime := GetMinTransactionTimeFromUnixTime(startMinUnixTime.Unix()) + maxTransactionTime := GetMinTransactionTimeFromUnixTime(endMaxUnixTime.Unix()) - 1 + + return minTransactionTime, maxTransactionTime, nil +} + // parseFromUnixTime parses a unix time and returns a golang time struct func parseFromUnixTime(unixTime int64) time.Time { return time.Unix(unixTime, 0) diff --git a/pkg/utils/datetimes_test.go b/pkg/utils/datetimes_test.go index 54ae8199..f2af3c12 100644 --- a/pkg/utils/datetimes_test.go +++ b/pkg/utils/datetimes_test.go @@ -216,6 +216,15 @@ func TestGetUnixTimeFromTransactionTime(t *testing.T) { assert.Equal(t, expectedValue, actualValue) } +func TestGetTransactionTimeRangeByYearMonth(t *testing.T) { + expectedMinValue := int64(1704016800000) + expectedMaxValue := int64(1706788799999) + actualMinValue, actualMaxValue, err := GetTransactionTimeRangeByYearMonth(2024, 1) + assert.Equal(t, nil, err) + assert.Equal(t, expectedMinValue, actualMinValue) + assert.Equal(t, expectedMaxValue, actualMaxValue) +} + func TestParseFromUnixTime(t *testing.T) { expectedValue := int64(1617228083) actualTime := parseFromUnixTime(expectedValue)