public async Task Handle(CheckLoanValid message, IMessageHandlerContext context) { LoanChecked loanChecked = await _checkRulesService.CheckLegality(message); log.Info($"in CheckLoanLegalityHandler loanId : {message.LoanDetails.LoanId}"); await context.Publish(loanChecked); }
private async Task UpdateFailed_InvalidLoan(LoanChecked message) { await _loansRepository.UpdateLoanStatus(message.LoanId, LoanStatus.NotApprove); List <RuleTreeNode> failureRulesNode = GetFailureRulesList(message.CheckedRuleTree); List <LoanFailureRulesModel> failureRules = _mapper.Map <List <LoanFailureRulesModel> >(failureRulesNode); await _loansRepository.UpdateLoanFailureRules(message.LoanId, failureRules); }
private LoanChecked CreateValidCheckedLoan(List <RuleTreeNode> checkedRulesTree) { LoanChecked checkedLoan = new LoanChecked { IsLoanValid = true, CheckedRuleTree = checkedRulesTree }; return(checkedLoan); }
public async Task <LoanChecked> CheckLegality(CheckLoanValid loanToCheck) { List <RuleModel> rulesTree = await _checkRulesRepository.getRules(loanToCheck.LoanDetails.LoanProviderId); if (rulesTree.Count() == 0) { throw new LoanProviderNotFoundException(); //write to db log } LoanChecked loanChecked = ScanProviderTreeRules(rulesTree, loanToCheck); loanChecked.LoanId = loanToCheck.LoanDetails.LoanId; return(loanChecked); }
public async Task UpdateLoanAfterCheckLegality(LoanChecked message) { bool isLoanExist = await _loansRepository.CheckLoanExist(message.LoanId); if (isLoanExist) { if (message.IsLoanValid) { await UpdateSucceded_ValidLoan(message.LoanId); } else { await UpdateFailed_InvalidLoan(message); } } else { throw new LoanNotFoundException(); } }
private LoanChecked ScanProviderTreeRules(List <RuleModel> rulesTree, CheckLoanValid loanToCheck) { LoanChecked loanChecked = new LoanChecked(); bool isBranchRulesValid = true; List <RuleTreeNode> checkedRulesTree = _mapper.Map <List <RuleTreeNode> >(rulesTree); List <RuleModel> ruleRoots = rulesTree.Where(rl => rl.ParentRule == null).ToList(); List <RuleTreeNode> CheckedRulesRoots = checkedRulesTree.Where(rl => rl.ParentRuleId == 0).ToList(); for (int i = 0; i < ruleRoots.Count; i++) { isBranchRulesValid = CheckBranchRulesValid(ruleRoots[i], CheckedRulesRoots[i], loanToCheck); if (isBranchRulesValid) { loanChecked = CreateValidCheckedLoan(checkedRulesTree); return(loanChecked); } } loanChecked = CreateInvalidCheckedLoan(checkedRulesTree); return(loanChecked); }