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); }
public async Task <ActionResult <Models.LoanApplication> > Get(Guid loanId) { Models.LoanApplicationEntity loan = null; try{ loan = await _loans.GetAsync(loanId); }catch (ArgumentNullException) { return(NoContent()); }catch (Exception ex) { _logger.LogError(ex, "General error retriving loan"); return(StatusCode(StatusCodes.Status500InternalServerError)); } return(loan.AsLoanApplication()); }
public LoanApplicationEntity Add(NewLoanApplication newLoanApp) { if (newLoanApp.amount > _loansConfig.Value.max_loan_amount) { _logger.LogInformation("Loan rejected due to amount > max"); throw new ArgumentOutOfRangeException("amount"); } var createApp = new Models.LoanApplicationEntity() { FullName = newLoanApp.name, Amount = newLoanApp.amount, LoanStatus = Models.LoanStatus.PENDING }; _db.Loans.Add(createApp); _db.SaveChanges(); return(createApp); }
public async Task <LoanApplicationEntity> AddAsync(NewLoanApplication newLoanApp) { if (newLoanApp.amount > _loansConfig.Value.max_loan_amount) { throw new ArgumentOutOfRangeException("amount"); } var createApp = new Models.LoanApplicationEntity() { FullName = newLoanApp.name, Amount = newLoanApp.amount, LoanStatus = Models.LoanStatus.PENDING }; await _db.Loans.AddAsync(createApp); await _db.SaveChangesAsync(); return(createApp); }