Nós aprendemos a como criar um servidor usando ExpressJS
e como fazer as opeações de CRUD em um banco de dados no MongoDB
com Mongoose. Essa atividade vai te ajudar a entender o quanto você fixou esses conceitos e como aplicá-los.
Esse desafio requer que você crie uma aplicação básica contendo dois models
e rotas com Express
.
Você irá trabalhar nos seguintes arquivos:
models/album.model.js
models/purchase.model.js
routes/albums.router.js
routes/purchase.router.js
O arquivo app.js
contém as configurações iniciais do servidor e da conexão do banco de dados com mongoose
.
Para iniciar, siga as instruções:
- Fork no repositório
- Clone o repositório
Em seguida:
-
Instale as dependências:
npm install
-
Crie um arquivo
.env
seguindo o exemplo do arquivo.example.env
:
PORT=8080 <-- padrão
MONGODB_URI=mongodb://127.0.0.1:27017/LAB-CRUD-express-mongoose
-
Para iniciar o servidor, utilize
npm run dev
para rodar com nodemon, ou tente a nova feature do nodenode --watch index.js
-
Caso queira testar suas rotas, utilize o Postman ou o Insomnia
Importante!: Lembre-se de exportar cada
model
após criá-lo.
O modelo do Album
deve conter as seguintes propriedades:
performer
- Stringtitle
- Stringcost
- Number
O modelo Purchase
deve conter as seguintes propriedades:
shippingAdress
- Stringalbum
- ObjectID referente ao modelo do Album
Importante: Antes de começar, leia atentamente as instruções.
Requests
Você sempre pode adicionar um console.log(req.body)
ou console.log(req.params
para checar o conteúdo do corpo da requisição ou dos parâmetros de rota. Lembre-se de checar o terminal.
Response
Todas as suas rotas devem retornar uma response em JSON. Isso significa que você deve utilizar res.json()
.
Por exemplo:
const data = await Model.find()
return res.status(200).json(data)
Essa rota irá receber requests
contendo um objeto com as informações do album: performer
, title
, cost
.
Você pode acessar esses valores pelo req.body
.
A rota deve:
- Criar um novo album com os valores recebidos no
req.body
, utilizando o modelAlbum
. - Deve retornar uma response em
JSON
contendo o documento criado.
A rota GET /albums
deve:
- Retornar todos os albums do banco de dados.
- Retornar uma response em
JSON
contendo todos os documentos de albums.
A rota recebe a id do album pelo parâmetro de rota albumId
.
Você pode acessar esse valor com req.params
.
A rota deve:
- Retornar um único documento pelo seu id, utilizando o model
Album
. - Deve retornar uma response em
JSON
incluindo o objeto do album.
A rota recebe o id do album a ser atualizado como o parâmetro de rota albumId
.
O req.body
irá conter as seguintes informações do album: performer
, title
e cost
.
A rota deve:
- Encontrar um album existente pelo seu id e atualizar os campos
performer
,title
ecost
. - Retornar uma response em
JSON
incluindo o documento atualizado do album.
Essa rota recebe o id do album a ser deletado como o parâmetro de rota albumId
.
A rota deve:
- Deletar um album existente pelo seu id, utilizando o model
Album
. - Retornar uma response em
JSON
incluindo apenas o status HTTP de204
.
Essa rota irá receber requests contendo o objeto com as informações da purchase:
shippingAddress
- StringalbumId
- ObjectId.
Você pode acessar esses valores através do req.body
.
A rota deve:
- Criar um novo documento purchase com os valores recebidos em
req.body
, utilizando o modelPurchase
. - A propriedade
albumId
deve guardar apenas a referencia do_id
do objeto do album. - Retornar uma response em
JSON
com o conteúdo da purchase criada.
Essa rota recebe o id da purchase como parâmetro de rota purchaseId
.
A rota deve:
- Retornar uma purchase encontrada pelo id, utilizando o model
Purchase
. - Popular a propriedade
album
para receber os detalhes do album. - Retornar uma response em
JSON
incluindo o objeto populado da purchase.
Dica: A Propriedade album
do objeto é apenas uma referência (id). Você deverá .populate()
esse campo para conseguir os detalhes do album dentro da purchase.
Bons códigos!
Ironhack Sao Paulo.