public async Task <bool> Handle(AdicionarItemPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoPorCliente(message.ClienteId); if (pedido == null) { await _mediatorHandler.PublicarNotificacao(new DomainNotification("pedido", "Pedido não encontrado!")); return(false); } var pedidoItem = new PedidoItem(0, message.ProdutoId, message.Quantidade, pedido.Id); _pedidoRepository.AdicionarItem(pedidoItem); await _pedidoRepository.UnitOfWork.Commit(); _mongo.PedidosItens.InsertOne(new DtoPedidoItem(pedidoItem.Id, pedidoItem.Quantidade, pedidoItem.ProdutoId, pedidoItem.Pedido.Id)); return(true); }
public async Task <bool> Handle(AdicionarItemPedidoCommand request, CancellationToken cancellationToken) { if (!ValidarComando(request)) { return(false); } var pedido = await _pedidoRepository.ObterListaRascunhoPorClienteId(request.ClienteId); var pedidoItem = new PedidoItem(request.ProdutoId, request.Nome, request.Quantidade, request.ValorUnitario); if (pedido == null) { pedido = Pedido.PedidoFactory.NovoPedidoRascunho(request.ClienteId); pedido.AdicionarItem(pedidoItem); _pedidoRepository.Adicionar(pedido); } else { var pedidoExistente = pedido.PedidoItemExistente(pedidoItem); pedido.AdicionarItem(pedidoItem); if (pedidoExistente) { _pedidoRepository.AtualizarItem(pedido.PedidoItems.FirstOrDefault(p => p.ProdutoId == pedidoItem.ProdutoId)); } else { _pedidoRepository.AdicionarItem(pedidoItem); } } return(await _pedidoRepository.UnitOfWork.Commit()); }
public async Task <bool> Handle(AdicionarItemPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); var pedidoItem = new PedidoItem(message.ProdutoId, message.Nome, message.Quantidade, message.ValorUnitario); if (pedido == null) { pedido = Pedido.PedidoFactory.NovoPedidoRascunho(message.ClienteId); pedido.AdicionarItem(pedidoItem); _pedidoRepository.Adicionar(Pedido.PedidoFactory.NovoPedidoRascunho(message.ClienteId)); } else { var pedidoItemExistente = pedido.PedidoItemExistente(pedidoItem); pedido.AdicionarItem(pedidoItem); if (pedidoItemExistente) { _pedidoRepository.AtualizarItem(pedido .PedidoItems .FirstOrDefault(p => p.ProdutoId == pedidoItem.ProdutoId)); } else { _pedidoRepository.AdicionarItem(pedidoItem); } _pedidoRepository.Atualizar(pedido); } pedido.AdicionarEvento(new PedidoItemAdicionadoEvent( pedido.ClienteId, pedido.Id, message.ProdutoId, message.Nome, message.ValorUnitario, message.Quantidade)); return(await _pedidoRepository.UnitOfWork.Commit()); //minuto 15: 39 }
public async Task <bool> Handle(AdicionarItemPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); var pedidoItem = new PedidoItem(message.ProdutoId, message.Nome, message.Quantidade, message.ValorUnitario); if (pedido == null) { pedido = Pedido.PedidoFactory.NovoPedidoRascunho(message.ClienteId); pedido.AdicionarItem(pedidoItem); _pedidoRepository.Adicionar(pedido); } else { var pedidoItemExistente = pedido.PedidoItemExistente(pedidoItem); if (pedidoItemExistente) { var itemExistente = pedido.ObterPedidoItem(pedidoItem.ProdutoId); var quantidadeItems = itemExistente.Quantidade + pedidoItem.Quantidade; if (quantidadeItems > Pedido.MAX_UNIDADES_ITEM) { await _mediator.Publish(new DomainNotification("pedidoCommandHandler", $"A quantidade máxima de um item é {Pedido.MAX_UNIDADES_ITEM}"), cancellationToken); return(false); } pedido.AdicionarItem(pedidoItem); _pedidoRepository.AtualizarItem(pedido.PedidoItems.FirstOrDefault(p => p.ProdutoId == pedidoItem.ProdutoId)); } else { pedido.AdicionarItem(pedidoItem); _pedidoRepository.AdicionarItem(pedidoItem); } _pedidoRepository.Atualizar(pedido); } pedido.AdicionarEvento(new PedidoItemAdicionadoEvent(pedido.ClienteId, pedido.Id, message.ProdutoId, message.Nome, message.ValorUnitario, message.Quantidade)); return(await _pedidoRepository.UnitOfWork.Commit()); }
private void AtualizarPedido(Pedido pedido, PedidoItem pedidoItem) { var pedidoItemExistente = pedido.PedidoItemExistente(pedidoItem); pedido.AdicionarItem(pedidoItem); if (pedidoItemExistente) { _pedidoRepository.AtualizarItem(pedido.PedidoItems.FirstOrDefault(p => p.ProdutoId == pedidoItem.ProdutoId)); } else { _pedidoRepository.AdicionarItem(pedidoItem); } }
private void AtualizarItem(Pedido pedido, PedidoItem item) { var itemJaExisteNoPedido = pedido.Contem(item); pedido.AdicionarItem(item); if (itemJaExisteNoPedido) { _pedidoRepository.AtualizarItem(item); } else { _pedidoRepository.AdicionarItem(item); } _pedidoRepository.Atualizar(pedido); }
// ele sempre retorna uma task poque ele funciona com base assincrona public async Task <bool> Handle(AdicionarItemPedidoCommand message, CancellationToken cancellationToken) { // antes de seguir em frente sempre vou validar se meu comando é válido if (!ValidarComando(message)) { return(false); } var pedido = await _IPedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); var pedidoItem = new PedidoItem(message.ProdutoId, message.Nome, message.Quantidade, message.ValorUnitario); if (pedido == null) { pedido = Pedido.PedidoFactory.NovoPedidoRascunho(message.ClienteId); pedido.AdicionarItem(pedidoItem); _IPedidoRepository.Adicionar(pedido); pedido.AdicionarEvento(new PedidoRascunhoIniciadoEvent(message.ClienteId, message.ProdutoId)); } else { var pedidoItemExistente = pedido.PedidoItemExistente(pedidoItem); pedido.AdicionarItem(pedidoItem); if (pedidoItemExistente) { _IPedidoRepository.AtualizarItem(pedido.PedidoItems.FirstOrDefault(p => p.ProdutoId == pedidoItem.ProdutoId)); } else { _IPedidoRepository.AdicionarItem(pedidoItem); } pedido.AdicionarEvento(new PedidoAtualizadoEvent(pedido.ClienteId, pedido.Id, pedido.ValorTotal)); } pedido.AdicionarEvento(new PedidoAdicionadoEvent(pedido.ClienteId, pedido.Id, pedidoItem.ProdutoId, pedidoItem.ValorUnitario, pedidoItem.Quantidade, pedidoItem.ProdutoNome)); return(await _IPedidoRepository.IUnitOfWork.Commit()); }