private void OnUserTraded(object sender, UserTradedEventArgs e)
        {
            _logger.Verbose($"The user with Id {e.UserId} seems to be trading.");
            var userProfit = _ups.GetUserProfit(e.UserId);

            if (IsProfitableUser(userProfit))
            {
                _logger.Information($"The user with Id {e.UserId} seems to be profitable.");
                var eventArgs = new ProfitableUserTradedEventArgs()
                {
                    UserId  = e.UserId,
                    TradeId = e.TradeId,
                    Report  = userProfit,
                };

                ProfitableUserTraded?.Invoke(this, eventArgs);
            }
        }
        private TradeRegistrationContext ProcessRegisteredUsers(TradeRegistrationContext context, List <BinanceUser> users)
        {
            foreach (var user in users)
            {
                var isOldBuyer = string.Equals(context.BuyingPair.Symbol, user.CurrentWallet.Symbol);
                var pair       = isOldBuyer ? context.SellingPair : context.BuyingPair;

                var newWallet = new Wallet()
                {
                    OwnerId = user.Identifier,
                    Symbol  = pair.Symbol,
                    Balance = pair.Amount,
                    WalletCreatedFromTradeId = context.Trade.TradeId,
                };

                user.WalletsHistory.Add(newWallet);
                _repository.AddOrUpdateUser(user);
                _logger.Debug($"User with Id {user.Identifier} got updated.");
                UserTraded?.Invoke(this, UserTradedEventArgs.Create(user.Identifier, context.Trade.TradeId));
            }

            return(context);
        }