Esempio n. 1
0
        public async Task <PreviewRestoreModel> PreviewBackup(string backupId)
        {
            var previewModel = new PreviewRestoreModel();
            var backup       = await _backupRepository.GetOneAsync(backupId);

            var zipFile = await _fileSeviceProvider.DownloadFileAsync(backup.FileId);

            var fileNameWithoutExt = FileUtil.GetFileNameWithoutExt(zipFile.FileName);
            var restoreFilePath    = Path.Combine(_backupOptions.CurrentValue.RestoreFolderPath, zipFile.FileName);

            Directory.CreateDirectory(_backupOptions.CurrentValue.RestoreFolderPath);
            using (var fileStream = File.Create(restoreFilePath))
            {
                fileStream.Write(zipFile.FileBytes, 0, zipFile.FileBytes.Length);
            }

            // Release file in memory
            zipFile.FileBytes = null;
            var folderExtractingPath = Path.Combine(_backupOptions.CurrentValue.RestoreFolderPath, fileNameWithoutExt);

            if (Directory.Exists(folderExtractingPath))
            {
                Directory.Delete(folderExtractingPath, true);
            }
            ZipFile.ExtractToDirectory(restoreFilePath, folderExtractingPath);

            var jsonBackupFilePath = Path.Combine(folderExtractingPath, fileNameWithoutExt + ".json");

            var jsonBackupString    = File.ReadAllText(jsonBackupFilePath);
            var backupFlatternModel = ConvertUtil.DeserializeObject <BackupFlatternFileModel>(jsonBackupString);

            foreach (var chainingFile in backupFlatternModel.ChainingFiles)
            {
                switch (chainingFile)
                {
                case APP_FILE:
                    var appFilePath    = Path.Combine(folderExtractingPath, APP_FILE);
                    var appsListString = File.ReadAllText(appFilePath);
                    var appsList       = ConvertUtil.DeserializeObject <IEnumerable <App> >(appsListString);
                    previewModel.Apps = await _appServiceProvider.CompareEntities(appsList);

                    break;

                case STANDARD_FILE:
                    var standardFilePath = Path.Combine(folderExtractingPath, STANDARD_FILE);
                    var standardsString  = File.ReadAllText(standardFilePath);
                    var standarsList     = ConvertUtil.DeserializeObject <IEnumerable <StandardComponent> >(standardsString);
                    previewModel.Standards = await _standardServiceProvider.CompareStandardComponent(standarsList);

                    break;

                case TREE_FILE:
                    var treeFilePath = Path.Combine(folderExtractingPath, TREE_FILE);
                    var treeString   = File.ReadAllText(treeFilePath);
                    var treeList     = ConvertUtil.DeserializeObject <IEnumerable <StandardComponent> >(treeString);
                    previewModel.Tree = await _standardServiceProvider.CompareStandardComponent(treeList);

                    break;

                case ARRAY_FILE:
                    var arrayFilePath = Path.Combine(folderExtractingPath, ARRAY_FILE);
                    var arrayString   = File.ReadAllText(arrayFilePath);
                    var arrayList     = ConvertUtil.DeserializeObject <IEnumerable <StandardComponent> >(arrayString);
                    previewModel.Array = await _standardServiceProvider.CompareStandardComponent(arrayList);

                    break;

                case CHART_FILE:
                    var chartFilePath = Path.Combine(folderExtractingPath, CHART_FILE);
                    var chartsString  = File.ReadAllText(chartFilePath);
                    var chartsList    = ConvertUtil.DeserializeObject <IEnumerable <Chart> >(chartsString);
                    previewModel.Charts = await _chartServiceProvider.CompareCharts(chartsList);

                    break;

                case DATABASE_FILE:
                    var databaseFilePath = Path.Combine(folderExtractingPath, DATABASE_FILE);
                    var databasesString  = File.ReadAllText(databaseFilePath);
                    var databasesList    = ConvertUtil.DeserializeObject <IEnumerable <DatabaseConnection> >(databasesString);
                    previewModel.Databases = await _databaseServiceProvider.CompareDatabases(databasesList);

                    break;

                case PAGE_FILE:
                    var pageFilePath = Path.Combine(folderExtractingPath, PAGE_FILE);
                    var pagesString  = File.ReadAllText(pageFilePath);
                    var pagesList    = ConvertUtil.DeserializeObject <IEnumerable <Page> >(pagesString);
                    previewModel.Pages = await _pageServiceProvider.ComparePages(pagesList);

                    break;

                case DYNAMICLIST_FILE:
                    var dynamicListFilePath = Path.Combine(folderExtractingPath, DYNAMICLIST_FILE);
                    var dynamicListString   = File.ReadAllText(dynamicListFilePath);
                    var dynamicListsList    = ConvertUtil.DeserializeObject <IEnumerable <DynamicList> >(dynamicListString);
                    previewModel.DynamicLists = await _dynamicListServiceProvider.CompareDynamicLists(dynamicListsList);

                    break;

                case COMPOSITE_CONTROL_FILE:
                    var compositeFilePath     = Path.Combine(folderExtractingPath, COMPOSITE_CONTROL_FILE);
                    var compositeString       = File.ReadAllText(compositeFilePath);
                    var compositeControlsList = ConvertUtil.DeserializeObject <IEnumerable <CompositeControl> >(compositeString);
                    previewModel.CompositeControls = await _compositeControlServiceProvider.Compare(compositeControlsList);

                    break;

                default:
                    break;
                }
            }

            Directory.Delete(folderExtractingPath, true);
            File.Delete(restoreFilePath);

            previewModel.TotalObjects =
                (previewModel.Apps != null ? previewModel.Apps.Count() : 0) +
                (previewModel.Charts != null ? previewModel.Charts.Count() : 0) +
                (previewModel.Databases != null ? previewModel.Databases.Count() : 0) +
                (previewModel.DynamicLists != null ? previewModel.DynamicLists.Count() : 0) +
                (previewModel.Pages != null ? previewModel.Pages.Count() : 0) +
                (previewModel.Standards != null ? previewModel.Standards.Count() : 0) +
                (previewModel.Tree != null ? previewModel.Tree.Count() : 0) +
                (previewModel.Array != null ? previewModel.Array.Count() : 0) +
                (previewModel.CompositeControls != null ? previewModel.CompositeControls.Count() : 0);

            previewModel.TotalNewObjects =
                (previewModel.Apps != null ? previewModel.Apps.Count(a => a.IsTotallyNew) : 0) +
                (previewModel.Charts != null ? previewModel.Charts.Count(a => a.IsTotallyNew) : 0) +
                (previewModel.Databases != null ? previewModel.Databases.Count(a => a.IsTotallyNew) : 0) +
                (previewModel.DynamicLists != null ? previewModel.DynamicLists.Count(a => a.IsTotallyNew) : 0) +
                (previewModel.Pages != null ? previewModel.Pages.Count(a => a.IsTotallyNew) : 0) +
                (previewModel.Standards != null ? previewModel.Standards.Count(a => a.IsTotallyNew) : 0) +
                (previewModel.Tree != null ? previewModel.Tree.Count(a => a.IsTotallyNew) : 0) +
                (previewModel.Array != null ? previewModel.Array.Count(a => a.IsTotallyNew) : 0) +
                (previewModel.CompositeControls != null ? previewModel.CompositeControls.Count(a => a.IsTotallyNew) : 0);

            previewModel.TotalUnchangedObjects =
                (previewModel.Apps != null ? previewModel.Apps.Count(a => a.IsUnchanged) : 0) +
                (previewModel.Charts != null ? previewModel.Charts.Count(a => a.IsUnchanged) : 0) +
                (previewModel.Databases != null ? previewModel.Databases.Count(a => a.IsUnchanged) : 0) +
                (previewModel.DynamicLists != null ? previewModel.DynamicLists.Count(a => a.IsUnchanged) : 0) +
                (previewModel.Pages != null ? previewModel.Pages.Count(a => a.IsUnchanged) : 0) +
                (previewModel.Standards != null ? previewModel.Standards.Count(a => a.IsUnchanged) : 0) +
                (previewModel.Tree != null ? previewModel.Tree.Count(a => a.IsUnchanged) : 0) +
                (previewModel.Array != null ? previewModel.Array.Count(a => a.IsUnchanged) : 0) +
                (previewModel.CompositeControls != null ? previewModel.CompositeControls.Count(a => a.IsUnchanged) : 0);

            previewModel.TotalChangedObjects =
                previewModel.TotalObjects - previewModel.TotalNewObjects - previewModel.TotalUnchangedObjects;

            return(previewModel);
        }