public async Task Execute(DepositInput input)
        {
            IAccount account = await _accountRepository.Get(input.AccountId);

            if (account == null)
            {
                _outputHandler.Error($"The account {input.AccountId} does not exist or is already closed.");
                return;
            }

            ICredit credit = account.Deposit(_entityFactory, input.Amount);

            await _accountRepository.Update(account, credit);

            // Publish the event to the enterprice service bus
            await _serviceBus.PublishEventAsync(new Shared.Events.DepositCompleted()
            {
                AccountId = input.AccountId, Amount = input.Amount.ToMoney().ToDecimal()
            });

            await _unitOfWork.Save();

            DepositOutput output = new DepositOutput(
                credit,
                account.GetCurrentBalance()
                );

            _outputHandler.Default(output);
        }
Beispiel #2
0
        private void BuildOutput(ICredit credit, IAccount account)
        {
            var output = new DepositOutput(
                credit,
                account.GetCurrentBalance());

            this._depositOutputPort.Standard(output);
        }
 public void Default(DepositOutput output)
 {
     ViewModel = new ObjectResult(new DepositResponse(
                                      output.Transaction.Amount,
                                      output.Transaction.Description,
                                      output.Transaction.TransactionDate,
                                      output.UpdatedBalance
                                      ));
 }
Beispiel #4
0
        private void BuildOutput(ICredit credit, IAccount account)
        {
            var output = new DepositOutput(
                credit,
                account.GetCurrentBalance()
                );

            _outputHandler.Standard(output);
        }
        public void Standard(DepositOutput depositOutput)
        {
            var depositResponse = new DepositResponse(
                depositOutput.Transaction.Amount.ToMoney().ToDecimal(),
                depositOutput.Transaction.Description,
                depositOutput.Transaction.TransactionDate,
                depositOutput.UpdatedBalance.ToDecimal());

            ViewModel = new ObjectResult(depositResponse);
        }
Beispiel #6
0
        /// <summary>
        /// </summary>
        /// <param name="depositOutput"></param>
        public void Standard(DepositOutput depositOutput)
        {
            var depositEntity   = (Credit)depositOutput.Transaction;
            var depositResponse = new DepositResponse(
                depositEntity.Amount.ToMoney().ToDecimal(),
                Credit.Description,
                depositEntity.TransactionDate,
                depositOutput.UpdatedBalance.ToDecimal());

            this.ViewModel = new ObjectResult(depositResponse);
        }
Beispiel #7
0
        public void Default(DepositOutput depositOutput)
        {
            var depositResponse = new DepositResponse(
                depositOutput.Transaction.Amount,
                depositOutput.Transaction.Description,
                depositOutput.Transaction.TransactionDate,
                depositOutput.UpdatedBalance
                );

            ViewModel = new ObjectResult(depositResponse);
        }
        public async Task <IActionResult> Deposit([FromRoute] Guid accountId, DepositRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            DepositOutput output = await _depositUseCase.Execute(
                request.AccountId,
                request.Amount);

            _presenter.Populate(output, this);

            return(_presenter.ViewModel);
        }
Beispiel #9
0
        public void Populate(DepositOutput output)
        {
            if (output == null)
            {
                ViewModel = new NoContentResult();
                return;
            }

            ViewModel = new ObjectResult(new CurrentAccountBalanceModel(
                                             output.Transaction.Amount,
                                             output.Transaction.Description,
                                             output.Transaction.TransactionDate,
                                             output.UpdatedBalance
                                             ));
        }
        public async Task Deposit_ValidAccount_ShouldCompleteTask()
        {
            //ARRANGE
            var customerId = Guid.NewGuid();
            var account    = new Account(customerId);
            var amount     = new Amount(10);

            _accountReadOnlyRepository.Setup(m => m.Get(account.Id)).Returns(Task.FromResult(account));
            _accountWriteOnlyRepository.Setup(m => m.Update(account, It.IsAny <Credit>())).Returns(Task.CompletedTask);

            //ACT
            DepositOutput outPut = await depositUseCase.Execute(account.Id, amount);

            //ASSERT
            _accountReadOnlyRepository.Verify(v => v.Get(account.Id), Times.Once());
            _accountWriteOnlyRepository.Verify(v => v.Update(account, It.IsAny <Credit>()), Times.Once());
            Assert.Equal(amount.ToString(), outPut.UpdatedBalance.ToString());
            Assert.NotNull(outPut.Transaction);
        }
Beispiel #11
0
        public async void Deposit_Valid_Amount(string accountId, decimal amount)
        {
            var mockAccountReadOnlyRepository  = new Mock <IAccountReadOnlyRepository>();
            var mockAccountWriteOnlyRepository = new Mock <IAccountWriteOnlyRepository>();

            Account account = new Account(Guid.Parse(accountId));

            mockAccountReadOnlyRepository.SetupSequence(e => e.Get(It.IsAny <Guid>()))
            .ReturnsAsync(account);

            DepositUseCase sut = new DepositUseCase(
                mockAccountReadOnlyRepository.Object,
                mockAccountWriteOnlyRepository.Object
                );

            DepositOutput output = await sut.Execute(
                Guid.Parse(accountId),
                amount);

            Assert.Equal(100, output.UpdatedBalance);
        }
        public async Task Execute(DepositInput input)
        {
            IAccount account = await _accountRepository.Get(input.AccountId);

            if (account == null)
            {
                _outputHandler.Error($"The account {input.AccountId} does not exist or is already closed.");
                return;
            }

            ICredit credit = account.Deposit(_entityFactory, input.Amount);

            await _accountRepository.Update(account, credit);

            await _unitOfWork.Save();

            DepositOutput output = new DepositOutput(
                credit,
                account.GetCurrentBalance());

            _outputHandler.Default(output);
        }
 public void Standard(DepositOutput output)
 {
     Deposits.Add(output);
 }
 public void Populate(DepositOutput response, Controller controller)
 {
     ViewModel = controller.View();
 }
Beispiel #15
0
 public void Standard(DepositOutput output) => this.StandardOutput = output;
Beispiel #16
0
 public void Default(DepositOutput output)
 {
     Deposits.Add(output);
 }
 public void Standard(DepositOutput output) => this.Deposits.Add(output);