Você está na página 1de 21

http://www.luiztools.com.

br

Node.js e
MongoDB
CRONOGRAMA
cinema-catalog-service
Modelagem
Testes
cinema
catalog
service
movies.js

nano /cinema-microservice/movies-
service/src/api/movies.js
cinema-catalog-service

Estruturando

● npm init
● criar mesma estrutura de pastas
● npm install express morgan tape
mongodb helmet supertest dotenv-
safe
● copiar arquivos mongodb.js,
server.js e .env.example
Modelagem
Modelagem

Domínio
id da cidade;
nome da cidade;
uf da cidade (sigla string);
código do país (duas letras, opcional, caso internacional);
cinemas da cidade;
id do cinema;
nome do cinema
salas de cinema;
nome da sala (numérico simples);
sessões;
data e hora (date);
id do filme (referente ao banco de filmes);
nome do filme;
valor (decimal);
assentos (número e disponibilidade)
Modelagem

Relacionamentos
● cada país tem N estados (1-N);
● cada estado tem N cidades (1-N);
● cada cidade tem N cinemas (1-N);
● cada cinema tem N salas (1-N);
● cada sala de cinema tem N sessões (1-
N);
● cada sessão tem N assentos (1-N);
● cada sessão tem 1 filme (1-1);
Modelagem

Schema
_id: ObjectId("sasacsa85s7sdc7sd"),
cidade: "Porto Alegre",
uf: "RS",
pais: "BR",
cinemas: [ {
_id: ObjectId("68df5gd5g6ddf"),
nome: "Cinemark Bourbon Ipiranga",
salas: [ … ]
}]
}]}
Modelagem

Schema
salas: [ {
nome: 1,
sessoes: [ {
data: ISODate("2018-06-01T09:00:00Z"),
idFilme: ObjectId("9ds68dsvdsvs876v"),
filme: "Vingadores: Guerra Infinita",
valor: 25.00,
assentos: [ ...]
},{
data: ISODate("2018-06-01T11:00:00Z"),
idFilme: ObjectId("9ds68dsvdsvs876v"),
filme: "Vingadores: Guerra Infinita",
valor: 25.00,
assentos: [...]
Modelagem

Schema
assentos: [ {
numero: 1,
disponivel: true
},
{
numero: 2,
disponivel: false
}]
Modelagem

Subindo
./mongod --dbpath /pasta-do-seu-
microservice/data --port 27018

./mongo --port 27018

use cinema-catalog-service
Modelagem

Bulk Insert
db.cinemaCatalog.insert([ { cidade: "Gravataí", uf: "RS", cinemas: [] }, { cidade: "Porto Alegre", uf: "RS", pais: "BR", cinemas:
[ { _id: ObjectId(), nome: "Cinemark Bourbon Ipiranga", salas: [ { nome: 1, sessoes: [ { data: ISODate("2018-06-
01T09:00:00Z"), idFilme: ObjectId("5aefc5029ce83b1eb6b89e57"), filme: "Vingadores: Guerra Infinita", valor: 25.00,
assentos: [ { numero: 1, disponivel: true }, { numero: 2, disponivel: false }, ] }, { data: ISODate("2018-06-01T11:00:00Z"),
idFilme: ObjectId("5aefc5029ce83b1eb6b89e57"), filme: "Vingadores: Guerra Infinita", valor: 25.00, assentos: [ { numero: 1,
disponivel: true }, { numero: 2, disponivel: true }, ] }, { data: ISODate("2018-06-01T13:00:00Z"), idFilme:
ObjectId("5aefc5029ce83b1eb6b89e58"), filme: "Vingadores: Era de Ultron", valor: 20.00, assentos: [ { numero: 1,
disponivel: true }, { numero: 2, disponivel: false }, { numero: 2, disponivel: true }, ] } ] }, { nome: 2, sessoes: [ { data:
ISODate("2018-06-01T09:00:00Z"), idFilme: ObjectId("5aefc5029ce83b1eb6b89e58"), filme: "Vingadores: Era de Ultron",
valor: 25.00, assentos: [ { numero: 1, disponivel: true }, { numero: 2, disponivel: false }, ] }, { data: ISODate("2018-06-
01T11:00:00Z"), idFilme: ObjectId("5aefc5029ce83b1eb6b89e58"), filme: "Vingadores: Era de Ultron", valor: 25.00, assentos:
[ { numero: 1, disponivel: true }, { numero: 2, disponivel: true }, ] }, { data: ISODate("2018-06-01T13:00:00Z"), idFilme:
ObjectId("5aefc5029ce83b1eb6b89e58"), filme: "Vingadores: Era de Ultron", valor: 20.00, assentos: [ { numero: 1,
disponivel: true }, { numero: 2, disponivel: false }, { numero: 2, disponivel: true }, ] } ] } ] }, { _id: ObjectId(), nome: "GNC
Lindóia", salas: [ { nome: 100, sessoes: [ { data: ISODate("2018-06-01T09:00:00Z"), idFilme:
ObjectId("5aefc5029ce83b1eb6b89e59"), filme: "Os Vingadores", valor: 25.00, assentos: [ { numero: 1, disponivel: true }, {
numero: 2, disponivel: false }, ] }, { data: ISODate("2018-06-01T11:00:00Z"), idFilme:
ObjectId("5aefc5029ce83b1eb6b89e59"), filme: "Os Vingadores", valor: 25.00, assentos: [ { numero: 1, disponivel: true }, {
numero: 2, disponivel: true }, ] }, { data: ISODate("2018-06-01T13:00:00Z"), idFilme:
ObjectId("5aefc5029ce83b1eb6b89e58"), filme: "Vingadores: Era de Ultron", valor: 20.00, assentos: [ { numero: 1,
disponivel: true }, { numero: 2, disponivel: false }, { numero: 2, disponivel: true }, ] } ] } ] } ] }])
Modelagem

.env

#.env, don't commit to repo


MONGO_CONNECTION=mongodb://localhost:27018
DATABASE=cinema-catalog-service PORT=3001
Testes
Testes

index.test.js

require("dotenv-safe").load();
require("./config/mongodb.test").runTests();
require("./server/server.test").runTests();

..

test script no package.json


Testes
Dúvidas?
Exercícios
1 Adicione mais cidades, salas e sessões

2 Crie scripts de start do Mongo no projeto

3 Adicione um teste para ver se a coleção existe


Obrigado!

Você também pode gostar