Um momento
Aula 44
Cursos / Como Criar uma API JSON em Golang - CRUD Simples
Como Excluir um Registro de MySQL com Golang - Aula de Go API JSON

Nesta aula modificamos a função de excluirLivro para deletar o registro do banco de dados.

Verificamos primeiro se o registro do livro a ser excluído realmente existe no banco de dados. Se não existir, devemos responder com um código de estado 404 Not Found (Não Encontrado).

Se o registro existir, prodemos executar um comando de SQL com o db.Exec para excluí-lo:

db.Exec("DELETE FROM livros WHERE id = ?", id)

Summary

Resumo da Aula de GoLong

Olá pessoal, nesta aula do GoLong, continuamos a implementação de nossa API com banco de dados MySQL. O principal foco foi modificar a função de excluir um livro.

Etapas da Aula

  1. Reorganização do Projeto:

    • Criamos um diretório chamado config para mover o arquivo criar_tabela.go. Isso evita conflitos com arquivos que também possuem a função main.
  2. Compilação do Projeto:

    • Utilizamos o comando go install para compilar e instalar o executável no caminho apropriado.
  3. Verificação de Livros no Banco de Dados:

    • Usamos o Postman para verificar livros existentes no banco de dados.
  4. Implementação da Função Excluir Livro:

    • Extraímos o ID do livro da rota e verificamos se o livro existe. Se não existir, retornamos um status 404.
    • Para buscar um livro no banco de dados, utilizamos o método QueryRow ao invés de usar uma variável em memória. Este comando executa uma consulta que espera retornar apenas uma linha.
    • Realizamos a exclusão do livro com o comando SQL apropriado e tratamos os possíveis erros. Em caso de sucesso, retornamos um status 204 No Content.
  5. Testes:

    • Realizamos testes usando o Postman, onde confirmamos que a exclusão funcionou corretamente e que a resposta foi a esperada.

Aprendizados

  • Modificamos a função para usar o banco de dados para a busca e exclusão de livros ao invés de usar uma variável na memória.
  • Implementamos verificações de existência do livro e tratamos os erros adequadamente.

Muito obrigado por assistirem! Até a próxima aula!

Video Transcript

