Skip to content

Instantly share code, notes, and snippets.

@saisankargochhayat
Created June 6, 2017 10:57
Show Gist options
  • Save saisankargochhayat/735abb5ad94f13c337ee69ce1ba6fb23 to your computer and use it in GitHub Desktop.
Save saisankargochhayat/735abb5ad94f13c337ee69ce1ba6fb23 to your computer and use it in GitHub Desktop.
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
});
});
}
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