- Entrar na pasta da tarefa da sala = cd para-a-sala
- Instalar as dependencias = npm i
- Criar o arquivo
.gitignore
dentro da pastapara-a-sala
e inserir a informação :node_modules
- Dentro de
para-a-sala/src
criar as seguintes pastas :
controller
routes
//centralizando o conteúdo da aplicação - Rota raiz
const express = require('express') //importando o express
//importe da continuação das rotas de filmes
const filmesRoutes = require("./routes/filmeRoutes")
//executo o express
const app = express()
//uso o bodyparser
app.use(express.json())
//criar uma rota raiz
app.use("/filmes", filmesRoutes)
//exportando para usar o server.js
module.exports = app
//chamando o arquivo app
const app = require('./src/app')
//configurando a porta
const PORT = 1313
app.listen( PORT, () => {
console.log(`Olá, estou na porta ${PORT}`)
})
- CRIAR um arquivo chamado
filmeController.js
e inserir o código :
//acessando endereço do banco/json
const filmesJson = require('../models/filmes-barbie.json')
const express = require('express')
//executar o express
const app = express()
//fazendo o body parser
app.use(express.json())
const getAll = (request, response) => {
response.status(200).json([
{
"filmes" : filmesJson
}
])
}
//Atualizar o título do filme buscando pelo id
const updateTitle = (request, response) => {
/*guardo o id que foi enviado no request na constante idRequest (pq params? pq id é especifico e eu uso params para buscas especificas)*/
const idRequest = request.params.id
/*guardo o titulo que foi enviado no body da requisiçao (pq body? pq pra put, patch e post eu PRECISO passar um body)*/
let novoTitulo = request.body.title
//preciso filtrar o meu "banco de dados" (nesse caso é o Json mockado) para encontrar o id que o usuário digitou
filmeFiltrado = filmesJson.find(filme => filme.id == idRequest)
//Uma parte especifica do filme, no caso o título, será alterada com a nova informação enviada (o novo titulo)
filmeFiltrado.title = novoTitulo
//Mando uma response dizendo que está tudo correto e envio o filme com a alteração
response.status(200).json([{
"mensagem": "seu filme foi atualizado",
filmeFiltrado
}])
}
//Alterar todas as informações do filme buscando pelo id
const updateMovie = (request, response) => {
const idRequest = request.params.id
let filmeRequest = request.body
//o Index Retorna o indice do array no primeiro elemento que for true
let indexEncontrado = filmesJson.findIndex(filme => filme.id == idRequest)
//Splice remove um elemento a partir do indexEncontrado. E no lugar dele é colocado a request passada (filmeRequest)
filmesJson.splice(indexEncontrado, 1, filmeRequest)
//Mando uma response dizendo que está tudo correto e envio o filme com a alteração
response.status(200).json([{
"mensagem": "seu filme foi atualizado",
filmesJson
//se quiser que retorne apenas o filme alterado, teria que ter sido criada uma variavel em filmesJson.splice
}])
}
//Deletar um filme por id
const deleteFilme = (request, response ) => {
//id que quero deletar
const idRequest = request.params.id
//Pegar o index(indice) do filme que será deletado
const indexFilme = filmesJson.findIndex( filme => filme.id == idRequest)
//retira o filme do array de filmes a partir do index indicado
//array.splice(index, numero de coisas que serão deletadas, item que vou adicionar)
filmesJson.splice(indexFilme, 1) //pra deletar não precisa adicionar nenhum item
response.status(200).json([{
"mensagem" : "O filme foi deletado",
"deletado" : idRequest,
filmesJson
}])
}
//Deletar um filme por titulo
const deleteFilmePorTitulo = (request, response ) => {
//titulo que quero deletar
const titleRequest = request.params.title.toLowerCase()
const indexTitle = filmesJson.findIndex( filme => filme.title.toLowerCase() == titleRequest)
filmesJson.splice(indexTitle,1)
response.status(200).json([{
"mensagem" : "O filme foi deletado",
"deletado" : titleRequest,
filmesJson
}])
}
//exportando todas as funções do controller para serem usadas no filmesRoutes.js
module.exports = {
getAll,
updateTitle,
updateMovie,
deleteFilme,
deleteFilmePorTitulo,
}
- CRIAR o arquivo
filmeRoutes.js
e inserir o código :
//AS ROTAS E METODOS DE FILMES
//chamar o controller de filmes
const controller = require('../controller/filmeController')
//chamando o express
const express = require('express')
//função de rotas do express
const router = express.Router()
//router.metodo http (rota, funcao)
router.get("/catalogo", controller.getAll)
router.patch("/update/:id", controller.updateTitle)
router.put("/change/:id", controller.updateMovie)
router.delete("/delete/title/:title", controller.deleteFilmePorTitulo) //coloquei essa rota de delete antes da delete/:id + subrota 'title' para não dar conflito
router.delete("/delete/:id", controller.deleteFilme)
//exportando para ser usado no app.js
module.exports = router
- GET: localhost:1313/filmes/catalogo
- SEND
- PATCH: localhost:1313/filmes/:id
- TROCAR :id pelo id desejado
- Ir em : Body -> raw -> Json e digitar a info abaixo :
- { "title" :
"INSERIRNOVOTITULO"
} - SEND
- PUT: localhost:1313/filmes/change/:id
- TROCAR :id pelo id desejado
- Ir em : Body -> raw -> Json e digitar a info abaixo :
- { inserir todo o body com as alterações desejadas}
exemplo : {
"id": "3",
"topic": "Comedia",
"title": "Barbie novo filme",
"content": "Barbie em novas aventuras"
}
⚠️ COLOCAR TODAS AS INFORMAÇÕES DO BODY, INCLUSIVE O ID (mas NÃO alterar o ID) - ️Ao fazer essa mudança, os itens do antigo body que não estiverem no novo body, serão deletados- SEND
- DELETE: localhost:1313/filmes/delete/title/titulo%20do%20meu%20filme
- TROCAR
titulo%20do%20meu%20filme
pelo titulo do filme que você quer deletar, lembrando que o %20 simboliza os espaços - SEND
- DELETE: localhost:1313/filmes/delete/:id
- na rota TROCAR :id pelo id do filme que quer deletar
- SEND
Resuminho lindo que nossa querida May criou.