SlideShare uma empresa Scribd logo
Node.js e
MongoDB
http://www.luiztools.com.br
Repositório
Api - Cinema-Catalog
Index - Cinema-Catalog
CRONOGRAMA
Repositóri
o
Repositório
● pesquisar cidades em que a rede possui
cinema;
● pesquisar cinemas por id da cidade;
● pesquisar filmes disponíveis em um cinema;
● pesquisar filmes disponíveis em uma cidade;
● pesquisar sessões disponíveis para um filme
em uma cidade;
● pesquisar sessões disponíveis para um filme
em um cinema;
Funcionalidades
Repositório
const mongodb = require("../config/mongodb");
const ObjectId = require("mongodb").ObjectId;
function getAllCities(callback){
mongodb.connect((err, db) => {
db.collection("cinemaCatalog").find({},
{cidade:1,uf:1,pais:1}).toArray(callback);
})
}
repository.js
Repositório
function getCinemasByCityId(cityId, callback){
var objCityId = ObjectId(cityId);
mongodb.connect((err, db) => {
db.collection("cinemaCatalog").find({_id: objCityId},
{cinemas: 1}).toArray((err, cities) => {
if(err) return callback(err, null);
callback(err, cities[0].cinemas);
});
});
}
repository.js
Repositório
function disconnect(){
return mongodb.disconnect();
}
module.exports = { getAllCities, getCinemasByCityId, disconnect }
repository.js
Repositório
const test = require('tape');
const repository = require('./repository');
function runTests(){
var cityId = null;
var cinemaId = null;
var movieId = null;
//tests here
}
module.exports = { runTests }
repository.test.js
Repositório
test('Repository getAllCities', (t) => {
repository.getAllCities((err, cities) => {
if(cities && cities.length > 0) cityId = cities[1]._id;//Porto
Alegre
t.assert(!err && cities && cities.length > 0, "All Cities
Returned");
t.end();
});
})
repository.test.js
Repositório
test('Repository getCinemasByCityId', (t) => {
repository.getCinemasByCityId(cityId, (err, cinemas) => {
if(cinemas && cinemas.length > 0) cinemaId =
cinemas[0]._id;
t.assert(!err && cinemas && cinemas.length > 0, "All
Cinemas Returned By City Id");
t.end();
});
})
repository.test.js
Repositório
test('Repository Disconnect', (t) => {
t.assert(repository.disconnect(), "Disconnect Ok");
t.end();
})
}
repository.test.js
Repositório
require("dotenv-safe").load();
require("./config/mongodb.test").runTests();
require("./server/server.test").runTests();
require("./repository/repository.test").runTests();
index.test.js
Repositório
Repositório
function getMoviesByCinemaId(cinemaId, callback){
var objCinemaId = ObjectId(cinemaId);
mongodb.connect((err, db) => {
db.collection("cinemaCatalog").aggregate([
{$match: {"cinemas._id": objCinemaId}},
{$unwind: "$cinemas"},
{$unwind: "$cinemas.salas"},
{$unwind: "$cinemas.salas.sessoes"},
{$group: {_id: { filme: "$cinemas.salas.sessoes.filme",
idFilme: "$cinemas.salas.sessoes.idFilme"}}}
]).toArray(callback);
});
}
repository.js
Repositório
function getMoviesByCityId(cityId, callback){
var objCityId = ObjectId(cityId);
mongodb.connect((err, db) => {
db.collection("cinemaCatalog").aggregate([
{$match: {"_id": objCityId}},
{$unwind: "$cinemas"},
{$unwind: "$cinemas.salas"},
{$unwind: "$cinemas.salas.sessoes"},
{$group: {_id: { filme: "$cinemas.salas.sessoes.filme", idFilme:
"$cinemas.salas.sessoes.idFilme"}}}
]).toArray((err, sessions) => {
if(err) return callback(err, null);
callback(err, sessions.map(item => {
return {idFilme: item._id.idFilme, filme: item._id.filme }
} )); }); });
}
repository.js
Repositório
function getMovieSessionsByCityId(movieId, cityId, callback){
var objMovieId = ObjectId(movieId);
var objCityId = ObjectId(cityId);
mongodb.connect((err, db) => {
db.collection("cinemaCatalog").aggregate([
{$match: {"_id": objCityId}},
{$unwind: "$cinemas"},
{$unwind: "$cinemas.salas"},
{$unwind: "$cinemas.salas.sessoes"},
{$match: {"cinemas.salas.sessoes.idFilme": objMovieId}},
{$group: {_id: { filme: "$cinemas.salas.sessoes.filme", idFilme:
"$cinemas.salas.sessoes.idFilme", idCinema: "$cinemas._id", sala:
"$cinemas.salas.nome", sessao: "$cinemas.salas.sessoes"}}}
]).toArray((err, sessions) => {
if(err) return callback(err, null);
callback(err, sessions.map(item => {
return {idFilme: item._id.idFilme, filme: item._id.filme,
idCinema: item._id.idCinema, sala: item._id.sala, sessao:
item._id.sessao } } )); }); });
}
repository.js
Repositório
function getMovieSessionsByCinemaId(movieId, cinemaId, callback){
var objCinemaId = ObjectId(cinemaId);
var objMovieId = ObjectId(movieId);
mongodb.connect((err, db) => {
db.collection("cinemaCatalog").aggregate([
{$match: {"cinemas._id": objCinemaId}},
{$unwind: "$cinemas"},
{$unwind: "$cinemas.salas"},
{$unwind: "$cinemas.salas.sessoes"},
{$match: {"cinemas.salas.sessoes.idFilme": objMovieId}},
{$group: {_id: { filme: "$cinemas.salas.sessoes.filme",
idFilme: "$cinemas.salas.sessoes.idFilme", sala:
"$cinemas.salas.nome", sessao: "$cinemas.salas.sessoes"}}}
]).toArray((err, sessions) => {
if(err) return callback(err, null);
callback(err, sessions.map(item => {
return {idFilme: item._id.idFilme, filme:
item._id.filme, sala: item._id.sala, sessao:
item._id.sessao } } )); }); });
}
repository.js
Repositório
module.exports = {
getAllCities,
getCinemasByCityId,
getMoviesByCityId,
getMoviesByCinemaId,
getMovieSessionsByCityId,
getMovieSessionsByCinemaId, disconnect
}
repository.js
Repositório
test('Repository getMoviesByCinemaId', (t) => {
repository.getMoviesByCinemaId(cinemaId, (err, movies)
=> {
t.assert(!err && movies && movies.length > 0, "Movies By
Cinema Id Returned");
t.end();
});
})
repository.test.js
Repositório
test('Repository getMoviesByCityId', (t) => {
repository.getMoviesByCityId(cityId, (err, movies) => {
if(movies && movies.length > 0) movieId =
movies[1].idFilme;//Era de Ultron
t.assert(!err && movies && movies.length > 0,
"Movies By City Id Returned");
t.end();
});
})
repository.test.js
Repositório
test('Repository getMovieSessionsByCityId', (t) => {
repository.getMovieSessionsByCityId(movieId, cityId, (err,
sessions) => {
t.assert(!err && sessions && sessions.length > 0, "Movie
Sessions By City Id Returned");
t.end();
});
})
repository.test.js
Repositório
test('Repository getMovieSessionsByCinemaId', (t) => {
repository.getMovieSessionsByCinemaId(movieId,
cinemaId, (err, sessions) => {
t.assert(!err && sessions && sessions.length > 0, "Movie
Sessions By Cinema Id Returned");
t.end();
});
})
repository.test.js
Repositório
API -
Cinema
Catalog
API - Cinema Catalog
GET /cities
lista todas cidades onde a rede possui cinema
GET /cities/:city/movies
lista todos os filmes em exibição na cidade especificada;
GET /cities/:city/movies/:movie
lista todos as sessões do filme escolhido na cidade
especificada;
GET /cities/:city/cinemas
lista todos os cinemas em determinada cidade;
GET /cinemas/:cinema/movies
lista todos os filmes em exibição no cinema especificado;
GET /cinemas/:cinema/movies/:movie
lista todas as sessões do filme escolhido no cinema
especificado;
Estrutura
API - Cinema Catalog
module.exports = (app, repository) => {
app.get('/cities', (req, res, next) => {
repository.getAllCities((err, cities) => {
if(err) return next(err);
res.json(cities);
});
})
//another routes here
}
cinema-catalog.js
API - Cinema Catalog
app.get('/cities/:city/movies', (req, res, next) => {
repository.getMoviesByCityId(req.params.city, (err, movies)
=> {
if(err) return next(err);
res.json(movies)
});
})
cinema-catalog.js
API - Cinema Catalog
app.get('/cities/:city/movies/:movie', (req, res, next) => {
repository.getMovieSessionsByCityId(req.params.movie,
req.params.city, (err, sessions) => {
if(err) return next(err);
res.json(sessions)
});
})
cinema-catalog.js
API - Cinema Catalog
app.get('/cities/:city/cinemas', (req, res, next) => {
repository.getCinemasByCityId(req.params.city, (err,
cinemas) => {
if(err) return next(err);
res.json(cinemas)
});
})
cinema-catalog.js
API - Cinema Catalog
app.get('/cinemas/:cinema/movies', (req, res, next) => {
repository.getMoviesByCinemaId(req.params.cinema, (err,
movies) => {
if(err) return next(err);
res.json(movies)
});
})
cinema-catalog.js
API - Cinema Catalog
app.get('/cinemas/:cinema/movies/:movie', (req, res, next) => {
repository.getMovieSessionsByCinemaId(req.params.movie
, req.params.cinema, (err, sessions) => {
if(err) return next(err);
res.json(sessions)
});
})
cinema-catalog.js
API - Cinema Catalog
const test = require('tape');
const supertest = require('supertest');
const movies = require('./cinema-catalog');
const server = require("../server/server");
const repository = require("../repository/repository");
function runTests(){
//run tests here
}
module.exports = { runTests }
cinema-catalog.test.js
API - Cinema Catalog
var app = null;
server.start(movies, repository, (err, app) => {
var cityId = null;
var movieId = null;
var cinemaId = null;
//test cases
})
repository.disconnect();
server.stop();
cinema-catalog.test.js
API - Cinema Catalog
test('GET /cities', (t) => {
supertest(app) .get('/cities')
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) =>{
if(res.body && res.body.length > 0)
cityId = res.body[1]._id;
t.error(err, 'No errors')
t.assert(res.body && res.body.length > 0, "All
Cities returned")
t.end()
})
})
cinema-catalog.test.js
API - Cinema Catalog
test('GET /cities/:city/movies', (t) => {
supertest(app)
.get('/cities/' + cityId + "/movies")
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) =>{
if(res.body && res.body.length > 0)
movieId = res.body[0].idFilme;
t.error(err, 'No errors')
t.assert(res.body, "Movies By City Id returned")
t.end()
})
})
cinema-catalog.test.js
API - Cinema Catalog
test('GET /cities/:city/movies/:movie', (t) => {
supertest(app)
.get('/cities/' + cityId + '/movies/' + movieId)
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) =>{
if(res.body && res.body.length > 0)
cinemaId = res.body[0].idCinema;
t.error(err, 'No errors')
t.assert(res.body && res.body.length > 0, "Movie
Sessions by City Id returned")
t.end()
})
})
cinema-catalog.test.js
API - Cinema Catalog
test('GET /cities/:city/cinemas', (t) => {
supertest(app)
.get('/cities/' + cityId + '/cinemas')
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) =>{
t.error(err, 'No errors')
t.assert(res.body, "Cinemas By City Id
returned")
t.end()
})
})
cinema-catalog.test.js
API - Cinema Catalog
test('GET /cinemas/:cinema/movies', (t) => {
supertest(app)
.get('/cinemas/' + cinemaId + "/movies")
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) =>{
t.error(err, 'No errors')
t.assert(res.body, "Movies By Cinema Id
returned")
t.end()
})
})
cinema-catalog.test.js
API - Cinema Catalog
test('GET /cinemas/:cinema/movies/:movie', (t) => {
supertest(app)
.get('/cinemas/' + cinemaId + "/movies/" + movieId)
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) =>{
t.error(err, 'No errors')
t.assert(res.body, "Movie Sessions By Cinema Id
returned")
t.end()
})
})
cinema-catalog.test.js
API - Cinema Catalog
require("dotenv-safe").load();
require("./config/mongodb.test").runTests();
require("./server/server.test").runTests();
require("./repository/repository.test").runTests();
require("./api/cinema-catalog.test").runTests();
index.test.js
API - Cinema Catalog
Index -
Cinema
Catalog
Index - Cinema Catalog
require("dotenv-safe").load();
const cinemaCatalog = require('./api/cinema-catalog');
const server = require("./server/server");
const repository = require("./repository/repository");
server.start(cinemaCatalog, repository, (err, app) => {
console.log("just started");
});
index.js
Index - Cinema Catalog
Dúvidas?
Exercícios
1 Adicione outra função no microservice
2 Aplique validação de entrada de dados
3 Adicione o restante do CRUD ao microservice
Obrigado!

