Ejemplo n.º 1
0
 public async Task CriarConta(string titular, int numeroConta, double saldoInicial)
 {
     await _contaRepository.CriarConta(new Conta()
     {
         UserID = titular, NumeroConta = numeroConta, Saldo = saldoInicial
     });
 }
Ejemplo n.º 2
0
        public void Handle(CriarContaCommand command)
        {
            #region Fail fast Validations
            ////Fail fast validations
            //command.Validate();
            //if (command.Invalid)
            //{
            //    NotificarValidacoesErro()
            //}
            #endregion

            #region Validacoes de negócio
            // Verificar se nome conta ja esta cadastrada
            if (_contaRepository.NomeContaExiste(command.Nome))
            {
                command.AddNotification("Nome", "Nome da conta já cadastrado no banco");
            }

            if (command.Invalid)
            {
                NotificarValidacoesErro(command.Notifications);
                return;
            }

            //TODO: verificar se o Cliente que está alterando, é o dono da conta
            #endregion

            #region Validacoes de dominio

            //gerar os VOs
            //rellacionamentos
            //caso exista VOs com validações, deve-se lembrar de agrega-los a entidade e suas validações as do handler
            //como os VOs de conta foram criados para "separar" as responsabilidades de conta e a conta é a raiz de agregação das mesmas,
            ////deixei as validações da mesma toda na entidade
            var conta = new Conta(
                command.Nome,
                command.ValorTotal,
                command.QtdParcelas,
                command.DiaPrimeiroPgto,
                command.FrequenciaDiaPgto,
                command.PorcVariacaoMensal,
                command.UsuarioId
                );

            //Aplicar as validacoes
            command.AddNotifications(conta);

            //Checar validacoes
            if (command.Invalid)
            {
                NotificarValidacoesErro(command.Notifications);
                return;
            }
            #endregion

            #region Acoes handle
            //Salvar informacoes
            _contaRepository.CriarConta(conta);

            //Enviar e-mail de conta cadastrada
            _emailService.Enviar("Desenvolvedor", "*****@*****.**", "Conta Cadastrada", "Conta cadastrada com sucesso");

            if (Commit())
            {
                //Dispara evento de processo concluido
                _bus.RaiseEvent(new ContaCriadaEvent(conta.Id, conta.Nome, conta.ValorTotal, conta.Pago, conta.QtdParcelas, conta.DataProxPgto, conta.Parcelado, conta.DataPrimeiroPgto, conta.FrequenciaDiaPgto, conta.PorcVariacaoMensal));
            }
            #endregion
        }