public async Task ApproveLoan(Guid loanId, [FromBody] List <ApproveRuleDTO> approveRules) { ApproveLoanModel approveLoanModel = _mapper.Map <ApproveLoanModel>(approveRules); approveLoanModel.LoanId = loanId; CheckLoanValid checkLoanValid = await _managerLoansService.ApproveLoan(approveLoanModel); await _messageSession.Send(checkLoanValid) .ConfigureAwait(false); }
public async Task Update(Guid loanId, [FromBody] LoanDTO loanToUpdate)//לבדוק שהמיפוי אכן עובד ולראות אם לקבל יד { LoanModel loanModel = _mapper.Map <LoanModel>(loanToUpdate); Guid _loanId = await _loansService.Update(loanId, loanModel);//האם צריך שיחזור היד CheckLoanValid loanToCheck = _mapper.Map <CheckLoanValid>(loanModel); loanToCheck.LoanDetails.LoanId = loanId;//לבדוק שאכן מאותחל בערך await _messageSession.Send(loanToCheck) .ConfigureAwait(false); }
public async Task ApproveLoan(Guid loanId, List <ApproveRuleDTO> approveRules) { List <ApproveRuleModel> approveRulesModel = _mapper.Map <List <ApproveRuleModel> >(approveRules); ApproveLoanModel approveLoanModel = new ApproveLoanModel() { approveRules = approveRulesModel, LoanId = loanId }; CheckLoanValid checkLoanValid = await _managerLoansService.ApproveLoan(approveLoanModel); await _messageSession.Send(checkLoanValid); }
public async Task Update(Guid loanId, [FromBody] LoanDTO loanToUpdate) { LoanModel loanModel = _mapper.Map <LoanModel>(loanToUpdate); await _loansService.Update(loanId, loanModel); CheckLoanValid loanToCheck = new CheckLoanValid(); LoanDetails loanDetails = _mapper.Map <LoanDetails>(loanModel); loanDetails.LoanId = loanId; loanToCheck.LoanDetails = loanDetails; await _messageSession.Send(loanToCheck); }
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 <CheckLoanValid> ApproveLoan(ApproveLoanModel approveLoanModel) { bool isLoanExist = await _managerLoansRepository.CheckLoanExist(approveLoanModel.LoanId); if (!isLoanExist) { throw new LoanNotFoundException(); } await ApproveFailureRulesInDB(approveLoanModel); CheckLoanValid checkLoanValid = await CreateCheckLoanValid(approveLoanModel); return(checkLoanValid); }
public async Task <Guid> Create([FromBody] LoanDTO loan) { LoanModel loanModel = _mapper.Map <LoanModel>(loan); Guid loanId = await _loansService.Create(loanModel); CheckLoanValid loanToCheck = new CheckLoanValid(); LoanDetails loanDetails = _mapper.Map <LoanDetails>(loanModel); loanDetails.LoanId = loanId; loanToCheck.LoanDetails = loanDetails; await _messageSession.Send(loanToCheck); return(loanId); //Ok($"Your loan created successfully. Loan Id:{loanId}"); }
public async Task <Guid> Create([FromBody] LoanDTO loan)//לבדוק שהמיפוי אכן עובד ולראות אם לקבל יד { LoanModel loanModel = _mapper.Map <LoanModel>(loan); Guid loanId = await _loansService.Create(loanModel); CheckLoanValid loanToCheck = new CheckLoanValid(); LoanDetails loanDetails = _mapper.Map <LoanDetails>(loanModel); loanDetails.LoanId = loanId; loanToCheck.LoanDetails = loanDetails; await _messageSession.Send(loanToCheck) .ConfigureAwait(false); //del api return(loanId); }
private async Task <CheckLoanValid> CreateCheckLoanValid(ApproveLoanModel approveLoanModel) { List <int> ignoreRules = new List <int>(); foreach (var r in approveLoanModel.approveRules) { ignoreRules.Add(r.ApproveRuleId); } LoanModel loanModel = await _managerLoansRepository.GetLoanById(approveLoanModel.LoanId); CheckLoanValid checkLoanValid = new CheckLoanValid();//האם המיםוי של יד נצרך LoanDetails loanDetails = _mapper.Map <LoanDetails>(loanModel); checkLoanValid.LoanDetails = loanDetails; checkLoanValid.IgnoreRules = ignoreRules; checkLoanValid.LoanDetails.LoanId = approveLoanModel.LoanId; return(checkLoanValid); }
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); }
private bool CheckBranchRulesValid(RuleModel ruleRoot, RuleTreeNode checkedRulesRoot, CheckLoanValid message) { //depth tree scan using stack bool isBranchValid = true; Stack <RuleModel> rulesTreeStack = new Stack <RuleModel>(); Stack <RuleTreeNode> checkedRulesTreeStack = new Stack <RuleTreeNode>(); rulesTreeStack.Push(ruleRoot); checkedRulesTreeStack.Push(checkedRulesRoot); while (!(rulesTreeStack.Count == 0)) { var currentRuleToCheck = rulesTreeStack.Pop(); var currentCheckedRuleToUpdate = checkedRulesTreeStack.Pop(); for (int j = 0; j < currentRuleToCheck.ChildrenRules.Count; j++)//create stack of branch nodes { rulesTreeStack.Push(currentRuleToCheck.ChildrenRules[j]); checkedRulesTreeStack.Push(currentCheckedRuleToUpdate.ChildrenRules[j]); } var loanValueToCompare = message.LoanDetails.GetType().GetProperty(currentRuleToCheck.Parameter).GetValue(message.LoanDetails, null); bool isRuleValid = CheckRuleValid(loanValueToCompare, currentRuleToCheck, message.IgnoreRules); isBranchValid = isRuleValid ? isBranchValid : false; UpdateCheckedRulesTree(loanValueToCompare, currentCheckedRuleToUpdate, currentRuleToCheck, isRuleValid); if (currentRuleToCheck.ChildrenRules.Count == 0)//at end of branch { if (isBranchValid) { return(true); } isBranchValid = true; } } return(false); }