public override LoanProposal Handle(LoanProposal request) { Console.WriteLine("\nGetting client personal information."); var clientId = request.ClientId; var repo = new ClientRepository(); var clientPersonalInfo = repo.Find(x => x.Id == clientId).FirstOrDefault(); request.ClientPersonalInfo = clientPersonalInfo; return(base.Handle(request)); }
public override LoanProposal Handle(LoanProposal request) { Console.WriteLine("\nCreating loan proposal file.\n"); var filePath = CreatesFilePath(); using (StreamWriter outputFile = new StreamWriter(filePath, false)) { var serializedRequest = JsonConvert.SerializeObject(request, new StringEnumConverter()); outputFile.Write(serializedRequest); } return(base.Handle(request)); }
public override LoanProposal Handle(LoanProposal request) { Console.WriteLine("\nValidating bank account balance."); var clientId = request; var repo = new BankAccountRepository(); var bankAccount = repo.Find(x => x.ClientId == request.ClientId).FirstOrDefault(); if (bankAccount.Balance < request.Amount * 0.5m) { throw new Exception($"The client bank account must have at least 50% of the required loan amount."); } return(base.Handle(request)); }
public override LoanProposal Handle(LoanProposal request) { Console.WriteLine("\nGetting credit risk rate."); var creditRisk = request.ClientPersonalInfo.CreditRisk; var foundCreditRisk = _loanRates.TryGetValue(creditRisk, out var rate); if (!foundCreditRisk) { throw new Exception($"No loan rate found to credit risk {creditRisk.ToString()}"); } request.Rate = rate; return(base.Handle(request)); }
public void ProposeLoanShowsUp() { BoardState state = DataTest.SampleGame; ProposeLoanAction loan = new ProposeLoanAction { PlayerId = 0, LoanAmount = 123m, PayBack = 124m, Period = state.Settings.YearLength }; state = Tick.Apply(state, new List <GameAction> { loan }); LoanProposal prop = state.Proposals.First(l => l.LoanAmount == 123m); Assert.AreEqual(0, prop.PlayerId); Assert.AreEqual(123m, prop.LoanAmount); Assert.AreEqual(124m, prop.PayBack); Assert.AreEqual(state.Settings.YearLength, prop.Period); }
public override BoardState Apply(BoardState state, WithdrawProposalAction action) { try { Console.WriteLine(" -> Player {0} withdrawing a loan proposal", action.PlayerId); LoanProposal proposal = state.Proposals[action.ProposalId]; if (proposal.PlayerId == action.PlayerId) { state.Proposals.RemoveAt(action.ProposalId); } return(state); } catch { return(state); } }
static void Main(string[] args) { Console.WriteLine("Chain of Responsibility"); Console.WriteLine("Loan Proposal Example"); var handler = new ClientInfoHandler(); var clientCreditRiskHandler = new ClientCreditRiskHandler(); var bankAccountHandler = new BankAccountHandler(); var sendProposalHandler = new SendProposalHandler(); handler.SetNext(clientCreditRiskHandler).SetNext(bankAccountHandler).SetNext(sendProposalHandler); var loanProposal = new LoanProposal(new Guid("406acba3-4b4c-4879-b13c-1a019f0c27f1"), 1500); var sentLoanProposal = handler.Handle(loanProposal); Console.WriteLine(sentLoanProposal); }
public override BoardState Apply(BoardState state, TakeLoanAction action) { if (state.State == GameState.Started) { Console.WriteLine(" -> Player {0} taking a loan", action.PlayerId); if (action.LoanProposalId < state.Proposals.Count) { LoanProposal propose = state.Proposals[action.LoanProposalId]; if (propose.PlayerId != action.PlayerId) { Player to = state.Players[action.PlayerId]; to.Cash += propose.LoanAmount; state.Players[action.PlayerId] = to; if (propose.PlayerId > -1) { Player from = state.Players[propose.PlayerId]; from.Cash -= propose.LoanAmount; state.Players[propose.PlayerId] = from; } state.Loans.Add(new Loan { Amount = propose.LoanAmount, Period = propose.Period, Payment = propose.PayBack, LenderId = propose.PlayerId, BorrowerId = action.PlayerId, Start = DateTime.Now }); } } } return(state); }