diff --git a/cmd/microservice-user-transactions-aggregate/main.go b/cmd/microservice-user-transactions-aggregate/main.go index 9e9b43e79..204fb4a86 100644 --- a/cmd/microservice-user-transactions-aggregate/main.go +++ b/cmd/microservice-user-transactions-aggregate/main.go @@ -91,49 +91,51 @@ func main() { }) // pending winners have the same behaviour as winners - winners.PendingWinners(func (pendingWinner winnerTypes.PendingWinner) { - var ( - network = pendingWinner.Network - transactionHash = pendingWinner.TransactionHash.String() - application = pendingWinner.Application.String() - usdWinAmount = pendingWinner.UsdWinAmount - senderAddress = pendingWinner.SenderAddress.String() - utility = pendingWinner.Utility - ) - - existingUserTransaction := user_actions.GetAggregatedUserTransactionByHash(network, transactionHash) - if existingUserTransaction == nil { - log.Fatal(func(k *log.Log) { - k.Format( - "Found a winner in transaction %v with no corresponding send!", - transactionHash, - ) - }) - } - // regardless of whether there's existing win data, always prefer to show - // an application if any logs in this transaction contain one - if existingUserTransaction.Application == "none" { - existingUserTransaction.Application = application - } - - winningAmountFloat := usdWinAmount + winners.PendingWinners(func (pendingWinners []winnerTypes.PendingWinner) { + for _, pendingWinner := range pendingWinners { + var ( + network = pendingWinner.Network + transactionHash = pendingWinner.TransactionHash.String() + application = pendingWinner.Application.String() + usdWinAmount = pendingWinner.UsdWinAmount + senderAddress = pendingWinner.SenderAddress.String() + utility = pendingWinner.Utility + ) + + existingUserTransaction := user_actions.GetAggregatedUserTransactionByHash(network, transactionHash) + if existingUserTransaction == nil { + log.Fatal(func(k *log.Log) { + k.Format( + "Found a winner in transaction %v with no corresponding send!", + transactionHash, + ) + }) + } + // regardless of whether there's existing win data, always prefer to show + // an application if any logs in this transaction contain one + if existingUserTransaction.Application == "none" { + existingUserTransaction.Application = application + } + + winningAmountFloat := usdWinAmount + + // no existing info, update all win-related fields + if existingUserTransaction.WinningAddress == "" && utility == "FLUID" { + existingUserTransaction.WinningAddress = senderAddress + existingUserTransaction.WinningAmount = winningAmountFloat + existingUserTransaction.RewardHash = transactionHash + existingUserTransaction.UtilityName = utility + } + + existingUtility := existingUserTransaction.UtilityName + + // update utility amount and name if unset + if utility != "FLUID" && (existingUtility == "FLUID" || existingUtility == "") { + existingUserTransaction.UtilityAmount = winningAmountFloat + existingUserTransaction.UtilityName = utility + } - // no existing info, update all win-related fields - if existingUserTransaction.WinningAddress == "" && utility == "FLUID" { - existingUserTransaction.WinningAddress = senderAddress - existingUserTransaction.WinningAmount = winningAmountFloat - existingUserTransaction.RewardHash = transactionHash - existingUserTransaction.UtilityName = utility - } - - existingUtility := existingUserTransaction.UtilityName - - // update utility amount and name if unset - if utility != "FLUID" && (existingUtility == "FLUID" || existingUtility == "") { - existingUserTransaction.UtilityAmount = winningAmountFloat - existingUserTransaction.UtilityName = utility + user_actions.UpdateAggregatedUserTransactionByHash(*existingUserTransaction, transactionHash) } - - user_actions.UpdateAggregatedUserTransactionByHash(*existingUserTransaction, transactionHash) }) } diff --git a/lib/queues/winners/winners.go b/lib/queues/winners/winners.go index d51958a24..b553697d3 100644 --- a/lib/queues/winners/winners.go +++ b/lib/queues/winners/winners.go @@ -9,7 +9,6 @@ package winners import ( "github.com/fluidity-money/fluidity-app/common/ethereum/fluidity" - "github.com/fluidity-money/fluidity-app/lib/databases/timescale/spooler" "github.com/fluidity-money/fluidity-app/lib/queue" "github.com/fluidity-money/fluidity-app/lib/types/network" types "github.com/fluidity-money/fluidity-app/lib/types/winners" @@ -80,12 +79,12 @@ func BlockedWinnersAll(f func(BlockedWinner)) { }) } -func PendingWinners(f func(spooler.PendingWinner)) { +func PendingWinners(f func([]types.PendingWinner)) { queue.GetMessages(TopicPendingWinners, func(message queue.Message) { - var pendingWinner types.PendingWinner + var pendingWinners []types.PendingWinner - message.Decode(&pendingWinner) + message.Decode(&pendingWinners) - f(pendingWinner) + f(pendingWinners) }) }