public async Task <bool> Handle(AplicarVoucherPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _IPedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); if (pedido == null) { await _IMediateHandler.PublicarNotificacao(new DomainNotification("pedido", "Pedido não encontrado")); return(false); } var voucher = await _IPedidoRepository.ObterVoucherPorCodigo(message.CodigoVoucher); if (voucher == null) { await _IMediateHandler.PublicarNotificacao(new DomainNotification("voucher", "Voucher não encontrado")); return(false); } // esse método quem manipula se o voucher é aplicavel ou não é minha classe agreagteRoot que no caso é a classe de Pedido var voucherAplicavelValidation = pedido.AplicarVoucher(voucher); if (!voucherAplicavelValidation.IsValid) { foreach (var errorVoucher in voucherAplicavelValidation.Errors) { await _IMediateHandler.PublicarNotificacao(new DomainNotification(message.MessageType, errorVoucher.ErrorMessage)); } return(false); } pedido.AdicionarEvento(new PedidoAtualizadoEvent(message.ClienteId, pedido.Id, pedido.ValorTotal)); pedido.AdicionarEvento(new VoucherAplicadoPedidoEvent(message.ClienteId, pedido.Id, voucher.Id)); _IPedidoRepository.Atualizar(pedido); //Cenário real teria que debitar o quantidade de voucher utilizado //voucher.DebitarQuantidadeVoucherUtilizado(); //_IPedidoRepository.AtualizarVoucher(voucher); return(await _IPedidoRepository.IUnitOfWork.Commit()); }
public async Task <bool> Handle(AplicarVoucherPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); if (pedido == null) { await _mediatorHandler.PublicarNotificacao(new DomainNotification(message.MessageType, "Pedido não encontrado")); return(false); } var voucher = await _pedidoRepository.ObterVoucherPorCodigo(message.CodigoVoucher); if (voucher == null) { await _mediatorHandler.PublicarNotificacao(new DomainNotification(message.MessageType, "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 PedidoAtualizadoEvent(pedido.ClienteId, pedido.Id, pedido.ValorTotal)); pedido.AdicionarEvento(new VoucherAplicadoPedidoEvent(message.ClienteId, pedido.Id, voucher.Id)); _pedidoRepository.Atualizar(pedido); return(await _pedidoRepository.UnitOfWork.Commit()); }
public async Task <bool> Handle(AplicarVoucherPedidoCommand request, CancellationToken cancellationToken) { throw new NotImplementedException(); }