Aula 44
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
-
Reorganização do Projeto:
- Criamos um diretório chamado
config
para mover o arquivocriar_tabela.go
. Isso evita conflitos com arquivos que também possuem a funçãomain
.
- Criamos um diretório chamado
-
Compilação do Projeto:
- Utilizamos o comando
go install
para compilar e instalar o executável no caminho apropriado.
- Utilizamos o comando
-
Verificação de Livros no Banco de Dados:
- Usamos o Postman para verificar livros existentes no banco de dados.
-
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
.
- Extraímos o ID do livro da rota e verificamos se o livro existe. Se não existir, retornamos um status
-
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: