@page "/" @using Controllers.Payment @rendermode InteractiveServer Home
@if (Session == null){

LOGIN

username
password
@loginError
}else{

Account

UserName: @Session.UserName
@foreach(PurchasedStock cur in Session.TrackedStocks){
@cur.Symbol
@cur.Quantity
@cur.PurchasePrice
@cur.PurchaseDate.ToString("M-D-YYYY")
}

Actions

@if (Debounce){ }else{ } @resultError
}

Current Signal

@foreach (stockPredictionPair cur in predictions){

@cur.Symbol

->
@if (cur.Movement == -1){

Sell

} else if (cur.Movement == 1){

Buy

} else{

Hold

}
}
@code { // User Stuff loginSession? Session = null; // Login Stuff string userName = ""; string passWord = ""; string loginError = ""; List predictions = new List(){ new stockPredictionPair(){ Symbol = "AAPL" }, new stockPredictionPair(){ Symbol = "AAPL" }, new stockPredictionPair(){ Symbol = "TTD" }, new stockPredictionPair(){ Symbol = "FUN" } }; string PaymentKey = ""; protected override async Task OnInitializedAsync(){ (bool, string) result = PaymentProcessor.CreatePayment(); if (!result.Item1){ resultError = result.Item2; } PaymentKey = result.Item2; } async Task LoginSession(){ string dbPrefix = $"[{userName.ToLower()}]:"; // Set the DB prefix for the get and set string passwordhash = dbDriver.Get( dbPrefix + "password" ); // Pull the password hash if (BCrypt.Verify( passWord, passwordhash )){ // If the password is valid List? stocks = JsonConvert.DeserializeObject>( dbDriver.Get( dbPrefix + "stock-data" ) ); Session = new loginSession(){ UserName = userName.ToLower(), TrackedStocks = stocks != null ? stocks : new List() }; }else{ loginError = "wrong password"; } } async Task registerSession(){ string dbPrefix = $"[{userName.ToLower()}]:"; string passwordhash = dbDriver.Get( dbPrefix + "password" ); if (string.IsNullOrEmpty(passwordhash)){ dbDriver.Set( dbPrefix + "password", BCrypt.HashPassword( passWord, BCrypt.GenerateSalt() ) ); Session = new loginSession(){ UserName = userName.ToLower(), TrackedStocks = new List() }; }else{ loginError = "account is taken"; } } // AI Stuff string pullButtonText = "Pull Data"; string trainButtonText = "Train AI"; string predictButtonText = "Predict AI"; string resultError = ""; bool Debounce = true; async Task pull(){ resultError = ""; if (Debounce){ Debounce = false; pullButtonText = "Do not refresh the page. The data is pulling."; await Task.Delay(1); Task thread = new Task(async () => { aiModule.PullAI(); pullButtonText = "Data pulled"; await InvokeAsync(StateHasChanged); await Task.Delay(2000); pullButtonText = "Pull Data"; await InvokeAsync(StateHasChanged); Debounce = true; }); thread.Start(); } } async Task train(){ resultError = ""; if (Debounce){ Debounce = false; trainButtonText = "Do not refresh the page. The AI is training."; await Task.Delay(1); Task thread = new Task(async () => { aiModule.TrainAI(); trainButtonText = "AI Trained"; StateHasChanged(); await Task.Delay(2000); trainButtonText = "Train AI"; StateHasChanged(); Debounce = true; }); thread.Start(); } } async Task predict(){ resultError = ""; if (Debounce){ Debounce = false; predictButtonText = "Do not refresh the page. The AI is predicting"; await Task.Delay(1); List threadpool = new List(); foreach(stockPredictionPair cur in predictions){ Task thread = new Task(() => { (string, int)Result = aiModule.PredictAI(cur.Symbol); if (string.IsNullOrEmpty(Result.Item1)){ cur.Movement = Result.Item2; }else{ resultError = Result.Item1; } Console.WriteLine("Received Signal [" + cur.Symbol + "] : " + cur.Movement); }); thread.Start(); threadpool.Add(thread); } await Task.WhenAll(threadpool); predictButtonText = "Predictions loaded"; await Task.Delay(2000); predictButtonText = "Predict AI"; Debounce = true; } } // Stock Manipulation string buyStockSymbol = ""; string buyStockQuantity = ""; float StockPrice = 0; void buyStock(){ if (Session != null){ // Try Parse the quantitiy input bool success = float.TryParse(buyStockQuantity, out float QuantityResult); if (!success){ resultError = "Quantity field is not a number"; return; } // Try Pay for the stock (bool, string) result = PaymentProcessor.TryPayment(PaymentKey, QuantityResult * StockPrice); if (!result.Item1){ resultError = result.Item2; return; } // Add the item Session.TrackedStocks.Add( new PurchasedStock(){ Symbol = buyStockSymbol.ToLower(), PurchasePrice = StockPrice, Quantity = QuantityResult, PurchaseDate = DateTime.Now } ); // Reset the Impodent Key result = PaymentProcessor.CreatePayment(); if (!result.Item1){ resultError = "[Payment suceeded but new payment session failed] : " + result.Item2; return; } PaymentKey = result.Item2; } } // Data Types class stockPredictionPair { public string Symbol { get; set; } = ""; public int Movement { get; set; } = 0; } class loginSession { public string UserName { get; set; } = ""; public List TrackedStocks { get; set; } = new List(); } class PurchasedStock { public string Symbol { get; set; } = ""; public float PurchasePrice { get; set; } = 0; public float Quantity { get; set; } = 0; public DateTime PurchaseDate { get; set; } = DateTime.Now; } }