/// <summary> /// This method is used to upload customer and check status of upload asynchronously as well as it notify user about result of processing of data /// </summary> /// <param name="param"></param> private async void ProcessAndNotifyResult(TaskProcessParam param) { try { // #1 Upload customer data EvilUploadCustomerRequest evilCustRequest = new EvilUploadCustomerRequest(); evilCustRequest.Action = config.UploadAction; evilCustRequest.Customer = param.Customer; evilCustRequest.File = param.FileName; evilCustRequest.Property = param.UserName; evilCustRequest.Value = param.Value; var uploadRes = await evilUploadRepository.UploadCustomerData(evilCustRequest).ConfigureAwait(false); // if somehow we dont get the hash value then render response accordingly if (string.IsNullOrWhiteSpace(uploadRes.Hash)) { NotifyResult(param.FileName, uploadRes, param.AuthIdentity); } else { // #2 We got response and now its time to invoke check customer upload var checkUploadResponse = await evilUploadRepository.GetCustomer(uploadRes.Hash).ConfigureAwait(false); // Now, lets check if hash exists if (string.IsNullOrWhiteSpace(checkUploadResponse.Hash)) { uploadRes.Added = false; uploadRes.Errors = checkUploadResponse.Errors; } // #3 Notify web about response NotifyResult(param.FileName, uploadRes, param.AuthIdentity); } } catch (Exception ex) { var response = new EvilUploadCustomerResponse { Customer = param.Customer, Value = param.Value, Errors = new[] { ex.Message } // Ideally, it should be some meaningful error, or it should not on the first place!! }; // notify error result NotifyResult(param.FileName, response, param.AuthIdentity); } }
/// <summary> /// This method is used to upload customer data to 3rd party API /// </summary> /// <param name="customerRequest"></param> /// <returns></returns> public async Task <EvilUploadCustomerResponse> UploadCustomerData(EvilUploadCustomerRequest customerRequest) { using (var client = GetHttpClient(configData.ApiUrl)) { var content = new StringContent(JsonConvert.SerializeObject(customerRequest), Encoding.UTF8, "application/json"); var response = await client.PostAsync(configData.UploadUrl, content).ConfigureAwait(false); var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = JsonConvert.DeserializeObject <EvilUploadCustomerResponse>(responseText); result.Customer = customerRequest.Customer; result.Value = customerRequest.Value; return(result); } }