Agora que nossa API já consegue cadastrar e listar, precisamos aprender a atualizar os dados de um produto que já existe no sistema. Nesta aula, usaremos o método PUT e descobriremos como capturar informações passadas diretamente na URL.
Abra o seu arquivo main.go e insira a nova função alterarProduto, mapeando a rota PUT /produtos/{codigo} na função principal do servidor. Abaixo compartilho a estrutura da nova função:
// Função para atualizar um produto específico
func alterarProduto(c *gin.Context) {
// Extrair o código do produto via URL
codigo := c.Param("codigo")
// Referência do struct Produto
var produtoAtualizado Produto
// Extrair informações do JSON e atribuir na referência produtoAtualizado
if err := c.ShouldBindJSON(&produtoAtualizado); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"erro": err.Error()})
return
}
// Laço de repetição para localizar o produto na lista e modificar
for indice, produto := range produtos {
// Condicional
if produto.Codigo == codigo {
produtoAtualizado.Codigo = codigo
produtos[indice] = produtoAtualizado
c.JSON(http.StatusOK, produtoAtualizado)
return
}
}
// Retorno do endpoint caso o produto não seja encontrado
c.JSON(http.StatusNotFound, gin.H{"mensagem": "Produto não encontrado."})
}
Agora podemos atualizar nossa função principal, abaixo a estrutura completa atualizada:
// Função principal
func main() {
// Roteador
r := gin.Default()
// Rotas
r.GET("/", helloWorld)
r.GET("/produtos", listarProdutos)
r.POST("/produtos", cadastrarProduto)
r.PUT("/produtos/:codigo", alterarProduto)
// Configurar o servidor
r.Run(":8080")
}
Para testar esta nova rota, siga estes passos ordenados dentro do seu testador HTTP (como Thunder Client):
POST para colocar um aluno válido na memória. Copie o campo codigo que o servidor gerou para ele.PUT e altere a URL adicionando o código copiado no final (ex: http://localhost:8080/produtos/COLE_O_CODIGO_AQUI).O servidor retornará o status 200 OK com um novo objeto do tipo Produto atualizado.