diff --git a/pkg/api/transactions.go b/pkg/api/transactions.go index 45a9deaa..be308c8b 100644 --- a/pkg/api/transactions.go +++ b/pkg/api/transactions.go @@ -320,8 +320,6 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{} } transactionTagIds := allTransactionTagIds[transaction.TransactionId] - addTransactionTagIds := utils.Int64SliceMinus(tagIds, transactionTagIds) - removeTransactionTagIds := utils.Int64SliceMinus(transactionTagIds, tagIds) newTransaction := &models.Transaction{ TransactionId: transaction.TransactionId, @@ -345,11 +343,18 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{} (transaction.Type != models.TRANSACTION_DB_TYPE_TRANSFER_OUT || newTransaction.RelatedAccountId == transaction.RelatedAccountId) && (transaction.Type != models.TRANSACTION_DB_TYPE_TRANSFER_OUT || newTransaction.RelatedAccountAmount == transaction.RelatedAccountAmount) && newTransaction.Comment == transaction.Comment && - len(addTransactionTagIds) < 1 && - len(removeTransactionTagIds) < 1 { + utils.Int64SliceEquals(tagIds, transactionTagIds) { return nil, errs.ErrNothingWillBeUpdated } + var addTransactionTagIds []int64 + var removeTransactionTagIds []int64 + + if !utils.Int64SliceEquals(tagIds, transactionTagIds) { + removeTransactionTagIds = transactionTagIds + addTransactionTagIds = tagIds + } + err = a.transactions.ModifyTransaction(newTransaction, addTransactionTagIds, removeTransactionTagIds) if err != nil { diff --git a/pkg/utils/slices.go b/pkg/utils/slices.go index 5b1731f3..2f6e9d0f 100644 --- a/pkg/utils/slices.go +++ b/pkg/utils/slices.go @@ -1,5 +1,24 @@ package utils +// Int64SliceEquals returns whether specific two int64 arrays equal +func Int64SliceEquals(s1, s2 []int64) bool { + if (s1 == nil) != (s2 == nil) { + return false + } + + if len(s1) != len(s2) { + return false + } + + for i := 0; i < len(s1); i++ { + if s1[i] != s2[i] { + return false + } + } + + return true +} + // Int64SliceMinus returns a int64 array which contains items in s1 but not in s2 func Int64SliceMinus(s1, s2 []int64) []int64 { if s1 == nil {