public async Task <string> RegistrarOrdemCompra(int clienteId, int produtoId, int quantidadeCompra)
        {
            var cliente = await _clienteRepositorio.ConsultarPorId(clienteId).ConfigureAwait(false);

            var produto = await _produtoRepositorio.ConsultarPorId(produtoId).ConfigureAwait(false);

            if (quantidadeCompra <= 0)
            {
                throw new InvalidOperationException("Quantidade solicitada não suficiente para compra.");
            }

            if (produto.Estoque <= 0)
            {
                throw new InvalidOperationException("Quantidade em estoque não suficiente para compra.");
            }

            var valorOperacao = Math.Round(produto.PrecoUnitario * quantidadeCompra, 2);

            if (valorOperacao > cliente.Saldo)
            {
                throw new InvalidOperationException("Cliente não possui saldo suficiente para compra.");
            }

            if (Math.Round(quantidadeCompra * produto.PrecoUnitario, 2) < produto.ValorMinimoDeCompra)
            {
                throw new InvalidOperationException("Quantidade mínima não atendida para compra.");
            }

            if (valorOperacao > produto.Estoque)
            {
                throw new InvalidOperationException("Quantidade em estoque não suficiente para compra.");
            }

            var novaOrdemDeCompra = new OrdemCompra
            {
                ClienteId            = cliente.Id,
                ProdutoId            = produto.Id,
                DataOperacao         = DateTime.Now,
                PrecoUnitario        = produto.PrecoUnitario,
                ValorOperacao        = valorOperacao,
                QuantidadeSolicitada = quantidadeCompra
            };

            return(await _ordemCompraRepositorio.RegistrarOrdemCompra(novaOrdemDeCompra).ConfigureAwait(false));
        }
        public async Task <string> RegistrarOrdemCompra(OrdemCompra ordemCompra)
        {
            await Task.Run(() => _dataStore.OrdensCompras.Add(ordemCompra)).ConfigureAwait(false);

            return(ordemCompra.Id);
        }
 public Task <bool> AlterarOrdemCompra(OrdemCompra ordemCompra)
 {
     throw new NotImplementedException();
 }