/// <summary> /// Loads the EnumSet Descriptions from the Datastore into Memory for use. /// </summary> public async Task RunLoadAsync() { if (DataStore is EnumDescSaveToCsv) { ((EnumDescSaveToCsv)DataStore).FileName = EnumFile; } _enumSetEndpoint.DataStore = DataStore; //Check EnumList.csv file //If no file make API call if (!await DataStore.DataExistsAsync()) { //build EnumDesc Collection await BuildEnumDescCollectionAsync(); } _enumDesc = await DataStore.GetDataEnumDescSetAsync(); foreach (EnumDescDataStoreModel enumDesc in _enumDesc) { if (!_enumSets.Any(x => x.Key.Equals(enumDesc.SetId.ToString()))) { _enumSets.Add(enumDesc.SetId.ToString(), enumDesc.SetDesc); } _enumMembers.Add(enumDesc.SetId.ToString() + ":" + enumDesc.MemberId.ToString(), enumDesc); } }
/// <summary> /// Run URL to build the EnumDescCollection /// </summary> /// <param name="taskUrl">Complete URL</param> /// <returns>bool: True = success</returns> public override async Task <bool> RunAsync(string taskUrl = null) { _url = taskUrl; _enumDescData = new EnumDescCollection(); _enumDescData.AddRange(await BuildEnumDescCollectionAsync()); return(true); }
public void EnumDescDataStoreGetFromSqlServer() { IEnumDescRepository dataStore = new EnumDescSaveToSqlServer(); EnumDescCollection enumDesc = dataStore.GetDataEnumDescSetAsync().Result; //saveData.SaveDataEnumDescSet(edc); Assert.IsTrue(enumDesc.Count > 0); }
/// <summary> /// Saves the EnumDescData into the Database /// </summary> /// <param name="items">EnumDescCollection</param> /// <returns></returns> public async Task SaveDataEnumDescSetAsync(EnumDescCollection items) { using (var conn = new SqlConnection(DBConnectionString)) { await conn.OpenAsync(); await conn.ExecuteAsync("InsertEnumList", new { EnumListUDT = items.AsTableValuedParameter("dbo.EnumListUDT") }, commandType : CommandType.StoredProcedure); conn.Close(); } _edcCollection = null; }
/// <summary> /// Save the EnumSet description to a file /// </summary> /// <param name="items">EnumDescCollection</param> /// <returns></returns> public Task SaveDataEnumDescSetAsync(EnumDescCollection items) { return(Task.Run(() => { using (var writer = new StreamWriter(FileName)) { var csv = new CsvWriter(writer); csv.WriteRecords(items); } LogManager.GetLogger(GetType()).Info($"EnumDescSaveToCsv.SaveDataEnumDescSetAsync: successly saved to {FileName}."); })); }
/// <summary> /// Checks to see if the data exists /// </summary> /// <returns>bool: True = Data exists</returns> public async Task <bool> DataExistsAsync() { try { //Check to make sure a DB connection exists and that the records exist _edcCollection = await GetDataEnumDescSetAsync(); } catch (Exception ex) { _log.Error($"EnumDescSaveToSqlServer.DataExistsAsync: failed to get data from database. Stack trace: {ex.StackTrace}"); return(false); } return(_edcCollection != null && _edcCollection.Count > 0); }
/// <summary> /// Read EnumSet descriptions from a file /// </summary> /// <returns>EnumDescCollection</returns> public Task <EnumDescCollection> GetDataEnumDescSetAsync() { var edc = new EnumDescCollection(); using (var reader = new StreamReader(FileName)) { var csv = new CsvReader(reader);// CsvWriter(writer); var result = csv.GetRecords <EnumDescDataStoreModel>(); foreach (EnumDescDataStoreModel item in result) { edc.Add(item); } } return(Task.FromResult(edc)); }
/// <summary> /// Build the EnumSet with the entire list of Enum Members /// </summary> /// <param name="setId">Set Id</param> /// <param name="setDescription">Set Description</param> /// <returns>EnumDescCollection</returns> private async Task <EnumDescCollection> GetMemberListAsync(string setId, string setDescription) { var memberList = new List <EnumMemberBatchCollectionItem>(); var enumMemberBatch = new BatchCollection <EnumMemberBatchCollectionItem>(); var nextURL = $"{_url}/{setId}{_membersEndPoint}?pageSize={_pageSize}"; var enumDesc = new EnumDescCollection(); try { _stopWatch.Start(); var setIdInt = 0; int.TryParse(setId, out setIdInt); while (!string.IsNullOrWhiteSpace(nextURL)) { enumMemberBatch = await GetCollectionAsync <EnumMemberBatchCollectionItem>($"{ApiRequest.UrlBase}{nextURL}"); if (enumMemberBatch != null) { memberList.AddRange(enumMemberBatch.Items); nextURL = enumMemberBatch.Next; } else { nextURL = string.Empty; } _stopWatch.Stop(); LoggerService.LogApiRequest(nextURL, memberList.Count, TimeSpan.FromMilliseconds(_stopWatch.Elapsed.TotalMilliseconds).ToString()); _stopWatch.Reset(); } foreach (var member in memberList) { enumDesc.Add(new EnumDescDataStoreModel { SetId = setIdInt, MemberId = member.Id, SetDesc = setDescription, MemberDesc = member.Description }); } } catch (Exception ex) { _stopWatch.Stop(); LoggerService.LogException(nextURL, TimeSpan.FromMilliseconds(_stopWatch.Elapsed.TotalMilliseconds).ToString(), ex); _stopWatch.Reset(); throw; } return(enumDesc); }
/// <summary> /// Queries the Database for the EnumSet descriptions /// </summary> /// <returns>EnumDescCollection</returns> public async Task <EnumDescCollection> GetDataEnumDescSetAsync() { if (_edcCollection != null) { return(_edcCollection); } _edcCollection = new EnumDescCollection(); using (var conn = new SqlConnection(DBConnectionString)) // "Data Source=.;Initial Catalog=MyDb;Integrated Security=True;")) { await conn.OpenAsync(); _edcCollection.AddRange(await conn.QueryAsync <EnumDescDataStoreModel>("GetEnumList", commandType: CommandType.StoredProcedure)); conn.Close(); } return(_edcCollection); }
/// <summary> /// Build the EnumSet description collection from the URL /// </summary> /// <returns>EnumDescCollection</returns> private async Task <EnumDescCollection> BuildEnumDescCollectionAsync() { var enumDescData = new EnumDescCollection(); var enumSetCollection = new BatchCollection <EnumSetBatchCollectionItem>(); var nextURL = $"{ _url}?pageSize={_pageSize}"; try { _stopWatch.Start(); var enumSetBatch = new List <EnumSetBatchCollectionItem>(); while (!string.IsNullOrWhiteSpace(nextURL)) { enumSetCollection = await GetCollectionAsync <EnumSetBatchCollectionItem>($"{ApiRequest.UrlBase}{nextURL}"); if (enumSetCollection != null) { enumSetBatch.AddRange(enumSetCollection.Items); nextURL = enumSetCollection.Next; } else { nextURL = string.Empty; } _stopWatch.Stop(); LoggerService.LogApiRequest(nextURL, enumSetCollection.Items.Count, TimeSpan.FromMilliseconds(_stopWatch.Elapsed.TotalMilliseconds).ToString()); _stopWatch.Reset(); } foreach (var item in enumSetBatch) { enumDescData.AddRange(await GetMemberListAsync(item.Id.ToString(), item.Description)); } } catch (Exception ex) { _stopWatch.Stop(); LoggerService.LogException(nextURL, TimeSpan.FromMilliseconds(_stopWatch.Elapsed.TotalMilliseconds).ToString(), ex); _stopWatch.Reset(); throw; } return(enumDescData); }
public void InitializeTest() { // Adding JSON file into IConfiguration. IConfiguration config = new ConfigurationBuilder() .AddJsonFile(@"C:\appsettings.json", true, true) .Build(); DBDataModel.DBConnectionString = $"Server={config["dbcomputer"]};Integrated Security=false;User Id={config["dbuser"]};Password={config["dbpassword"]};Initial Catalog=DataExtractor"; ApiRequest.InitializeAsync(new NullCache(), config["username"], config["password"], config["host"], true).Wait(); _enumSetEndPoint = new EnumSetEndPoint(); _edc = new EnumDescCollection { new EnumDescDataStoreModel { SetId = 1050, MemberId = 0, SetDesc = "(0-8) Stages", MemberDesc = "0 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 1, SetDesc = "(0-8) Stages", MemberDesc = "1 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 2, SetDesc = "(0-8) Stages", MemberDesc = "2 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 3, SetDesc = "(0-8) Stages", MemberDesc = "3 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 4, SetDesc = "(0-8) Stages", MemberDesc = "4 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 5, SetDesc = "(0-8) Stages", MemberDesc = "5 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 6, SetDesc = "(0-8) Stages", MemberDesc = "6 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 7, SetDesc = "(0-8) Stages", MemberDesc = "7 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 8, SetDesc = "(0-8) Stages", MemberDesc = "8 Stages" } }; }
public void EnumDescDataStoreGetFromCsv() { IEnumDescRepository saveData = new EnumDescSaveToCsv(); ((EnumDescSaveToCsv)saveData).FileName = @".\EnumFileGetTest.csv"; saveData.SaveDataEnumDescSetAsync(edc).Wait(); EnumDescCollection edc2 = saveData.GetDataEnumDescSetAsync().Result; Assert.IsTrue(edc2.Count == edc.Count); bool pass = true; foreach (EnumDescDataStoreModel enumDesc in edc2) { if (!edc.Exists(x => x.SetId == enumDesc.SetId && x.MemberId == enumDesc.MemberId)) { pass = false; } } Assert.IsTrue(pass); }
public void InitializeTest() { // Adding JSON file into IConfiguration. IConfiguration config = new ConfigurationBuilder() .AddJsonFile(@"C:\appsettings.json", true, true) .Build(); DBDataModel.DBConnectionString = $"Server={config["dbcomputer"]};Integrated Security=false;User Id={config["dbuser"]};Password={config["dbpassword"]}"; edc = new EnumDescCollection { new EnumDescDataStoreModel { SetId = 1050, MemberId = 0, SetDesc = "(0-8) Stages", MemberDesc = "0 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 1, SetDesc = "(0-8) Stages", MemberDesc = "1 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 2, SetDesc = "(0-8) Stages", MemberDesc = "2 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 3, SetDesc = "(0-8) Stages", MemberDesc = "3 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 4, SetDesc = "(0-8) Stages", MemberDesc = "4 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 5, SetDesc = "(0-8) Stages", MemberDesc = "5 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 6, SetDesc = "(0-8) Stages", MemberDesc = "6 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 7, SetDesc = "(0-8) Stages", MemberDesc = "7 Stages" }, new EnumDescDataStoreModel { SetId = 1050, MemberId = 8, SetDesc = "(0-8) Stages", MemberDesc = "8 Stages" } }; }
public void EnumSetEndPointRunAsync() { IEnumDescRepository csv = new EnumDescSaveToCsv(); ((EnumDescSaveToCsv)csv).FileName = @".\EnumSetFileSaveTest.csv"; _enumSetEndPoint.DataStore = csv; _enumSetEndPoint.RunAsync($"https://{ApiRequest.HttpHost}/{_enumSetEndPoint.ApiEndpoint}").Wait(); _enumSetEndPoint.SaveDataAsync(); EnumDescCollection edc = csv.GetDataEnumDescSetAsync().Result; bool hasPassed = true; foreach (EnumDescDataStoreModel dm in edc) { if (!_edc.Exists(x => x.SetId == dm.SetId && x.MemberId == dm.MemberId)) { hasPassed = false; break; } } Assert.IsTrue(hasPassed); }