using System; using System.Collections.Generic; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using ReserveManagementSystemLib.Models; using ReserveManagementSystemUI.Helpers; using ReserveManagementSystemUI.Model.Configuration; using Serilog; using LCU.Library.Internal.LcuHttpClient; namespace ReserveManagementSystemUI.Services { public class ReserveService { private ILcuHttpClient _lcuHttpClient; private IConfiguration _config; private RmsUIConfiguration _rmsUIconfig; private AuthenticationStateProvider _authenticationStateProvider; private ServiceHelpers _serviceHelper; public ReserveService(ILcuHttpClient lcuHttpClient, AuthenticationStateProvider authenticationStateProvider, ServiceHelpers serviceHelper, RmsUIConfiguration rmsUIConfig) { _lcuHttpClient = lcuHttpClient; _authenticationStateProvider = authenticationStateProvider; _serviceHelper = serviceHelper; _rmsUIconfig = rmsUIConfig; } public async Task GetFilteredLoans(LoanFilter loanFilter) { PaginatedListResponse pagedLoanResponse = new PaginatedListResponse(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = $"{ _serviceHelper.GetControllerApiUrl("ApiUrl", "LoanController")}/SearchLoans"; var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); string json = JsonConvert.SerializeObject(loanFilter); HttpContent content = new StringContent(json, Encoding.UTF8, "application/json"); HttpResponseMessage response = client.PostAsync(apiUrl, content).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); pagedLoanResponse = JsonConvert.DeserializeObject(jsonString.Result); } return pagedLoanResponse; } catch (Exception ex) { Log.Error(ex, "Error getting loans."); pagedLoanResponse = null; } return await Task.FromResult(pagedLoanResponse); } public async Task> GetMemberNumbers(string searchText) { var members = new List(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = $"{ _serviceHelper.GetControllerApiUrl("ApiUrl", "LoanController")}/SearchMembers/{searchText}"; var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); var response = client.GetAsync(apiUrl).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); members = JsonConvert.DeserializeObject>(jsonString.Result); } return members; } catch (Exception ex) { Log.Error(ex, "Error getting members by search text."); members = null; } return await Task.FromResult(members); } public async Task> GetLoanNumbers(string searchText) { var loanNumbers = new List(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = $"{ _serviceHelper.GetControllerApiUrl("ApiUrl", "LoanController")}/SearchLoanNumbers/{searchText}"; var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); var response = client.GetAsync(apiUrl).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); loanNumbers = JsonConvert.DeserializeObject>(jsonString.Result); } return loanNumbers; } catch (Exception ex) { Log.Error(ex, "Error getting loan numbers by search text."); loanNumbers = null; } return await Task.FromResult(loanNumbers); } public async Task> GetApplicationIds(string searchText) { var applicationIds = new List(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = $"{ _serviceHelper.GetControllerApiUrl("ApiUrl", "LoanController")}/SearchApplicationIds/{searchText}"; var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); var response = client.GetAsync(apiUrl).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); applicationIds = JsonConvert.DeserializeObject>(jsonString.Result); } return applicationIds; } catch (Exception ex) { Log.Error(ex, "Error getting application ids by search text."); applicationIds = null; } return await Task.FromResult(applicationIds); } public async Task> GetDealers(string dealerSearchText) { var dealers = new List(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = $"{ _serviceHelper.GetControllerApiUrl("ApiUrl", "DealerController")}/Search/{dealerSearchText}"; var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); var response = client.GetAsync(apiUrl).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); dealers = JsonConvert.DeserializeObject>(jsonString.Result); } return dealers; } catch (Exception ex) { Log.Error(ex, "Error getting dealers by search text."); dealers = null; } return await Task.FromResult(dealers); } public async Task GetLoanById(int loanId) { Loan loanInfo = new Loan(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = $"{_serviceHelper.GetControllerApiUrl("ApiUrl", "LoanController")}/GetById/{loanId}"; var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); HttpResponseMessage response = client.GetAsync(apiUrl).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); loanInfo = JsonConvert.DeserializeObject(jsonString.Result); } } catch (Exception ex) { Log.Error(ex, "Error getting loan."); loanInfo = null; } return await Task.FromResult(loanInfo); } public async Task> GetAllImports() { var imports = new List(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = _serviceHelper.GetControllerApiUrl("ApiUrl", "ImportController"); var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); HttpResponseMessage response = client.GetAsync(apiUrl).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); imports = JsonConvert.DeserializeObject>(jsonString.Result) ?? new List(); } } catch (Exception ex) { Log.Error(ex, "Error getting imports."); imports = null; } return await Task.FromResult(imports); } public async Task> GetRecentImports(int numberOfImports) { var imports = new List(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = $"{_serviceHelper.GetControllerApiUrl("ApiUrl", "ImportController")}/GetRecentImports/{numberOfImports}"; var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); HttpResponseMessage response = client.GetAsync(apiUrl).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); imports = JsonConvert.DeserializeObject>(jsonString.Result) ?? new List(); } } catch (Exception ex) { Log.Error(ex, "Error getting imports."); imports = null; } return await Task.FromResult(imports); } public async Task> GetHistory() { var history = new List(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = _serviceHelper.GetControllerApiUrl("ApiUrl", "AuditHistoryController"); var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); HttpResponseMessage response = client.GetAsync(apiUrl).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); history = JsonConvert.DeserializeObject>(jsonString.Result); } } catch (Exception ex) { Log.Error(ex, "Error getting audit history."); history = null; } return await Task.FromResult(history); } public async Task GetActiveLoans() { var import = new Import(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = $"{_serviceHelper.GetControllerApiUrl("ApiUrl", "ImportController")}/ImportActiveLoans"; var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); var timeout = Convert.ToDouble(_rmsUIconfig.DefaultImportTimeout); client.Timeout = TimeSpan.FromMinutes(timeout); HttpResponseMessage response = client.PutAsync(apiUrl, null).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); import = JsonConvert.DeserializeObject(jsonString.Result); } } catch (Exception ex) { Log.Error(ex, "Error running active loan import process."); import = null; } return await Task.FromResult(import); } public async Task GetClosedLoans() { var import = new Import(); try { var authState = _authenticationStateProvider.GetAuthenticationStateAsync().Result; var apiUrl = $"{_serviceHelper.GetControllerApiUrl("ApiUrl", "ImportController")}/ImportClosedLoans"; var client = _lcuHttpClient.CreateClient(new Uri(apiUrl)); var timeout = Convert.ToDouble(_rmsUIconfig.DefaultImportTimeout); client.Timeout = TimeSpan.FromMinutes(timeout); HttpResponseMessage response = client.PutAsync(apiUrl, null).Result; if (response.IsSuccessStatusCode) { var jsonString = response.Content.ReadAsStringAsync(); jsonString.Wait(); import = JsonConvert.DeserializeObject(jsonString.Result); } } catch (Exception ex) { Log.Error(ex, "Error running closed loan import process."); import = null; } return await Task.FromResult(import); } } }