Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        private LoanChecked CreateValidCheckedLoan(List <RuleTreeNode> checkedRulesTree)
        {
            LoanChecked checkedLoan = new LoanChecked
            {
                IsLoanValid     = true,
                CheckedRuleTree = checkedRulesTree
            };

            return(checkedLoan);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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();
            }
        }
Beispiel #6
0
        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);
        }