Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
gddAccumulatedController.js 5.02 KiB
gdd_collection = require('../models/gdd.js');
gdd_current_collection = require('../models/gdd_current.js');
gdd_normal_collection = require('../models/normals.js');
utils = require('../lib/utils');

function send_response(message, gdds, data, res) {
    res.json({
        message: message,
        date: data["last_date"],
        data: gdds,
        closest_lon: data["location"]["coordinates"][0],
        closest_lat: data["location"]["coordinates"][1]
    })
}

function find(collection, query, projection, temps, res, product) {
    collection.findOne(query, projection).then(function(data) {
        var min_temps = data["min_temps"]
        var max_temps = data["max_temps"]
        var gdds = [];

        var { t_base, t_max, t_min } = temps;
        
        var min_temp = 0
        var max_temp = 0

        var gdd_sum = 0;
        
        for (var i = 0; i < min_temps.length; i++) {
            gdd_value = utils.calculate_gdd(min_temps[i], t_min, max_temps[i], t_max, t_base, product);
            gdd_sum += gdd_value
            gdds.push(gdd_sum)
        }
        send_response("Accumulated GDDs", gdds, data, res);
    }, function(err) {
        res.status(500).send({"internal error": err})
    })
}


exports.accumulated_gdd = function (req, res) {

    var year = parseInt(req.params.year);
    var product = req.params.product;

    var latitude = parseFloat(req.body.latitude)
    var longitude = parseFloat(req.body.longitude)

    var query = {
        location: { 
            "$near": {
                "$geometry": {
                    "type": "Point", 
                    "coordinates": [longitude, latitude]
                },
            },
        },
        year: year,
    }

    var t_base = 50
    var t_max = 86
    var t_min = 50 

    errors = []

    if (year < 1981 || year > new Date().getFullYear()) {
        errors.push({
            parameter_error: "year",
            message: year.toString() + " is out of bounds for GDD calculations. Must be between 1981 - Current Year"