public async Task <BulkRegistrationResponse> ProcessBulkRegistrationsAsync(BulkRegistrationRequest request) { var requestUri = $"/api/registration/bulk-upload1"; var response = await PostAsync <BulkRegistrationRequest, BulkRegistrationResponse>(requestUri, request); return(response); }
public async Task <BulkRegistrationResponse> ProcessBulkRegistrationsAsync1(BulkRegistrationRequest request) { var requestUri = $"/api/registration/bulk-upload1"; using var content = new MultipartFormDataContent(); //content.Add(new StreamContent(request.RegistrationFile.OpenReadStream()) //{ // Headers = // { // ContentLength = request.RegistrationFile.Length, // ContentType = new MediaTypeHeaderValue(request.RegistrationFile.ContentType) // } //}, "Attachment", "FileImport"); var response = await _httpClient.PostAsync(requestUri, content); response.EnsureSuccessStatusCode(); return(JsonConvert.DeserializeObject <BulkRegistrationResponse>(await response.Content.ReadAsStringAsync())); }
public async Task <IActionResult> BulkRegistrationsAsync(RegistrationsFileViewModel model) { var watch = System.Diagnostics.Stopwatch.StartNew(); watch.Start(); if (!ModelState.IsValid) { return(View("Upload", model)); } var fileName = $"inputfile_{DateTime.Now.Ticks}.csv"; var bulkRegistrationRequest = new BulkRegistrationRequest { performedBy = "*****@*****.**", Ukprn = 10009696, // NCFE BlobReferencePath = fileName }; using (var fileStream = model.RegistrationFile.OpenReadStream()) { await _blobStorageService.UploadFileAsync(_configuration.BlobStorageConnectionString, "registrations", $"{bulkRegistrationRequest.Ukprn}/processing/{fileName}", fileStream); } ////await _blobStorageService.MoveFileAsync(_configuration.BlobStorageConnectionString, "registrations", "1000008/processing/inputfile.csv", "1000008/processed/inputfile.csv"); var results = await _internalApiClient.ProcessBulkRegistrationsAsync(bulkRegistrationRequest); //var results = await _internalApiClient.ProcessBulkRegistrationsAsync(model.RegistrationFile); watch.Stop(); // Temp code for validation ViewBag.ElapsedTime = watch.ElapsedMilliseconds; //TempData[ValidationErrors] = JsonConvert.SerializeObject(results.ValidationErrors); TempData[ValidationErrors] = Convert.ToBase64String(results.ErrorFileBytes); return(View()); }
public async Task <BulkRegistrationResponse> ProcessBulkRegistrationsAsync(BulkRegistrationRequest request) { var response = new BulkRegistrationResponse(); try { long ukprn = 10009696; /*NCFE*/ var performedBy = "*****@*****.**"; // Todo: pass-through model or azure-blob //await _registrationService.CompareRegistrations(); //await _registrationService.CompareAndProcessRegistrations(); using (var fileStream = await _blobStorageService.DownloadFileAsync(_configuration.BlobStorageConnectionString, "registrations", $"{request.Ukprn}/processing/{request.BlobReferencePath}")) { if (fileStream == null) { return(response); // need to handle response when null } var documentUploadHistory = new DocumentUploadHistory { TlAwardingOrganisationId = 1, FileName = "Hello", BlobReference = request.BlobReferencePath, DocumentType = 1, FileType = 1, Status = 1, // 1- success , 2 - failed // need to be Enum CreatedBy = request.performedBy, CreatedOn = DateTime.UtcNow }; var validationResponse = await _csvParserService.ValidateAndParseFileAsync(new RegistrationCsvRecord { FileStream = fileStream }); // Stage 2 validation //var validationResponse = await _csvParserService.ValidateAndParseFileAsync(new RegistrationCsvRecord { FileStream = fileStream }); if (validationResponse.ResponseModel.Any(x => x.IsFileReadDirty)) { response.ValidationErrors = validationResponse.ResponseModel .Where(x => x.IsFileReadDirty) .Select(x => x.ValidationErrors) .FirstOrDefault().ToList(); // We are here when unexpected error while reading file, so filedirty is set(above) and add if any half-way row-levels errors(below) // Todo: force test is required or unit-test must check this. response.Registrations = validationResponse.ResponseModel.Where(x => !x.IsValid && !x.IsFileReadDirty); //response.ValidationErrors.AddRange(response.ValidationMessages); documentUploadHistory.Status = 2; // update status to failed await SaveValidationErrorsToBlobStorage(request.Ukprn, request.BlobReferencePath, response.ValidationErrors); await MoveFileAsync($"{request.Ukprn}/processing/{request.BlobReferencePath}", $"{request.Ukprn}/failed/{request.BlobReferencePath}"); await CreateDocumentUploadHistory(documentUploadHistory); return(response); } // Stage 3 validation. await _registrationService.ValidateRegistrationTlevelsAsync(ukprn, validationResponse.ResponseModel.Where(x => x.IsValid)); if (validationResponse.ResponseModel.Any(x => !x.IsValid)) { // Merge both Stage2 and Stage3 validations and return. var invalidRegistrations = validationResponse.ResponseModel.Where(x => !x.IsValid); response.Registrations = invalidRegistrations; response.ValidationErrors = response.ValidationMessages; // copy response.ErrorFileBytes = await _csvParserService.WriteErrorFile(response.ValidationErrors); documentUploadHistory.Status = 2; await SaveValidationErrorsToBlobStorage(request.Ukprn, request.BlobReferencePath, response.ValidationErrors); await MoveFileAsync($"{request.Ukprn}/processing/{request.BlobReferencePath}", $"{request.Ukprn}/failed/{request.BlobReferencePath}"); await CreateDocumentUploadHistory(documentUploadHistory); return(response); } // Step: Map data to DB model type. var tqRegistrations = _registrationService.TransformRegistrationModel(validationResponse.ResponseModel, performedBy).ToList(); // Step: Process DB operation var result = await _registrationService.CompareAndProcessRegistrations(tqRegistrations); if (result.IsSuccess) { await MoveFileAsync($"{request.Ukprn}/processing/{request.BlobReferencePath}", $"{request.Ukprn}/processed/{request.BlobReferencePath}"); await CreateDocumentUploadHistory(documentUploadHistory); } } } catch (Exception ex) { await MoveFileAsync($"{request.Ukprn}/processing/{request.BlobReferencePath}", $"{request.Ukprn}/failed/{request.BlobReferencePath}"); } return(response); }