Created
June 6, 2017 10:57
-
-
Save saisankargochhayat/735abb5ad94f13c337ee69ce1ba6fb23 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var mongoose = require('mongoose'); | |
var Emission = require('../models/emissionModel'); | |
/* | |
* A function to calculate the emissions of a component. | |
* Refer to the Emission schema for more information on the components. | |
*/ | |
let find = (component, region, quantity) => { | |
var sum = 0; // emissions accumulator | |
return new Promise((resolve, reject) => { | |
// find the component in the database | |
Emission.findOne({ $or:[ { 'item': new RegExp(component, "i"), 'region': new RegExp(region, "i") }, { 'item': new RegExp(component, "i"), 'region': 'Default' }]}, (err, item) => { | |
// if component is found | |
if (!err && item) { | |
console.log(`\nItem name: ${item.item} :: Type: ${item.itemType}`); | |
// if component type is atomic return its CO2 emissions | |
if (item.itemType == 'atomic') { | |
sum += (quantity * item.components[0].quantity); | |
console.log(`Emissions: ${sum} ${item.components[0].units}`); | |
resolve(sum); | |
} | |
// if component type is complex, recurse to find its atomic components | |
else { | |
let numOfComponents = item.components.length; // number of subcomponents | |
for (let i = 0; i < numOfComponents; i++) { | |
find(item.components[i].name, region, item.components[i].quantity) | |
.then((emis) => { | |
sum += emis; | |
if (i === numOfComponents - 1) { | |
resolve(quantity * sum); | |
} | |
}) | |
.catch((err) => console.log(err)); | |
} | |
} | |
} | |
// return an error if component is not found | |
else reject(`Unable to find component ${component} for ${region}`); | |
}); | |
}); | |
} | |
exports.find = (req, res) => { | |
// dummy values for testing | |
find(item,region,quantity) | |
.then((sum) => { | |
console.log(`\nTotal Emissions: ${sum}`); | |
res.json({ | |
success: true, | |
emissions: parseFloat(sum.toFixed(10)) | |
}); | |
}) | |
.catch((err) => { | |
console.log(`Error: ${err}`); | |
res.json({ | |
success: false, | |
err: err | |
}); | |
}); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var express = require('express'); | |
var router = express.Router(); | |
// get the emission controller | |
var Emission = require('../controllers/emissionController'); | |
router.post('/',function (req, res) { | |
// console.log(req.body); // your JSON | |
// res.send(req.body); // echo the result back | |
res.status(200).send(Emission.find('electricity','Africa',1)); | |
}) | |
// router.get('/', Emission.find); | |
module.exports = router; | |
//curl test- curl -H "Content-Type: application/json" -X POST -d '{"item":"electricity","region":"Africa","unit":"kg/kWh","quantity":1}' http://localhost:3080/v1/emissions |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment