public async Task <IActionResult> AplicarVoucher(string voucherCodigo) { var command = new AplicarVoucherPedidoCommand(ClienteId, voucherCodigo); await _mediatorHandler.EnviarComando(command); if (OperacaoValida()) { return(RedirectToAction("Index")); } return(View("Index", await _pedidoQueries.ObterCarrinhoCliente(ClienteId))); }
public async Task <bool> Handle(AplicarVoucherPedidoCommand request, CancellationToken cancellationToken) { if (!ValidarComando(request)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(request.ClienteId); if (pedido == null) { await _mediatorHandler.PublicarNotificacao(new DomainNotification("pedido", "Pedido não encontrado!")); return(false); } var voucher = await _pedidoRepository.ObterVoucherPorCodigo(request.CodigoVoucher); if (voucher == null) { await _mediatorHandler.PublicarNotificacao(new DomainNotification("pedido", "Voucher não encontrado!")); return(false); } var voucherAplicacaoValidation = pedido.AplicarVoucher(voucher); if (!voucherAplicacaoValidation.IsValid) { foreach (var error in voucherAplicacaoValidation.Errors) { await _mediatorHandler.PublicarNotificacao(new DomainNotification(error.ErrorCode, error.ErrorMessage)); } return(false); } pedido.AdicionarEvento(new VoucherAplicadoPedidoEvent(request.ClienteId, pedido.Id, voucher.Id)); _pedidoRepository.Atualizar(pedido); return(await _pedidoRepository.UnitOfWork.Commit()); }