public async Task <bool> Handle(AtualizarItemPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); if (pedido == null) { await _mediator.Publish(new DomainNotification("pedido", "Pedido não encontrado!"), cancellationToken); return(false); } var pedidoItem = await _pedidoRepository.ObterItemPorPedido(pedido.Id, message.ProdutoId); if (!pedido.PedidoItemExistente(pedidoItem)) { await _mediator.Publish(new DomainNotification("pedido", "Item do pedido não encontrado!"), cancellationToken); return(false); } pedido.AtualizarUnidades(pedidoItem, message.Quantidade); pedido.AdicionarEvento(new PedidoProdutoAtualizadoEvent(message.ClienteId, pedido.Id, message.ProdutoId, message.Quantidade)); _pedidoRepository.AtualizarItem(pedidoItem); _pedidoRepository.Atualizar(pedido); return(await _pedidoRepository.UnitOfWork.Commit()); }
public async Task <bool> Handle(AtualizarItemPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); if (pedido == null) { await _mediatorHandler.PublicarNotificacao(new DomainNotification("pedido", "Pedido não encontrado!")); return(false); } var pedidoItem = await _pedidoRepository.ObterItemPorPedido(pedido.Id, message.ProdutoId); if (!pedido.PedidoItemExistente(pedidoItem)) { await _mediatorHandler.PublicarNotificacao(new DomainNotification("pedido", "Item do pedido não encontrado!")); return(false); } pedido.AtualizarUnidades(pedidoItem, message.Quantidade); pedido.AdicionarEvento(new PedidoAtualizadoEvent(pedido.ClienteId, pedido.Id, pedido.ValorTotal)); pedido.AdicionarEvento(new PedidoProdutoAtualizadoEvent(message.ClienteId, pedido.Id, message.ProdutoId, message.Quantidade)); _pedidoRepository.AtualizarItem(pedidoItem); _pedidoRepository.Atualizar(pedido); // o Atualizar está aqui mais por uma intenção de mostrar o que está sendo feito, porque o próprio Change Tracker daria conta de atualizar ele sozinho; return(await _pedidoRepository.UnitOfWork.Commit()); }
public async Task <bool> Handle(AtualizarItemPedidoCommand 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 pedidoItem = await _pedidoRepository.ObterItemPorPedido(pedido.Id, request.ProdutoId); if (pedidoItem != null && !pedido.PedidoItemExistente(pedidoItem)) { await _mediatorHandler.PublicarNotificacao(new DomainNotification("pedido", "Item do pedido não encontrado")); return(false); } pedido.AtualizarUnidades(pedidoItem, request.Quantidade); pedido.AdicionarEvento(new PedidoAtualizadoEvent(pedido.ClienteId, pedido.Id, pedido.ValorTotal)); _pedidoRepository.AtualizarItem(pedidoItem); _pedidoRepository.Atualizar(pedido); return(await _pedidoRepository.UnitOfWork.Commit()); }
public async Task <bool> Handle(AtualizarItemPedidoCommand 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 pedidoItem = await _IPedidoRepository.ObterItemPorPedido(pedido.Id, message.ProdutoId); if (!pedido.PedidoItemExistente(pedidoItem)) { await _IMediateHandler.PublicarNotificacao(new DomainNotification("pedido", "Produto não encontrado")); return(false); } pedido.AtualizarUnidades(pedidoItem, message.Quantidade); pedido.AdicionarEvento(new PedidoAtualizadoEvent(message.ClienteId, pedido.Id, pedido.ValorTotal)); pedido.AdicionarEvento(new PedidoProdutoAtualizadoEvent(message.ClienteId, pedido.Id, pedidoItem.ProdutoId, pedidoItem.Quantidade)); _IPedidoRepository.AtualizarItem(pedidoItem); // se eu quisersse não precisaria chamar esse método porque o meu proprimo pedidoitem esta ligado ao pedido o changetracker do EF atualizaria automaticamente // mas é sempre bom chamar pra ficar explicito no código o que esta acontecendo _IPedidoRepository.Atualizar(pedido); return(await _IPedidoRepository.IUnitOfWork.Commit()); }
public async Task <bool> Handle(AtualizarItemPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); if (pedido == null) { await _mediatorHandler.PublicarNotificacao(new DomainNotification("pedido", "Pedido não encontrado!")); return(false); } var pedidoItem = await _pedidoRepository.ObterItemPorPedido(pedido.Id, message.ProdutoId); if (!pedido.PedidoItemExistente(pedidoItem)) { await _mediatorHandler.PublicarNotificacao(new DomainNotification("pedido", "Item do pedido não encontrado!")); return(false); } pedido.AtualizarUnidades(pedidoItem, message.Quantidade); //pedido.AdicionarEvento(new PedidoAtualizadoEvent(pedido.ClienteId, pedido.Id, pedido.ValorTotal)); pedido.AdicionarEvento(new PedidoProdutoAtualizadoEvent(message.ClienteId, pedido.Id, message.ProdutoId, message.Quantidade)); _pedidoRepository.AtualizarItem(pedidoItem); // colocado aqui apenas p ficar mais claro mas nem precisaria pq o atualizar de cima com o changeTracker já atualizaria o pedido _pedidoRepository.Atualizar(pedido); return(await _pedidoRepository.UnitOfWork.Commit()); }