Mais conteúdo relacionado

PPTX
Sigle Page Application - A nova Web
PPT
Mobileconf dicas-android
PDF
TDC2016SP - Trilha Node.Js
PDF
Node.js: serious business
PDF
Javascript Ilegível
PPT
Html5 storage api
PDF
Minicurso groovy grails
ODP
App scala
Sigle Page Application - A nova Web
Mobileconf dicas-android
TDC2016SP - Trilha Node.Js
Node.js: serious business
Javascript Ilegível
Html5 storage api
Minicurso groovy grails
App scala

Mais de Luiz Duarte (20)

PDF
Mecanismo de busca em Node.js e MongoDB
PDF
FDP, DEEP, INVEST e SMART: entendendo a sopa de letrinhas que todo PO deve co...
PDF
Team Building: Passo a Passo
PPTX
Curso Scrum e Métodos Ágeis 07
PPTX
Curso Scrum e Métodos Ágeis 04
PPTX
Curso Scrum e Métodos Ágeis 02
PPTX
Curso Scrum e Métodos Ágeis 03
PPTX
Curso Scrum e Métodos Ágeis - Introdução
PPTX
Curso Scrum e Métodos Ágeis 01
PPTX
Curso Scrum e Métodos Ágeis 05
PPTX
Curso Scrum e Métodos Ágeis 06
PPTX
Carreira em Agilidade
PPTX
Gamification em Modelos de Maturidade
PPTX
Curso de Node.js e MongoDB - 20
PPTX
Curso de Node.js e MongoDB - 19
PPTX
Curso de Node.js e MongoDB - 17
PPTX
Curso de Node.js e MongoDB - 16
PPTX
Curso de Node.js e MongoDB - 15
PPTX
Curso de Node.js e MongoDB - 14
PPTX
Curso de Node.js e MongoDB - 13
Mecanismo de busca em Node.js e MongoDB
FDP, DEEP, INVEST e SMART: entendendo a sopa de letrinhas que todo PO deve co...
Team Building: Passo a Passo
Curso Scrum e Métodos Ágeis 07
Curso Scrum e Métodos Ágeis 04
Curso Scrum e Métodos Ágeis 02
Curso Scrum e Métodos Ágeis 03
Curso Scrum e Métodos Ágeis - Introdução
Curso Scrum e Métodos Ágeis 01
Curso Scrum e Métodos Ágeis 05
Curso Scrum e Métodos Ágeis 06
Carreira em Agilidade
Gamification em Modelos de Maturidade
Curso de Node.js e MongoDB - 20
Curso de Node.js e MongoDB - 19
Curso de Node.js e MongoDB - 17
Curso de Node.js e MongoDB - 16
Curso de Node.js e MongoDB - 15
Curso de Node.js e MongoDB - 14
Curso de Node.js e MongoDB - 13
Anúncio

