@page "/" @rendermode InteractiveServer Home
@if (Session == null){

LOGIN

username
password
@loginError
}else{
UserName: @Session.UserName
@foreach(PurchasedStock cur in Session.TrackedStocks){
@cur.Symbol
@cur.Quantity
@cur.PurchasePrice
@cur.PurchaseDate.ToString("M-D-YYYY")
}
Actions
}
@foreach (stockPredictionPair cur in predictions){

Symbol: @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" } }; 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"; bool pullDebounce = true; async Task pull(){ if (pullDebounce){ pullDebounce = 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); pullDebounce = true; }); thread.Start(); } } bool trainDebounce = true; async Task train(){ if (trainDebounce){ trainDebounce = 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(); trainDebounce = true; }); thread.Start(); } } async Task predict(){ 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(() => { cur.Movement = aiModule.PredictAI(cur.Symbol); 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"; } // 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; } }