public async Task <Guid> Handle(AdicionarProdutoPedidoCommand request, CancellationToken cancellationToken)
        {
            var pedido = _pedidoRepository.GetEntityById(request.IDPedido);

            if (pedido == null)
            {
                request.AddNotification("AdicionarProdutoPedidoCommand", $"pedido ({request.IDPedido}) não encontrado no banco de dados.");
            }

            var produtoPedido = new ProdutoPedido(request.IDProduto, request.Quantidade);

            produtoPedido.VincularAoPedido(request.IDPedido);

            if (produtoPedido.Invalid || request.Invalid)
            {
                produtoPedido.AddNotifications(request.Notifications);

                await _mediator.Publish(new DomainNotification
                {
                    Erros = request.Notifications
                }, cancellationToken);

                return(await Task.FromResult(Guid.Empty));
            }

            _produtoPedidoRepository.Add(produtoPedido);

            return(await Task.FromResult(produtoPedido.Id));
        }
        public async Task DeveRetornarErroQuantidadeProdutoIncorretaAdicionarProdutoPedido()
        {
            var handler = new PedidoCommandHandler(
                _pedidoRepository,
                _garcomRepository,
                _comandaRepository,
                _historicoPedidoRepository,
                _produtoPedidoRepository,
                _clienteRepository,
                _mediator);

            var command = new AdicionarProdutoPedidoCommand(Guid.NewGuid(), Guid.NewGuid(), 0);

            var retorno = await handler.Handle(command, new CancellationToken());

            Assert.Equal(Guid.Empty, retorno);
        }
        public async Task DeveRetornarErroSePedidoNaoExistirAoAdicionarProdutoPedido()
        {
            var handler = new PedidoCommandHandler(
                _pedidoGetEntityNullRepository,
                _garcomRepository,
                _comandaRepository,
                _historicoPedidoRepository,
                _produtoPedidoRepository,
                _clienteRepository,
                _mediator);

            var command = new AdicionarProdutoPedidoCommand(Guid.NewGuid(), Guid.NewGuid(), 10);

            var retorno = await handler.Handle(command, new CancellationToken());

            Assert.Equal(Guid.Empty, retorno);
        }
        public async Task <Guid> AdicionarProdutoPedido(Guid id, ProdutoPedidoViewModel viewModel)
        {
            var command = new AdicionarProdutoPedidoCommand(id, viewModel.IDProduto, viewModel.Quantidade);

            return(await _mediator.Send(command));
        }