Ejemplo n.º 1
0
        public Task Handle(RegistrarLancamentoCommand request, CancellationToken cancellationToken)
        {
            var obterContaCorrente = _contaCorrenteRepository.GetEntity(x => x.NumeroConta == request.NumeroConta);

            if (obterContaCorrente == null)
            {
                _notifications.Handle(new DomainNotification("Lancamento", "Conta Corrente Inexistente"), cancellationToken);
                return(Task.CompletedTask);
            }

            var obterUltimoLancamento = _lancamentoRepository.ObterUltimoLancamento(obterContaCorrente.Id);
            var lancamento            = new Model.Lancamentos();

            if (obterUltimoLancamento == null)
            {
                lancamento = Model.Lancamentos.LancamentosFactory.NovoLancamentos(request.Valor, request.TipoOperacao, request.Valor, DateTime.Now, obterContaCorrente.Id);
            }
            else
            {
                var saldoAtualizado = request.TipoOperacao == Enum.TipoOperacao.CREDITO ? obterUltimoLancamento.Saldo + request.Valor : obterUltimoLancamento.Saldo - request.Valor;
                lancamento = Model.Lancamentos.LancamentosFactory.NovoLancamentos(request.Valor, request.TipoOperacao, saldoAtualizado, DateTime.Now, obterContaCorrente.Id);
            }

            if (!lancamento.EhValido())
            {
                NotificarValidacoesErro(lancamento.ValidationResult);
                return(Task.CompletedTask);
            }

            _lancamentoRepository.Add(lancamento);

            Commit();

            return(Task.CompletedTask);
        }