public async Task <Models.LoanApplication> CheckApprovalAsync(Models.LoanApplication loanApp) { _logger.LogInformation("Sending loan for approval"); _logger.LogInformation(loanApp.AsJson()); var s_loanApp = new StringContent(loanApp.AsJson(), Encoding.UTF8, "application/json"); HttpResponseMessage resp; try{ resp = await _client.PostAsync(_loanCheckerOptions.Value.ApprovalCheckPath, s_loanApp); }catch (Exception) { throw; } if (!resp.IsSuccessStatusCode) { _logger.LogError("Error requesting approval, http code {StatusCode}, reason {ReasonPhrase}", resp); throw new IOException(string.Format("Error checking loan, return http status code {0}", resp.StatusCode)); } string respContent = await resp.Content.ReadAsStringAsync(); _logger.LogInformation("Approval service response"); _logger.LogInformation(respContent); var respLoan = Models.LoanApplication.FromJson(respContent); return(respLoan); }
public async Task <ActionResult <Models.LoanApplication> > ApplyForLoan([FromBody] Models.NewLoanApplication newApp) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (string.IsNullOrEmpty(newApp.name)) { return(BadRequest("Missing loan applicant name")); } //Add the new entry to get id Models.LoanApplicationEntity loan = null; try{ loan = _loans.Add(newApp); }catch (ArgumentOutOfRangeException) { _logger.LogInformation("Loan rejected due to amount > max allowed"); return(BadRequest("Loan amount exceeds allowed limit")); } if (_env.IsDevelopment()) { return(Models.LoanApplication.FromJson(loan.AsLoanApplication().AsJson())); } //check for approval Models.LoanApplication loanApproval = null; try{ loanApproval = await _loanCheckerservice.CheckApprovalAsync(loan.AsLoanApplication()); }catch (IOException io) { //http response code != 200 _logger.LogError(io, "Error running loan check"); return(StatusCode(StatusCodes.Status500InternalServerError)); }catch (Exception ex) { _logger.LogError(ex, "General error running loan check"); return(StatusCode(StatusCodes.Status500InternalServerError)); } if (loanApproval == null) { _logger.LogError("returned loan entity was null"); return(StatusCode(StatusCodes.Status500InternalServerError)); } //save new status try{ _loans.Update(loanApproval); }catch (ArgumentNullException an) { _logger.LogError(an, "Error updating loan status after check for approval, argument {0} value was not found", an.ParamName); return(StatusCode(StatusCodes.Status500InternalServerError)); }catch (Exception ex) { _logger.LogError(ex, "General error updating loan status after check for approval"); return(StatusCode(StatusCodes.Status500InternalServerError)); } return(loanApproval); }