Esempio n. 1
0
        public Task Handle(RegistrarEnderecoCommand notification, CancellationToken cancellationToken)
        {
            var endereco = new Endereco(notification.Email,
                                        notification.CEP,
                                        notification.Rua,
                                        notification.Numero,
                                        notification.Complemento,
                                        notification.Bairro,
                                        notification.Cidade,
                                        notification.Estado);

            if (!_usuarioQueryRepository.UsuarioExistente(notification.Email))
            {
                NotificarErro(notification.MessageType, $"O usuario {notification.Email} não está cadastrado");
                return(Task.CompletedTask);
            }

            if (EnderecoExistente(notification.Email, notification.MessageType) != null)
            {
                return(Task.CompletedTask);
            }

            _enderecoCommandRepository.Adicionar(endereco);

            if (!HasNotificationsError())
            {
                _mediator.PublicarEvento(new EnderecoRegistradoEvent(endereco));
            }

            return(Task.CompletedTask);
        }
        public Task Handle(CadastrarExtratoCommand notification, CancellationToken cancellationToken)
        {
            if (!_usuarioQueryRepository.UsuarioExistente(notification.Email))
            {
                NotificarErro(notification.MessageType, $"O usuario {notification.Email} não está cadastrado");
                return(Task.CompletedTask);
            }

            var extrato = new Extrato(notification.Pontos, notification.Email, notification.Estabelecimento, DateTime.Now);

            _extratoCommandRepository.Adicionar(extrato);

            if (!HasNotificationsError())
            {
                _mediator.PublicarEvento(new ExtratoCadastradoEvent(extrato));
            }

            var saldo = AtualizarSaldo(notification.Email, notification.Pontos, notification.MessageType);

            if (!HasNotificationsError())
            {
                _mediator.PublicarEvento(new SaldoAtualizadoEvent(saldo));
            }

            return(Task.CompletedTask);
        }
Esempio n. 3
0
        public Task Handle(RealizarPedidoCommand notification, CancellationToken cancellationToken)
        {
            if (!_usuarioQueryRepository.UsuarioExistente(notification.Pedido.Email))
            {
                NotificarErro(notification.MessageType, $"O usuario {notification.Pedido.Email} não está cadastrado");
                return(Task.CompletedTask);
            }

            var endereco = PossuiEndereco(notification.Pedido.Email, notification.MessageType);

            if (endereco == null)
            {
                return(Task.CompletedTask);
            }

            var pedido = new Pedido(notification.Pedido.Email, Enums.StatusEntrega.AGUARDANDOENVIO, DateTime.Now, new List <PedidoItem>(), endereco);

            foreach (var item in notification.Pedido.Itens)
            {
                item.Produto = _produtoQueryRepository.ObterPorId(item.ProdutoId);

                if (item.Produto == null)
                {
                    NotificarErro(notification.MessageType, $"O id {item.ProdutoId} informado é inválido");
                    return(Task.CompletedTask);
                }
                ;

                item.CalcularPontuacao(item.Produto.Pontuacao);
                pedido.Itens.Add(item);
            }

            var totalPontosPedido = pedido.CalcularPontuacaoTotal();

            if (!PedidoValido(pedido))
            {
                return(Task.CompletedTask);
            }

            if (SaldoInsuficiente(pedido.Email, totalPontosPedido, notification.MessageType))
            {
                return(Task.CompletedTask);
            }

            _pedidoCommandRepository.Adicionar(pedido);
            if (!HasNotificationsError())
            {
                _mediator.PublicarEvento(new PedidoRealizadoEvent(pedido));
            }

            var saldo = AtualizarSaldo(pedido.Email, totalPontosPedido, notification.MessageType);

            if (!HasNotificationsError())
            {
                _mediator.PublicarEvento(new SaldoAtualizadoEvent(saldo));
            }

            return(Task.CompletedTask);
        }
        public Task Handle(AtualizarSaldoCommand notification, CancellationToken cancellationToken)
        {
            if (!_usuarioQueryRepository.UsuarioExistente(notification.Email))
            {
                NotificarErro(notification.MessageType, $"O usuario {notification.Email} não está cadastrado");
                return(Task.CompletedTask);
            }

            var saldo = new Saldo(notification.Email, notification.Pontos);

            _saldoCommandRepository.Atualizar(saldo);

            if (!HasNotificationsError())
            {
                _mediator.PublicarEvento(new SaldoAtualizadoEvent(saldo));
            }

            return(Task.CompletedTask);
        }