Olá pessoal, estamos de volta com mais uma aula de GoLong. Vamos continuar a implementação da nossa API com o banco de dados MySQL. Então vamos lá. Nesta aula nós vamos modificar a implementação da função de excluir um livro. Antes de começar, gostaria de ir aqui no terminal e fazer um negócio aqui para poder rodar o compile da Emon. Como o arquivo criar tabela.go e main.go eles têm declaração da função main, a função principal. Vai dar conflito, né, quando a gente roda o compile da Emon, o GoBuilder, o install. Então para poder tirar esse conflito, vou fazer o seguinte, vou criar um diretório, pode ser qualquer nome, vou chamar de config, mkd, ir para criar um diretório chamado config e eu vou mover o arquivo criar tabela para esse diretório. Bella.go para o config. Pronto, agora tenho que criar tabela dentro do config, com isso eu não vou ter mais conflito quando eu rodar o GoBuilder ou o install na parte aqui raiz desse projeto. Nesses casos eu só vou pegar o arquivo main.go. Então vamos lá, rodar o compile da Emon, eu vou dar o praço build, eu quero em vez de dar o GoBuilder, vai dar o Go install para poder instalar o comando lá no GoPath.bm Lembra, eu vou para o GoPath.bm. Então ele vai instalar aqui, eu já tenho aqui porque eu já tinha antes, mas vai ser esse arquivo aqui que vai ser gerado, esse executável. Então vamos lá e depois a gente vai rodar o comando, traça o comando, vai ser golang, ap.json, crude, simples. E vai ser o nome do diretório e é o nome daquele mês executável que está no BarraBin, no Golbin. Pronto, eu vou achar o teste aqui no Postman, get barra livros, tem os quatro que está no banco de dados, vou verificar o banco de dados aqui. Eu dei o select, estrela para um livro, para obter todas as registras. Então vamos lá começar aqui, primeiro para escolher um livro a gente precisa primeiro verificar se o livro existe. Se o livro existe, nós podemos proceder e fazer o comando para poder excluir aquele livro do banco de dados. Se não a gente vai passar, vai dar uma resposta para o cliente dizendo que o recorde não foi encontrado, dá um 404. Então vamos lá, estamos aqui no editor de texto, arquivo main.go. Função, excluir livro, primeiro temos que extrair o id do livro da rota aqui, fazemos isso com o mox.varas, passo o r que é o http request. Esse cara vai dar um map de string para string, então a chave vai ser o nome que eu dei a esse parâmetro de rota, no caso livd, pega lá desse vars, converte de string, se lembra, para inteiro, certo? Cheque se não tem os e não dá o bad request, essa parte aqui que a gente vai modificar as linhas 103 a 109, nesta linha aqui é que ele vai buscar pelo livro, então nós vamos substituir essa parte em vez de usar os livros, esse variável que está na memória a gente vai usar lá do banco de dados, então para poder encontrar um recorde do banco de dados a gente vai usar o select, então vamos lá, como é que vai ser o método aqui para usar? A gente poderia usar o exact, vamos ver aqui na documentação, online, no go long, packages, data base, barra sql, vamos ver o exact, o exact é o método na estrutura de b, executa o carry sem retornar rows, mas tem esse resultado aqui, esse aqui é o valor de atom, duas coisas, o resultado e o error, o que é que tem no resultado? Faz o resumo do comando de sql que foi executado, não é muito fácil, e tal e tal, talvez não seja bom usar esse, vamos usar o query row, como a gente já tinha feito anteriormente, cadê o query row? Então estou refleteando aqui a documentação, só para de prática, se a gente esquecer das coisas, eu volto lá na documentação e toda vez que a gente vai, já aprende alguma coisa a mais, o que a gente já sabia, então cadê o query row? vai ser no tipo db, aqui o tipo db, query row que vai ser um registro somente, em vez de vários, é isso que a gente quer, executa um query que espera que tenha pelo menos uma linha, um registro, então vamos usar isso, vamos lá, então a gente tem um objeto db, query row, qual é que vai ser a query aqui? então vai ser select, bem, para deletar não precisa ter todas as colunas da tabela, então se você quiser participar o id, select id from, qual o nome da tabela, where, porque a gente precisa de where, o id vai ser o id que foi passado pela rota, a gente usa interrogação aqui e como segundo o argumento, o query row você passa o valor correspondente para aquele sinal de interrogação, nesse caso vai ser o id que vem na variável na linha 96, o id do livro, para procurar, da query row aqui a gente pega, vamos botar um variable chamado registro, 2 pontos igual, e eu vou criar um variable chamado livro, do tipo livro, aí do registro eu vou dar o scan para escanear, se lembra, a gente pega, o query row ele você usa o scan, registro e passa os valores correspondentes às colunas que você selecionou, selecionou, nesse caso só o id, não somente vai ser um argumento aqui, na verdade eu nem precisava ter esse, essa coisa aqui, poderia ser só o var id mesmo, então deixa eu fazer assim, var id do livro, do tipo int, e eu vou pôr aqui id do livro, vamos ver aqui se dá certo dessa maneira aqui, então se der erro vai ter o erro de scan, e se der erro vai ter o erro de scan, e se der erro vai ter o erro de scan, e se der erro vai ter o erro de scan, e se der erro vai ter o erro de scan, 2 pontos igual, que vai corresponder ao 404 aqui que dá as linhas 115 a 118, como a gente já fez o query row aqui, não precisa dessa busca aqui, então dá a linha 107, 103, vamos apagar, aí em vez de indistro do livro não sei o que, vai ser o que, eu nem precisava dos parênteses né, mania é a abitura de outras línguas, uso parênteses, se opcional, se o erro de scan não for new, mais vamos dar o 404, se você quiser para adicionar o log aqui, mas normalmente a gente não, esse caso não é log de erro do cliente, é só porque não encontrou, mas pode logar também, vou deixar como, você quiser adicionar ou não, então eu modo 404 e retorno, se tudo dá certo ele vai passar para a linha 100 e, os comandos depois da linha 111, agora não vai precisar mais essas coisas aqui, porque a gente vai dar somente o exact, nesse caso, porque a gente não precisa esperar nada de volta, então vamos fazer um comando de sql para poder adotar o livro, vamos lá, vamos usar o exact, não espero receber um registro de volta, então delete from, qual o nome da tabela, livros, não esqueça do where, id, igual a, testa onde interrogação, passo id aqui, como a gente já fez, vamos dar o exact, primeiro é o resultado, não quero saber, exact, 2 pontos igual, se deve tudo certo, vai ter um erro, e erro de exact, não ponho, ele não conseguiu dar a tabela, então houve alguma coisa, não sei qual é o erro que a gente deve retornar, ele tentou, nós já sabemos que já está na linha 112, que existe mesmo o recorde, e se houve eu nessa aqui, talvez alguma coisa, sei lá no banco de dados, o tetodeleta poderia ser o erro na query, que é o digiteir errado, nesse caso seria o 500, porque é a nossa culpa do servidor, não sei se poderia ocorrer na hora que eu estivesse aqui, na 112, outro cliente faria a mesma requisição, na mesma hora, aí iria bater e iria dar o outro cliente, na mesma hora que bate aqui, o delete não encontra mais nada, não sei nem se isso pode ser um erro, você pode tentar, é só ir no cliente de sica e fazer isso, que acontece se você tentar dar a tabela, vamos ver aqui, delete com livros, where e d5, não existe recorde d5, então ele deu sem problema, acho que funciona, então não vai ter problema nesse caso, então se der eu nesse delete, vamos mandar o 500 mesmo, então W write header, http, status, internal server error, é torn, se não deu tudo certo no delete, não precisa mais dessa parte aqui, que a gente já fez com o masquiel e no final manda o, vamos responder status no content sem conteúdo, porque não tem nada para retornar ao cliente, vamos ver se está funcionando aqui, o node que compaio de imagens já reiniciou e já fez um nova build, vamos aqui no postman faz o seguinte, deixa eu criar só um recorde primeiro antes de criar um novo, novo livro 2, alguém abc2 ah, esqueci que não, não implementamos o cadastralivo no mais SQL, deixa eu usar o cliente mais SQL insert into livros, auto, vírgula título, values, alguém aqui título, título só vou adicionar um 2 o del select tem esses id 5 e 6 por adicionados, vamos lá tentar delatar, vou no postman a nova aba com verbo delete, localhost 337, barra livros, barra o id que a gente já delatava, vamos delatar o id 5, vamos ver se dá, send a 200 400 conteúdo, correto vamos ver lá no banco de dados, select start from livros a desapareceu mesmo, e lá do postman no get, barra livros, não tem o de 5, entre 4 e 6, bem legal então se a gente fosse tentar delatar algo que não existe, por exemplo, se eu tentar delatar o 5, novamente dá o 404 não encontrado, como a gente esperava, muito bem voltando aqui o editor de texto vamos avisar o que a gente aprendeu modificamos a função excluir livre para poder usar o banco de dados, em vez daquele variável, daquela variável livre da memória, modificamos aqui a busca, primeiro temos que verificar, se o livre existe então damos o db query row, select id from livros, var id aqui, eu só fiz um variável parmesinal inteiro, deu scan, para ver se o id realmente existe, o livre existe se estiver em 1,404, se não continua para proceder, para delatar, o livre, não se esqueça do error, se não pode delatar todos os records na tabela, então delete from livros or id, delação id não tiver problema, né, vai para o status no content o que é o que a gente esperava, deixa o delatar o 6 204 não content vamos de volta para os 4 records originais por essa aula é só, muito obrigado por assistir e até a próxima
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: