Beispiel #1
0
        async Task <bool> BuyStock(MySqlConnection cnn, BuyTrigger trigger)
        {
            int numStock = trigger.Amount / _cost; // most whole number stock that can buy
            int amount   = numStock * _cost;       // total amount spent
            int leftover = trigger.Amount - amount;

            using (MySqlCommand cmd = new MySqlCommand())
            {
                cmd.Connection  = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "buy_trigger";

                cmd.Parameters.AddWithValue("@pUserId", trigger.User);
                cmd.Parameters["@pUserId"].Direction = ParameterDirection.Input;
                cmd.Parameters.AddWithValue("@pStock", trigger.StockSymbol);
                cmd.Parameters["@pStock"].Direction = ParameterDirection.Input;
                cmd.Parameters.AddWithValue("@pStockAmount", amount);
                cmd.Parameters["@pStockAmount"].Direction = ParameterDirection.Input;
                cmd.Parameters.AddWithValue("@pMoneyLeftover", leftover);
                cmd.Parameters["@pMoneyLeftover"].Direction = ParameterDirection.Input;

                await cmd.ExecuteNonQueryAsync().ConfigureAwait(false);
            }
            return(true);
        }
Beispiel #2
0
        public async Task <string> AddOrUpdateUser(UserCommandType command)
        {
            if (_users.TryGetValue(command.username, out BuyTrigger trigger))
            {
                if (!command.fundsSpecified) // Using fundsSpecified to indicate if it was SET_BUY_AMOUNT (false) or SET_BUY_TRIGGER (true)
                {
                    return("Buy amount already set for this stock");
                }
                if ((int)(command.funds) == trigger.Trigger)
                {
                    return("Trigger amount already set for this stock");
                }
                if ((int)command.funds > trigger.Amount)
                {
                    return("Trigger amount can not be greater than buy amount");
                }
                trigger.Trigger = (int)(command.funds);
                if (trigger.Trigger >= _cost)
                {
                    await BuyStockAndRemoveUserTrigger(new BuyTrigger[] { trigger }).ConfigureAwait(false);
                }
                return(null); // Signals success, output in Service
            }
            if (command.fundsSpecified)
            {
                return("Set buy amount before creating trigger");
            }

            trigger = new BuyTrigger(command.username, command.stockSymbol, (int)(command.funds));
            while (!_users.TryAdd(command.username, trigger))
            {
                ;
            }

            return(null); // Signals success, output in Service
        }