public List <CompareResultApiModel> GetApiResults()
        {
            var compareResultFile = _appSettingsHandler.ReadSetting("CompareApiResultFile");
            var fileRepo          = new FileCompareRepo();

            return(fileRepo.ReadFromFile <CompareResultApiModel>(compareResultFile));
        }
        public List <SavedQueryMetaCompareResultModel> GetSavedQueryResults()
        {
            var compareResultFile = _appSettingsHandler.ReadSetting("CompareSavedQueryResultFile");
            var fileRepo          = new FileCompareRepo();

            return(fileRepo.ReadFromSaveCompareResultModels(compareResultFile));
        }
        public void CompareSavedQueryMetaPxsq()
        {
            var fileRepo = new FileCompareRepo();
            var savedQueryMetaCompareResultModel = new List <SavedQueryMetaCompareResultModel>();
            var compareResultFile = _appSettingsHandler.ReadSetting("CompareSavedQueryResultFile");

            var pxsqFolder1 = _appSettingsHandler.ReadSetting("SQFileFormat1");
            var pxsqFolder2 = _appSettingsHandler.ReadSetting("SQFileFormat2");

            var resultFolder1 = _appSettingsHandler.ReadSetting("ResultFolder1");
            var resultFolder2 = _appSettingsHandler.ReadSetting("ResultFolder2");


            var directory     = new DirectoryInfo(pxsqFolder1);
            var masks         = new[] { "*.pxsq" };
            var savedQueryIds = masks.SelectMany(directory.EnumerateFiles);

            fileRepo.DeleteAllFilesInFolder($"{_appSettingsHandler.ReadSetting("ResultFolder1")}/SavedQueryMeta/");
            fileRepo.DeleteAllFilesInFolder($"{_appSettingsHandler.ReadSetting("ResultFolder2")}/SavedQueryMeta/");

            foreach (var savedQueryId in savedQueryIds)
            {
                var sqId = savedQueryId.Name.Substring(0, savedQueryId.Name.LastIndexOf("."));

                var sq1 = fileRepo.ReadFromFileJson($"{pxsqFolder1}\\{savedQueryId.Name}");
                var sq2 = fileRepo.ReadFromFileJson($"{pxsqFolder2}\\{savedQueryId.Name}");

                if (sq1 != null && sq2 != null)
                {
                    var sq1ResultString = SavedQueryString(sq1);
                    var sq2ResultString = SavedQueryString(sq2);

                    _savedQueryService.SaveToFile(sq1ResultString, sqId, "SavedQueryMeta",
                                                  $"{resultFolder1}\\SavedQueryMeta\\{sqId}\\");
                    _savedQueryService.SaveToFile(sq2ResultString, sqId, "SavedQueryMeta",
                                                  $"{resultFolder2}\\SavedQueryMeta\\{sqId}\\");

                    var result = CompareSavedQueryResults(
                        $@"{resultFolder1}\SavedQueryMeta\{sqId}\{sqId}_SavedQueryMeta.txt",
                        $@"{resultFolder2}\SavedQueryMeta\{sqId}\{sqId}_SavedQueryMeta.txt");
                    savedQueryMetaCompareResultModel.Add(new SavedQueryMetaCompareResultModel()
                    {
                        Id = sqId, Result = result
                    });
                }
                else
                {
                    savedQueryMetaCompareResultModel.Add(new SavedQueryMetaCompareResultModel()
                    {
                        Id = sqId, Result = null
                    });
                }
            }

            fileRepo.DeleteFile(compareResultFile);
            fileRepo.SaveToFile(savedQueryMetaCompareResultModel, compareResultFile);
        }
        public void CompareSavedQueryMetaDatabase()
        {
            var fileRepo = new FileCompareRepo();
            var compareResultModelList           = new List <CompareResultModel>();
            var savedQueryMetaCompareResultModel = new List <SavedQueryMetaCompareResultModel>();
            var connstring1 = _appSettingsHandler.ReadSetting("SavedQueryConnectionString1");
            var connstring2 = _appSettingsHandler.ReadSetting("SavedQueryConnectionString2");

            var compareResultFile = _appSettingsHandler.ReadSetting("CompareSavedQueryResultFile");

            var resultFolder1 = _appSettingsHandler.ReadSetting("ResultFolder1") + "/SavedQueryMeta/";
            var resultFolder2 = _appSettingsHandler.ReadSetting("ResultFolder2") + "/SavedQueryMeta/";

            ;

            fileRepo.DeleteAllFilesInFolder($"{resultFolder1}");
            fileRepo.DeleteAllFilesInFolder($"{resultFolder2}");

            var repo = new DatabaseRepo();

            var savedQueries = repo.GetSavedQueries(connstring1, 10);

            foreach (var savedQuery in savedQueries)
            {
                var savedQueryResult1 = repo.GetSavedQueryById(savedQuery, connstring1);
                var savedQueryResult2 = repo.GetSavedQueryById(savedQuery, connstring2);

                if (savedQueryResult1 != string.Empty && savedQueryResult2 != string.Empty)
                {
                    _savedQueryService.SaveToFile(savedQueryResult1, savedQuery, "SavedQueryMeta",
                                                  $"{resultFolder1}\\{savedQuery}\\");
                    _savedQueryService.SaveToFile(savedQueryResult2, savedQuery, "SavedQueryMeta",
                                                  $"{resultFolder2}\\{savedQuery}\\");

                    var result = CompareSavedQueryResults(
                        $@"{resultFolder1}\{savedQuery}\{savedQuery}_SavedQueryMeta.txt",
                        $@"{resultFolder2}\{savedQuery}\{savedQuery}_SavedQueryMeta.txt");

                    savedQueryMetaCompareResultModel.Add(new SavedQueryMetaCompareResultModel()
                    {
                        Id = savedQuery, Result = result
                    });
                }
                else
                {
                    savedQueryMetaCompareResultModel.Add(new SavedQueryMetaCompareResultModel()
                    {
                        Id = savedQuery, Result = null
                    });
                }
            }

            fileRepo.DeleteFile(compareResultFile);
            fileRepo.SaveToFile(savedQueryMetaCompareResultModel, compareResultFile);
        }
        public List <CompareResultApiModel> CompareApi(IEnumerable <MenuItem> level3Items, string level2qString, List <CompareResultApiModel> compareResultModelList)
        {
            var serverAddress1 = _appSettingsHandler.ReadSetting("WebApiAddress1");
            // get url for api site 2
            var serverAddress2 = _appSettingsHandler.ReadSetting("WebApiAddress2");
            var resultFolder1  = _appSettingsHandler.ReadSetting("ResultFolder1") + "/Api/";
            var resultFolder2  = _appSettingsHandler.ReadSetting("ResultFolder2") + "/Api/";
            var fileRepo       = new FileCompareRepo();

            foreach (var level3Item in level3Items)
            {
                var lev3qString = level2qString + $"/{level3Item.Id}";

                var queryResult1 = _savedQueryService.GetService(serverAddress1 + lev3qString);
                var queryResult2 = _savedQueryService.GetService(serverAddress2 + lev3qString);

                MetaTable metaTableResult;

                if (!string.IsNullOrEmpty(queryResult1) && !string.IsNullOrEmpty(queryResult2))
                {
                    metaTableResult = JsonConvert.DeserializeObject <MetaTable>(queryResult1);

                    var compareResultModel = new CompareResultApiModel()
                    {
                        TableId = level3Item.Id
                    };

                    //var outputFormats = Enum.GetValues(typeof(OutputFormatApi)).Cast<OutputFormatApi>();

                    var outputFormats = Enum.GetValues(typeof(OutputFormatApi)).Cast <OutputFormatApi>();

                    fileRepo.CreateFolder($"{resultFolder1}/{level3Item.Id}");
                    fileRepo.CreateFolder($"{resultFolder2}/{level3Item.Id}");

                    foreach (var outputFormat in outputFormats)
                    {
                        var tableQuery = MapToTableQuery(metaTableResult, outputFormat.ToString().Replace("_", "-"));

                        bool?result;


                        if (outputFormat == OutputFormatApi.xlsx)
                        {
                            bool res1;
                            bool res2;

                            res1 = _savedQueryService.PostAndSaveAsFile($"{serverAddress1}{lev3qString}",
                                                                        $"{level3Item.Id}_{outputFormat}",
                                                                        "xlsx", $"{resultFolder1}\\{level3Item.Id}\\"
                                                                        , tableQuery);

                            res2 = _savedQueryService.PostAndSaveAsFile($"{serverAddress1}{lev3qString}",
                                                                        $"{level3Item.Id}_{outputFormat}",
                                                                        "xlsx", $"{resultFolder2}\\{level3Item.Id}\\",
                                                                        tableQuery);

                            Thread.Sleep(5000);

                            if (res1 && res2)
                            {
                                var resultList1 =
                                    _excelComparer.ReadExcelFile(
                                        $@"{resultFolder1}\{level3Item.Id}\{level3Item.Id}_{outputFormat}.xlsx");
                                var resultList2 =
                                    _excelComparer.ReadExcelFile(
                                        $@"{resultFolder2}\{level3Item.Id}\{level3Item.Id}_{outputFormat}.xlsx");
                                result = CompareArrayLists(resultList1, resultList2);
                            }
                            else
                            {
                                result = null;
                            }
                        }
                        else
                        {
                            var res1 = _savedQueryService.PostService($"{serverAddress1 + lev3qString}", tableQuery);

                            var res2 = _savedQueryService.PostService($"{serverAddress2 + lev3qString}", tableQuery);

                            Thread.Sleep(5000);

                            if (res1 != null && res2 != null)
                            {
                                _savedQueryService.SaveToFile(res1, level3Item.Id, outputFormat.ToString(),
                                                              $"{resultFolder1}\\{level3Item.Id}\\");
                                _savedQueryService.SaveToFile(res2, level3Item.Id, outputFormat.ToString(),
                                                              $"{resultFolder2}\\{level3Item.Id}\\");
                                result = CompareSavedQueryResults(
                                    $@"{resultFolder1}/{level3Item.Id}/{level3Item.Id}_{outputFormat}.txt",
                                    $@"{resultFolder2}/{level3Item.Id}/{level3Item.Id}_{outputFormat}.txt");
                            }
                            else
                            {
                                result = null;
                            }
                        }
                        compareResultModel.UpdateModel(outputFormat, result);
                    }
                    compareResultModelList.Add(compareResultModel);
                }
            }
            return(compareResultModelList);
        }
        public void CompareApi(string language, string database)
        {
            // get url for api site 1
            var serverAddress1 = _appSettingsHandler.ReadSetting("WebApiAddress1");
            // get url for api site 2
            var serverAddress2 = _appSettingsHandler.ReadSetting("WebApiAddress2");

            var queryTextListPath = _appSettingsHandler.ReadSetting("queryTextListPath");

            var resultFolder1          = _appSettingsHandler.ReadSetting("ResultFolder1") + "/Api/";
            var resultFolder2          = _appSettingsHandler.ReadSetting("ResultFolder2") + "/Api/";
            var compareResultFile      = _appSettingsHandler.ReadSetting("CompareApiResultFile");
            var fileRepo               = new FileCompareRepo();
            var compareResultModelList = new List <CompareResultApiModel>();


            fileRepo.DeleteAllFilesInFolder(resultFolder1);
            fileRepo.DeleteAllFilesInFolder(resultFolder2);

            string qStringGlobal = string.Empty;

            qStringGlobal = _appSettingsHandler.ReadSetting("WebApiRootPrefix");

            qStringGlobal += language;

            qStringGlobal += $"/{database}";

            var menuItems =
                JsonConvert.DeserializeObject <IEnumerable <MenuItem> >(
                    _savedQueryService.GetService(serverAddress1 + qStringGlobal));

            if (!menuItems.Any())
            {
                return;
            }

            menuItems = GetReduceList <MenuItem>(menuItems.ToList());

            // menuItems = menuItems.Where(x => x.Id == "UF");

            foreach (var menuItem in menuItems)
            {
                string qString = string.Empty;

                qString = _appSettingsHandler.ReadSetting("WebApiRootPrefix");

                qString += language;

                qString += $"/{database}";

                qString += $"/{menuItem.Id}";
                var level1Items =
                    JsonConvert.DeserializeObject <IEnumerable <MenuItem> >(
                        _savedQueryService.GetService(serverAddress1 + qString));
                level1Items = GetReduceList <MenuItem>(level1Items.ToList());
                foreach (var level1Item in level1Items)
                {
                    var level1qString = qString + $"/{level1Item.Id}";
                    var level2Items   =
                        JsonConvert.DeserializeObject <IEnumerable <MenuItem> >(
                            _savedQueryService.GetService(serverAddress1 + level1qString));
                    level2Items = GetReduceList <MenuItem>(level2Items.ToList());
                    foreach (var level2Item in level2Items)
                    {
                        var level2qString = level1qString + $"/{level2Item.Id}";

                        var level2Result = _savedQueryService.GetService(serverAddress1 + level2qString);

                        try
                        {
                            var level3Items = JsonConvert.DeserializeObject <IEnumerable <MenuItem> >(level2Result);
                            level3Items = GetReduceList <MenuItem>(level3Items.ToList());
                            CompareApi(level3Items, level2qString, compareResultModelList);
                        }
                        catch (JsonSerializationException)
                        {
                            CompareApi(level2Items, level1qString, compareResultModelList);
                        }
                    }
                }
            }

            fileRepo.DeleteFile(compareResultFile);
            fileRepo.SaveToFile(compareResultModelList, compareResultFile);

            var resultFile = fileRepo.ReadFromFile <CompareResultApiModel>(compareResultFile);
        }
        public void Compare()
        {
            // get url for api site 1
            var serverAddress1 = _appSettingsHandler.ReadSetting("WebApiAddress1") + $"sq/";
            // get url for api site 2
            var serverAddress2 = _appSettingsHandler.ReadSetting("WebApiAddress2") + $"sq/";

            var queryTextListPath = _appSettingsHandler.ReadSetting("queryTextListPath");

            var resultFolder1          = _appSettingsHandler.ReadSetting("ResultFolder1") + "/SavedQuery/";
            var resultFolder2          = _appSettingsHandler.ReadSetting("ResultFolder2") + "/SavedQuery/";
            var compareResultFile      = _appSettingsHandler.ReadSetting("CompareResultFile");
            var fileRepo               = new FileCompareRepo();
            var compareResultModelList = new List <CompareResultModel>();

            var queryList = _repo.GetSavedQueryFileFormat(queryTextListPath);

            fileRepo.DeleteAllFilesInFolder(resultFolder1);
            fileRepo.DeleteAllFilesInFolder(resultFolder2);
            {
                foreach (var query in queryList)
                {
                    var compareResultModel = new CompareResultModel {
                        SavedQuery = query
                    };

                    var outputFormats = Enum.GetValues(typeof(OutputFormat)).Cast <OutputFormat>();

                    // Check if you can run the saved query at all on reference site
                    var res = _savedQueryService.GetService($"{serverAddress1}{query}");

                    if (res == null)
                    {
                        foreach (var outputFormat in outputFormats)
                        {
                            compareResultModel.UpdateModel(outputFormat, null);
                        }
                    }
                    else
                    {
                        foreach (var outputFormat in outputFormats)
                        {
                            bool saveQuery1;
                            bool saveQuery2;
                            bool?result;

                            if (outputFormat == OutputFormat.xlsx || outputFormat == OutputFormat.xlsx_doublecolumn)
                            {
                                saveQuery1 = _savedQueryService.GetAndSaveAsFile($"{serverAddress1}{query}.{outputFormat}",
                                                                                 $"{query}_{outputFormat}",
                                                                                 "xlsx", $"{resultFolder1}\\{query}\\");

                                saveQuery2 = _savedQueryService.GetAndSaveAsFile($"{serverAddress1}{query}.{outputFormat}",
                                                                                 $"{query}_{outputFormat}",
                                                                                 "xlsx", $"{resultFolder2}\\{query}\\");

                                Thread.Sleep(100);

                                if (saveQuery1 && saveQuery2)
                                {
                                    var resultList1 =
                                        _excelComparer.ReadExcelFile(
                                            $@"{resultFolder1}\{query}\{query}_{outputFormat}.xlsx");
                                    var resultList2 =
                                        _excelComparer.ReadExcelFile(
                                            $@"{resultFolder2}\{query}\{query}_{outputFormat}.xlsx");
                                    result = CompareArrayLists(resultList1, resultList2);
                                }
                                else
                                {
                                    result = null;
                                }
                            }
                            else
                            {
                                var res1 = _savedQueryService.GetService($"{serverAddress1}{query}.{outputFormat}");

                                var res2 = _savedQueryService.GetService($"{serverAddress2}{query}.{outputFormat}");

                                Thread.Sleep(100);

                                if (res1 != null && res2 != null)
                                {
                                    _savedQueryService.SaveToFile(res1, query, outputFormat.ToString(),
                                                                  $"{resultFolder1}\\{query}\\");
                                    _savedQueryService.SaveToFile(res2, query, outputFormat.ToString(),
                                                                  $"{resultFolder2}\\{query}\\");

                                    if (outputFormat == OutputFormat.html5_table)
                                    {
                                        fileRepo.DeleteFirstRowInFile($@"{resultFolder1}\{query}\{query}_{outputFormat}.txt");
                                        fileRepo.DeleteFirstRowInFile($@"{resultFolder2}\{query}\{query}_{outputFormat}.txt");
                                    }

                                    result = CompareSavedQueryResults(
                                        $@"{resultFolder1}\{query}\{query}_{outputFormat}.txt",
                                        $@"{resultFolder2}\{query}\{query}_{outputFormat}.txt");
                                }
                                else
                                {
                                    result = null;
                                }
                            }

                            compareResultModel.UpdateModel(outputFormat, result);
                        }
                    }
                    compareResultModelList.Add(compareResultModel);
                }

                fileRepo.DeleteFile(compareResultFile);
                fileRepo.SaveToFile(compareResultModelList, compareResultFile);
                var resultFile = fileRepo.ReadFromFile <CompareResultModel>(compareResultFile);
            }
        }