Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        public void EnumDescDataStoreGetFromSqlServer()
        {
            IEnumDescRepository dataStore = new EnumDescSaveToSqlServer();
            EnumDescCollection  enumDesc  = dataStore.GetDataEnumDescSetAsync().Result;

            //saveData.SaveDataEnumDescSet(edc);
            Assert.IsTrue(enumDesc.Count > 0);
        }
Beispiel #4
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;
        }
Beispiel #5
0
        /// <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}.");
            }));
        }
Beispiel #6
0
 /// <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);
 }
Beispiel #7
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));
        }
Beispiel #8
0
        /// <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);
        }
Beispiel #9
0
        /// <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);
        }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
        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"
                }
            };
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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"
                }
            };
        }
Beispiel #14
0
        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);
        }