public static void LoadTrends(string sqlConnectionString, string twitterConsumerKey, string twitterConsumerSecret, string twitterAccessToken, string twitterAccessTokenSecret, Action <string> LogError) { var request = new RestRequest("1.1/trends/place.json", Method.GET); request.AddQueryParameter("id", "23424977"); request.AddQueryParameter("result_type", "popular"); var client = new RestClient("https://api.twitter.com") { Authenticator = OAuth1Authenticator.ForProtectedResource( twitterConsumerKey, twitterConsumerSecret, twitterAccessToken, twitterAccessTokenSecret) }; IRestResponse response = client.Execute(request); var content = response.Content; // raw content as string dynamic stuff = JsonConvert.DeserializeObject(content); string startTime = DBUtility.ExecuteScalar(sqlConnectionString, "SELECT FORMAT(GETDATE() , 'M/d/yy HH:mm')").ToString(); bool updatesMade = false; foreach (JObject item in stuff) { foreach (var trend in item["trends"]) { string trendName = ""; double?score = 0; try { int volume = 0; Int32.TryParse(trend["tweet_volume"].ToString(), out volume); List <SqlParameter> sparams = new List <SqlParameter>(); trendName = trend["name"].ToString(); var tweets = GetTweetsAsync(trendName, 10, twitterConsumerKey, twitterConsumerSecret, twitterAccessToken, twitterAccessTokenSecret); if (tweets == null || volume == 0) { continue; } score = GetVaderSentAvgAsync(tweets.Result).Result; sparams.Add(new SqlParameter("@NAME", trendName)); sparams.Add(new SqlParameter("@URL", trend["url"].ToString())); sparams.Add(new SqlParameter("@TWEETVOLUME", volume)); sparams.Add(new SqlParameter("@AVGSENTIMENT", score)); sparams.Add(new SqlParameter("@USERENTRY", false)); sparams.Add(new SqlParameter("@DATE", startTime)); DBUtility.ExecuteQuery(sqlConnectionString, "spInsertTrend", sparams); updatesMade = true; } catch (Exception e) { LogError($"Trend:{trendName} Score:{score} {e.ToString()}"); } } } // UPDATES WERE MADE LETS ZERO OUT ORPHANED TRENDS if (updatesMade) { var dt = DBUtility.GetDataTable(sqlConnectionString, "spSelectOrphanedTrends", new List <SqlParameter> { new SqlParameter("@LOADTIME", startTime) }); foreach (DataRow dr in dt.Rows) { List <SqlParameter> sqlp = new List <SqlParameter>(); sqlp.Add(new SqlParameter("@NAME", dr["Name"].ToString())); sqlp.Add(new SqlParameter("@URL", dr["URL"].ToString())); sqlp.Add(new SqlParameter("@TWEETVOLUME", Convert.ToInt32(0))); sqlp.Add(new SqlParameter("@AVGSENTIMENT", Convert.ToInt32(0))); sqlp.Add(new SqlParameter("@USERENTRY", true)); sqlp.Add(new SqlParameter("@DATE", startTime)); DBUtility.ExecuteQuery(sqlConnectionString, "spInsertTrend", sqlp); } } }
public async Task <(int ReturnCode, decimal?Balance)> InsertOrder(Order newOrder, Guid orderId, int status) { var dt = await DBUtility.GetDataTableAsync(opts.ConnectionString, "spSelectUserBalance", new List <SqlParameter> { new SqlParameter("@USERID", this.userId) }); var balance = Convert.ToDecimal(dt.Rows[0][0]); dt = await DBUtility.GetDataTableAsync(opts.ConnectionString, "spSelectUserShares", new List <SqlParameter> { new SqlParameter("@USERID", this.userId), new SqlParameter("@TRENDNAME", newOrder.TrendName) }); var totalTrendShares = Convert.ToDecimal(dt.Rows[0][0]); decimal amount = newOrder.Price * newOrder.Quantity; decimal newBalance = (newOrder.TradeTypeId == 1) ? balance - amount : balance + amount; decimal newShareQuantity = 0; //// IM TRYING TO BUY/SELL ZERO SHARES if (newOrder.Quantity <= 0) { return(1, null); } //// IM TRYING TO BUY/SELL TRENDS WITH A PRICE OF ZERO if (newOrder.Price == 0) { return(4, null); } //// IM TRYING TO BUY STUFF if (newOrder.TradeTypeId == 1) { // I DONT HAVE ENOUGH FUNDS TO BUY SHARES if (newBalance < 0) { return(2, null); } // I DO HAVE ENOUGH FUNDS TO BUY SHARES else { newShareQuantity = totalTrendShares + newOrder.Quantity; } } //// IM TRYING TO SELL STUFF if (newOrder.TradeTypeId == 2) { // I DONT HAVE ANY OR ENOUGH SHARES THAT IM TRYING TO SELL if (totalTrendShares < newOrder.Quantity) { return(3, null); } // I DO HAVE ENOUGH SHARES TO SELL else { newShareQuantity = totalTrendShares - newOrder.Quantity; } } List <SqlParameter> parameters = new List <SqlParameter>(); parameters.Add(new SqlParameter("@ORDERID", orderId)); parameters.Add(new SqlParameter("@USERID", newOrder.UserId)); parameters.Add(new SqlParameter("@TRENDID", newOrder.TrendId)); parameters.Add(new SqlParameter("@TRENDNAME", newOrder.TrendName)); parameters.Add(new SqlParameter("@TRADETYPEID", newOrder.TradeTypeId)); parameters.Add(new SqlParameter("@ACTIVITYID", newOrder.TradeTypeId)); parameters.Add(new SqlParameter("@PRICE", newOrder.Price)); parameters.Add(new SqlParameter("@QUANTITY", newOrder.Quantity)); parameters.Add(new SqlParameter("@TOTALAMOUNT", amount)); parameters.Add(new SqlParameter("@NEWBALANCE", newBalance)); parameters.Add(new SqlParameter("@STATUS", status)); parameters.Add(new SqlParameter("@NEWQUANTITY", newShareQuantity)); await DBUtility.ExecuteQueryAsync(opts.ConnectionString, "spInsertOrder", parameters); return(0, newBalance); }