public async Task <long> Create(PedidoInput pedidoInput, CancellationToken cancellationToken) { return(await Task.Run(() => { pedidoInput.Validar(); Pedido pedido = new Pedido(); pedido.DataCriacao = DateTime.Now; //pedido.UsuarioCriacao = Thread.CurrentPrincipal.Identity; foreach (var itemInput in pedidoInput.Itens) { ItemPedido item = new ItemPedido(); Produto produto = ProdutoRepository.GetById(itemInput.ProdutoId); if (produto == null) { throw new Exception("Produto não encontrado"); } item.Produto = produto; item.Quantidade = itemInput.Qtd; pedido.Itens.Add(item); } PedidoRepository.Add(pedido); return pedido.Id; }, cancellationToken)); }
public async Task Edit(long pedidoId, PedidoInput pedidoInput, CancellationToken cancellationToken) { await Task.Run(() => { pedidoInput.Validar(); Pedido pedido = PedidoRepository.GetById(pedidoId); var itensRemovidos = pedido.Itens.Where(i => !pedidoInput.Itens.Any(ii => ii.ProdutoId == i.Produto.Id)); foreach (var item in itensRemovidos) { pedido.Itens.Remove(item); } foreach (var itemInput in pedidoInput.Itens) { var item = pedido.Itens.FirstOrDefault(i => i.Produto.Id == itemInput.ProdutoId); if (item == null) { Produto produto = ProdutoRepository.GetById(itemInput.ProdutoId); if (produto == null) { throw new Exception("Produto não encontrado"); } item.Produto = produto; item.Quantidade = itemInput.Qtd; pedido.Itens.Add(item); } else { item.Quantidade = itemInput.Qtd; } } PedidoRepository.Update(pedido); }, cancellationToken); }