Exemplo n.º 1
0
        public async Task <IAccount> CreateAccountAsync()
        {
            var account = accountFactory.NewAccount();
            await accountRepository.AddAsync(account);

            return(account);
        }
        public async Task <IAccount> OpenCheckingAccount(CustomerId customerId, PositiveMoney amount)
        {
            var account = _accountFactory.NewAccount(customerId);
            var credit  = account.Deposit(_accountFactory, amount);
            await _accountRepository.Add(account, credit);

            return(account);
        }
        private async Task OpenAccount(Money amountToDeposit)
        {
            var customerId = _customerService.GetCurrentCustomerId();
            var account    = _accountFactory.NewAccount(customerId, amountToDeposit.Currency);
            var credit     = _accountFactory.NewCredit(account, amountToDeposit, DateTime.UtcNow);

            await Deposit(account, credit);

            _outputPort?.Ok(account);
        }
Exemplo n.º 4
0
        public async Task Execute(RegisterInput input)
        {
            ICustomer customer;

            if (_userService.GetCustomerId() is CustomerId customerId)
            {
                try
                {
                    customer = await _customerRepository.GetBy(customerId);

                    _outputPort.CustomerAlreadyRegistered($"Customer already exists.");
                    return;
                }
                catch (CustomerNotFoundException)
                {
                }
            }

            customer = _customerFactory.NewCustomer(input.SSN, _userService.GetUserName());

            var account = _accountFactory.NewAccount(customer);

            var credit = account.Deposit(
                _accountFactory,
                input.InitialAmount);

            customer.Register(account);

            var user = _userFactory.NewUser(
                customer,
                _userService.GetExternalUserId());

            await _customerRepository.Add(customer);

            await _accountRepository.Add(account, credit);

            await _userRepository.Add(user);

            await _unitOfWork.Save();

            BuildOutput(_userService.GetExternalUserId(), customer, account);
        }