Último (7)

PPTX
Mapeamento de Objeto para Tabela Relacional
PDF
apresentacao introducao computacao ead.pdf
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
Paper_A028_BR_Victor_Enrique_Cavero_Sori (1).pdf
PDF
Dos requisitos ao código: como criar código rastreável em PHP
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PDF
Evolução em código: algoritmos genéticos com PHP
Mapeamento de Objeto para Tabela Relacional
apresentacao introducao computacao ead.pdf
Curso de Windows 11 resumido na prática.pptx
Paper_A028_BR_Victor_Enrique_Cavero_Sori (1).pdf
Dos requisitos ao código: como criar código rastreável em PHP
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Evolução em código: algoritmos genéticos com PHP
Anúncio

Curso de Node.js e MongoDB - 18

  • 2. Repositório Api - Cinema-Catalog Index - Cinema-Catalog CRONOGRAMA
  • 4. Repositório ● pesquisar cidades em que a rede possui cinema; ● pesquisar cinemas por id da cidade; ● pesquisar filmes disponíveis em um cinema; ● pesquisar filmes disponíveis em uma cidade; ● pesquisar sessões disponíveis para um filme em uma cidade; ● pesquisar sessões disponíveis para um filme em um cinema; Funcionalidades
  • 5. Repositório const mongodb = require("../config/mongodb"); const ObjectId = require("mongodb").ObjectId; function getAllCities(callback){ mongodb.connect((err, db) => { db.collection("cinemaCatalog").find({}, {cidade:1,uf:1,pais:1}).toArray(callback); }) } repository.js
  • 6. Repositório function getCinemasByCityId(cityId, callback){ var objCityId = ObjectId(cityId); mongodb.connect((err, db) => { db.collection("cinemaCatalog").find({_id: objCityId}, {cinemas: 1}).toArray((err, cities) => { if(err) return callback(err, null); callback(err, cities[0].cinemas); }); }); } repository.js
  • 7. Repositório function disconnect(){ return mongodb.disconnect(); } module.exports = { getAllCities, getCinemasByCityId, disconnect } repository.js
  • 8. Repositório const test = require('tape'); const repository = require('./repository'); function runTests(){ var cityId = null; var cinemaId = null; var movieId = null; //tests here } module.exports = { runTests } repository.test.js
  • 9. Repositório test('Repository getAllCities', (t) => { repository.getAllCities((err, cities) => { if(cities && cities.length > 0) cityId = cities[1]._id;//Porto Alegre t.assert(!err && cities && cities.length > 0, "All Cities Returned"); t.end(); }); }) repository.test.js
  • 10. Repositório test('Repository getCinemasByCityId', (t) => { repository.getCinemasByCityId(cityId, (err, cinemas) => { if(cinemas && cinemas.length > 0) cinemaId = cinemas[0]._id; t.assert(!err && cinemas && cinemas.length > 0, "All Cinemas Returned By City Id"); t.end(); }); }) repository.test.js
  • 11. Repositório test('Repository Disconnect', (t) => { t.assert(repository.disconnect(), "Disconnect Ok"); t.end(); }) } repository.test.js
  • 14. Repositório function getMoviesByCinemaId(cinemaId, callback){ var objCinemaId = ObjectId(cinemaId); mongodb.connect((err, db) => { db.collection("cinemaCatalog").aggregate([ {$match: {"cinemas._id": objCinemaId}}, {$unwind: "$cinemas"}, {$unwind: "$cinemas.salas"}, {$unwind: "$cinemas.salas.sessoes"}, {$group: {_id: { filme: "$cinemas.salas.sessoes.filme", idFilme: "$cinemas.salas.sessoes.idFilme"}}} ]).toArray(callback); }); } repository.js
  • 15. Repositório function getMoviesByCityId(cityId, callback){ var objCityId = ObjectId(cityId); mongodb.connect((err, db) => { db.collection("cinemaCatalog").aggregate([ {$match: {"_id": objCityId}}, {$unwind: "$cinemas"}, {$unwind: "$cinemas.salas"}, {$unwind: "$cinemas.salas.sessoes"}, {$group: {_id: { filme: "$cinemas.salas.sessoes.filme", idFilme: "$cinemas.salas.sessoes.idFilme"}}} ]).toArray((err, sessions) => { if(err) return callback(err, null); callback(err, sessions.map(item => { return {idFilme: item._id.idFilme, filme: item._id.filme } } )); }); }); } repository.js
  • 16. Repositório function getMovieSessionsByCityId(movieId, cityId, callback){ var objMovieId = ObjectId(movieId); var objCityId = ObjectId(cityId); mongodb.connect((err, db) => { db.collection("cinemaCatalog").aggregate([ {$match: {"_id": objCityId}}, {$unwind: "$cinemas"}, {$unwind: "$cinemas.salas"}, {$unwind: "$cinemas.salas.sessoes"}, {$match: {"cinemas.salas.sessoes.idFilme": objMovieId}}, {$group: {_id: { filme: "$cinemas.salas.sessoes.filme", idFilme: "$cinemas.salas.sessoes.idFilme", idCinema: "$cinemas._id", sala: "$cinemas.salas.nome", sessao: "$cinemas.salas.sessoes"}}} ]).toArray((err, sessions) => { if(err) return callback(err, null); callback(err, sessions.map(item => { return {idFilme: item._id.idFilme, filme: item._id.filme, idCinema: item._id.idCinema, sala: item._id.sala, sessao: item._id.sessao } } )); }); }); } repository.js
  • 17. Repositório function getMovieSessionsByCinemaId(movieId, cinemaId, callback){ var objCinemaId = ObjectId(cinemaId); var objMovieId = ObjectId(movieId); mongodb.connect((err, db) => { db.collection("cinemaCatalog").aggregate([ {$match: {"cinemas._id": objCinemaId}}, {$unwind: "$cinemas"}, {$unwind: "$cinemas.salas"}, {$unwind: "$cinemas.salas.sessoes"}, {$match: {"cinemas.salas.sessoes.idFilme": objMovieId}}, {$group: {_id: { filme: "$cinemas.salas.sessoes.filme", idFilme: "$cinemas.salas.sessoes.idFilme", sala: "$cinemas.salas.nome", sessao: "$cinemas.salas.sessoes"}}} ]).toArray((err, sessions) => { if(err) return callback(err, null); callback(err, sessions.map(item => { return {idFilme: item._id.idFilme, filme: item._id.filme, sala: item._id.sala, sessao: item._id.sessao } } )); }); }); } repository.js
  • 19. Repositório test('Repository getMoviesByCinemaId', (t) => { repository.getMoviesByCinemaId(cinemaId, (err, movies) => { t.assert(!err && movies && movies.length > 0, "Movies By Cinema Id Returned"); t.end(); }); }) repository.test.js
  • 20. Repositório test('Repository getMoviesByCityId', (t) => { repository.getMoviesByCityId(cityId, (err, movies) => { if(movies && movies.length > 0) movieId = movies[1].idFilme;//Era de Ultron t.assert(!err && movies && movies.length > 0, "Movies By City Id Returned"); t.end(); }); }) repository.test.js
  • 21. Repositório test('Repository getMovieSessionsByCityId', (t) => { repository.getMovieSessionsByCityId(movieId, cityId, (err, sessions) => { t.assert(!err && sessions && sessions.length > 0, "Movie Sessions By City Id Returned"); t.end(); }); }) repository.test.js
  • 22. Repositório test('Repository getMovieSessionsByCinemaId', (t) => { repository.getMovieSessionsByCinemaId(movieId, cinemaId, (err, sessions) => { t.assert(!err && sessions && sessions.length > 0, "Movie Sessions By Cinema Id Returned"); t.end(); }); }) repository.test.js
  • 25. API - Cinema Catalog GET /cities lista todas cidades onde a rede possui cinema GET /cities/:city/movies lista todos os filmes em exibição na cidade especificada; GET /cities/:city/movies/:movie lista todos as sessões do filme escolhido na cidade especificada; GET /cities/:city/cinemas lista todos os cinemas em determinada cidade; GET /cinemas/:cinema/movies lista todos os filmes em exibição no cinema especificado; GET /cinemas/:cinema/movies/:movie lista todas as sessões do filme escolhido no cinema especificado; Estrutura
  • 26. API - Cinema Catalog module.exports = (app, repository) => { app.get('/cities', (req, res, next) => { repository.getAllCities((err, cities) => { if(err) return next(err); res.json(cities); }); }) //another routes here } cinema-catalog.js
  • 27. API - Cinema Catalog app.get('/cities/:city/movies', (req, res, next) => { repository.getMoviesByCityId(req.params.city, (err, movies) => { if(err) return next(err); res.json(movies) }); }) cinema-catalog.js
  • 28. API - Cinema Catalog app.get('/cities/:city/movies/:movie', (req, res, next) => { repository.getMovieSessionsByCityId(req.params.movie, req.params.city, (err, sessions) => { if(err) return next(err); res.json(sessions) }); }) cinema-catalog.js
  • 29. API - Cinema Catalog app.get('/cities/:city/cinemas', (req, res, next) => { repository.getCinemasByCityId(req.params.city, (err, cinemas) => { if(err) return next(err); res.json(cinemas) }); }) cinema-catalog.js
  • 30. API - Cinema Catalog app.get('/cinemas/:cinema/movies', (req, res, next) => { repository.getMoviesByCinemaId(req.params.cinema, (err, movies) => { if(err) return next(err); res.json(movies) }); }) cinema-catalog.js
  • 31. API - Cinema Catalog app.get('/cinemas/:cinema/movies/:movie', (req, res, next) => { repository.getMovieSessionsByCinemaId(req.params.movie , req.params.cinema, (err, sessions) => { if(err) return next(err); res.json(sessions) }); }) cinema-catalog.js
  • 32. API - Cinema Catalog const test = require('tape'); const supertest = require('supertest'); const movies = require('./cinema-catalog'); const server = require("../server/server"); const repository = require("../repository/repository"); function runTests(){ //run tests here } module.exports = { runTests } cinema-catalog.test.js
  • 33. API - Cinema Catalog var app = null; server.start(movies, repository, (err, app) => { var cityId = null; var movieId = null; var cinemaId = null; //test cases }) repository.disconnect(); server.stop(); cinema-catalog.test.js
  • 34. API - Cinema Catalog test('GET /cities', (t) => { supertest(app) .get('/cities') .expect('Content-Type', /json/) .expect(200) .end((err, res) =>{ if(res.body && res.body.length > 0) cityId = res.body[1]._id; t.error(err, 'No errors') t.assert(res.body && res.body.length > 0, "All Cities returned") t.end() }) }) cinema-catalog.test.js
  • 35. API - Cinema Catalog test('GET /cities/:city/movies', (t) => { supertest(app) .get('/cities/' + cityId + "/movies") .expect('Content-Type', /json/) .expect(200) .end((err, res) =>{ if(res.body && res.body.length > 0) movieId = res.body[0].idFilme; t.error(err, 'No errors') t.assert(res.body, "Movies By City Id returned") t.end() }) }) cinema-catalog.test.js
  • 36. API - Cinema Catalog test('GET /cities/:city/movies/:movie', (t) => { supertest(app) .get('/cities/' + cityId + '/movies/' + movieId) .expect('Content-Type', /json/) .expect(200) .end((err, res) =>{ if(res.body && res.body.length > 0) cinemaId = res.body[0].idCinema; t.error(err, 'No errors') t.assert(res.body && res.body.length > 0, "Movie Sessions by City Id returned") t.end() }) }) cinema-catalog.test.js
  • 37. API - Cinema Catalog test('GET /cities/:city/cinemas', (t) => { supertest(app) .get('/cities/' + cityId + '/cinemas') .expect('Content-Type', /json/) .expect(200) .end((err, res) =>{ t.error(err, 'No errors') t.assert(res.body, "Cinemas By City Id returned") t.end() }) }) cinema-catalog.test.js
  • 38. API - Cinema Catalog test('GET /cinemas/:cinema/movies', (t) => { supertest(app) .get('/cinemas/' + cinemaId + "/movies") .expect('Content-Type', /json/) .expect(200) .end((err, res) =>{ t.error(err, 'No errors') t.assert(res.body, "Movies By Cinema Id returned") t.end() }) }) cinema-catalog.test.js
  • 39. API - Cinema Catalog test('GET /cinemas/:cinema/movies/:movie', (t) => { supertest(app) .get('/cinemas/' + cinemaId + "/movies/" + movieId) .expect('Content-Type', /json/) .expect(200) .end((err, res) =>{ t.error(err, 'No errors') t.assert(res.body, "Movie Sessions By Cinema Id returned") t.end() }) }) cinema-catalog.test.js
  • 40. API - Cinema Catalog require("dotenv-safe").load(); require("./config/mongodb.test").runTests(); require("./server/server.test").runTests(); require("./repository/repository.test").runTests(); require("./api/cinema-catalog.test").runTests(); index.test.js
  • 41. API - Cinema Catalog
  • 43. Index - Cinema Catalog require("dotenv-safe").load(); const cinemaCatalog = require('./api/cinema-catalog'); const server = require("./server/server"); const repository = require("./repository/repository"); server.start(cinemaCatalog, repository, (err, app) => { console.log("just started"); }); index.js
  • 44. Index - Cinema Catalog
  • 47. 1 Adicione outra função no microservice 2 Aplique validação de entrada de dados 3 Adicione o restante do CRUD ao microservice