API Covid19
A API a desenvolver necessita de ser capaz de apresentar os seguintes dados:
- Listar número de novos casos (para todos os dias da semana)
- Lista número de internamentos nos Cuidados Intensivos (para todos os dias da semana)
- Dia com mais novos casos
- Dia com menos casos
- Média a 7 dias
- Número total de novos casos na semana
Os dados utilizados, como exemplo, foram obtidos em https://covid19-api.vost.pt e são relativos á semana 29/03 a 03/04.
Como é normal vamos necessitar de criar um diretório e dar inicio á nossa API.
mkdir API_Covid- Cria o diretório
npm init- Inicia o projeto e cria o package.json que vai conter a informação relativa á API
npm install — save express body-parser mongoose- Vai criar as dependências que vamos precisar para o projeto (express e mongoose)
Para a base de dados vamos utilizar o MongoDB.

Após criada, podemos introduzir os dados:

Por uma questão de organização criei as seguintes pastas para a API:

Para o index:
let express = require (‘express’)
// import body parser
let bodyParser = require (‘body-parser’);
// import mongoose
let mongoose = require (‘mongoose’);
let app = express ();
// Import routes
let apiRoutes = require (“./ RegistoRoutes”)
// configure bodyparser to process orders
app.use (bodyParser.urlencoded ({
extended: true
}));
app.use (bodyParser.json ());
// Connect to BD
const dbPath = ‘mongodb: // localhost / CovidAPI’;
const options = {useNewUrlParser: true, useUnifiedTopology: true}
const mongo = mongoose.connect (dbPath, options);
mongo.then (() => {
console.log (‘Linked to BD’);
}, error => {
console.log (error, ‘error’);
});
var db = mongoose.connection;
// Check Connection
if (! db)
console.log (“Error connecting db”);
else
console.log (“DB Connected Successfully”);
// Port Server
var port = process.env.PORT || 6666;
// Use API routes in the app
app.use (‘/ api’, apiRoutes)
// Start Server
app.listen (port, function () {
console.log (“UP server in port:” + port);
});
Para o controller:
//Import Covid ModelCovid = require('./RegistoModel');//Para indexexports.index = function (req, res) {var arrayCasos = [];var darrayData = [];var totalCasos = 0;var arrayIntensivos = [];Covid.get(function (err, covid) {if (err)res.json({status: "error",message: err});for(var i=0; i<covid.length; i++){arrayCasos.push(covid[i].confirmados_novos)arrayIntensivos.push(covid[i].internados_uci)darrayData.push(covid[i].data)totalCasos += Number(covid[i].confirmados_novos);}var maximo = null;maximo = Math.max(...arrayCasos);var IndiceMax = arrayCasos.indexOf(maximo);var minimo = null;minimo = Math.min(...arrayCasos);var IndiceMin = arrayCasos.indexOf(minimo);var media = null;media = totalCasos/covid.length;res.json({novosCasos: arrayCasos,internadosUCI: arrayIntensivos,Maximo: darrayData[IndiceMax],Minimo: darrayData[IndiceMin],totalCasos: totalCasos,Media: media,});});};//Criar nova BIOexports.add = function (req, res) {var covid = new Covid();covid.data = req.body.data? req.body.data: covid.data;covid.confirmados_novos = req.body.confirmados_novos;covid.internados_uci = req.body.internados_uci;//Guardar e verificar erroscovid.save(function (err) {if (err)res.json(err);res.json({message: "Nova Covid Adicionada!",data: covid});});};// Ver Covidexports.view = function (req, res) {Covid.findById(req.params.covid_id, function (err, covid) {if (err)res.send(err);res.json({message: 'Detalhes da Covid',data: covid});});};// Atualizar Covidexports.update = function (req, res) {Covid.findById(req.params.covid_id, function (err, covid) {if (err)res.send(err);covid.nome = req.body.nome ? req.body.nome : covid.nome;covid.email = req.body.email;covid.telef = req.body.telef;covid.morada = req.body.morada;//Guardar e verificar erroscovid.save(function (err) {if (err)res.json(err)res.json({message: "Covid Updated Successfully",data: covid});});});};// Apagar Covidexports.delete = function (req, res) {Covid.deleteOne({_id: req.params.covid_id}, function (err, contact) {if (err)res.send(err)res.json({status: "OK",message: 'Covid Eliminada!'});});};
Para o models:
var mongoose = require (‘mongoose’);
// schema
var covidSchema = mongoose.Schema ({
date: {
type: String,
required: true
},
confirmed_new: {
type: Number,
required: true
},
internados_uci: {
type: Number,
required: true
}
});
// Export Covid Model
var Covid = module.exports = mongoose.model (‘covid’, covidSchema);
module.exports.get = function (callback, limit) {
Covid.find (callback) .limit (limit);
}
Para o Routes:
// initialize express router
let router = require (‘express’). Router ();
// set default API response
router.get (‘/’, function (req, res) {
res.json ({
status: ‘API Works’,
message: ‘Welcome to FirstRest API’
});
});
// Import Covid Controller
var RegistoController = require (‘./ RegistoController’);
// Covid routes
router.route (‘/ covid’)
.get (RegistoController.index)
.post (RegistoController.add);
router.route (‘/ covid /: covid_id’)
.get (RegistoController.view)
.patch (RegistoController.update)
.put (RegistoController.update)
.delete (RegistoController.delete);
// Export API routes
module.exports = router;
Após todos os ficheiros criados podemos iniciar a nossa API:

Através do Postman vamos verificar como está a funcionar a API:
