1
resposta

Modificar rota do método PUT

Olá,

Como melhoria, acredito que parâmetro {idProduto} deva ser removido da rota definida para a execução do método PUT. Porque a identificação do produto dentro do carrinho no método TrocaQuantidade está sendo feita somente pelo objeto Produto enviado no corpo da requisição.

[Route("api/carrinho/{idCarrinho}/produto/quantidade")]
public HttpResponseMessage Put([FromBody]Produto produto, [FromUri]int idCarrinho)
{
    CarrinhoDAO dao = new CarrinhoDAO();
    Carrinho carrinho = dao.Busca(idCarrinho);
    carrinho.TrocaQuantidade(produto);            

    return Request.CreateResponse(HttpStatusCode.OK);
}

public void TrocaQuantidade(Produto produto)
{
    Produto produtoCarregado = Produtos.FirstOrDefault(p => p.Id == produto.Id);
    produtoCarregado.Quantidade = produto.Quantidade;
}
1 resposta

Olá, Gustavo. Tudo bom com você?

Você tem razão! Mas, note que temos uma coleções dentro dos itens de outra coleção. A coleção de produtos, na coleção de carrinhos.

Por convenção, nas URLs de apis é comum identificar o ID de todos os itens envolvidos, então por mais que possamos remover o {idProduto} para considerar o campo Id do argumento produto, o mais apropriado seria manter o {idProduto} e, para não haver divergências entre a rota e o produto do argumento, você poderia trocar o argumento [FromBody]Produto produto por [FromBody] int novaQuantidade.

O que você acha? Abs.