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));
        }
Exemple #3
0
        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));
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        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);
            }
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }