async Task DoImportationAsynchronously(int ImportationId)
        {
            int fusionRecordsToImport = 0;
            int dcsRecordsToImport    = 0;
            int fusionRecordsImported = 0;
            int dcsRecordsImported    = 0;
            var UploadFilesFolder     = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles");

            try
            {
                // FusionRequests table
                FilesPreprocessing.PreProcess(UploadFilesFolder);
                fusionRecordsToImport = FileSystem.GetNumberOfRecordsToImport(UploadFilesFolder, TableType.Fusion);
                dcsRecordsToImport    = FileSystem.GetNumberOfRecordsToImport(UploadFilesFolder, TableType.DCS);
                DatabaseProcessing.UpdateImportation(connectionString, ImportationId, fusionRecordsToImport, dcsRecordsToImport,
                                                     0, 0, "Files preprocess completed", false);
                DatabaseProcessing.CreateTempTable(connectionString, TableType.Fusion);
                DatabaseProcessing.ImportDataToTempTable(databaseName, SQLserverInstance, UploadFilesFolder, TableType.Fusion, connectionString);
                fusionRecordsImported = DatabaseProcessing.PostProcess(connectionString, TableType.Fusion);
                DatabaseProcessing.UpdateImportation(connectionString, ImportationId, fusionRecordsToImport, dcsRecordsToImport,
                                                     fusionRecordsImported, 0, "Finished processing Fusion records.", false);

                // DcsRequests table
                DatabaseProcessing.CreateTempTable(connectionString, TableType.DCS);
                DatabaseProcessing.ImportDataToTempTable(databaseName, SQLserverInstance, UploadFilesFolder, TableType.DCS, connectionString);
                dcsRecordsImported = DatabaseProcessing.PostProcess(connectionString, TableType.DCS);
                DatabaseProcessing.UpdateImportation(connectionString, ImportationId, fusionRecordsToImport, dcsRecordsToImport,
                                                     fusionRecordsImported, dcsRecordsImported, "Finished importing data.", true);
            }
            catch (Exception ex)
            {
                logger.LogInformation("There was a problem with the data importation: " + ex.Message);
                try
                {
                    DatabaseProcessing.UpdateImportation(connectionString, ImportationId, fusionRecordsToImport, dcsRecordsToImport,
                                                         fusionRecordsImported, dcsRecordsImported, ex.Message, true);
                }
                catch { }
            }
            logger.LogInformation("Files uploaded ok");
        }
        public IActionResult Upload()
        {
            try
            {
                int ImportationId     = DatabaseProcessing.InitializeImportation(connectionString);
                var files             = Request.Form.Files;
                var UploadFilesFolder = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles");
                FileSystem.SaveFilesToDisk(files, UploadFilesFolder);
                Task.Run(() => DoImportationAsynchronously(ImportationId));

                return(Ok());
            }
            catch (BadRequestException ex)
            {
                logger.LogInformation("There was a problem with the data importation: " + ex.Message);
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, "{\"error\": \"Internal server error:" + ex.Message + "\"}"));
            }
        }
 public IActionResult UploadStatus()
 {
     return(Ok("{\"status\": \"" + DatabaseProcessing.GetImportationStatus(connectionString) + "\"}"));
 }