public async override Task <CommandResult> HandleCommandAsync(AdicionarProdutoAoCarrinhoCommand command) { //Verifica se já existe carrinho para o comprador var carrinho = (await carrinhoRepository.GetByFilterAsync(c => c.Comprador.Nome == command.NomeComprador)).FirstOrDefault(); if (carrinho != null) { //Atualiza o carrinho carrinho.AdicionarProduto(new Produto() { Id = command.IdProduto, Nome = command.NomeProduto, Valor = command.ValorProduto }); await carrinhoRepository.UpdateAsync(carrinho); } else { //Cria um novo carrinho carrinho = new Carrinho(new Comprador() { Nome = command.NomeComprador }, new List <Produto>() { new Produto() { Nome = command.NomeProduto, Valor = command.ValorProduto, Id = command.IdProduto } }); await carrinhoRepository.InsertAsync(carrinho); } //Levanta eventos await AddEventsAsync(carrinho.DomainEvents.ToArray()); return(new CommandResult()); }