Skip to content
Snippets Groups Projects
Commit 0d22508a authored by pdg16's avatar pdg16
Browse files

[v1.11.15]Fix addMissing for classCount route

parent 58b0fe68
No related branches found
No related tags found
1 merge request!234[v1.11.15]Fix addMissing for classCount route
Pipeline #21573 failed
......@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
## 1.11.15 - 2019-10-16
## Changed
- Fix addMissing for classCount route
## 1.11.14 - 2019-10-13
## Changed
- OCDE updated
......
......@@ -22,69 +22,182 @@ module.exports = function addMissing(rqf){
return (req, res, next) => {
let dims = Object.keys(req.dims).filter(i => {return i !== 'size';});
// FIXME: No momento, só funciona para duas dimensões (padrão para o LDE)
if(dims.length != 2) return next();
if(req.filter.min_year != req.filter.max_year) return next();
if((dims.length != 2) && (dims.length == 1 && req.filter.min_year == req.filter.max_year)) return next();
// if(req.filter.min_year != req.filter.max_year) return next();
if(req.result.length === 0) return next();
let result = req.result;
let dimsValues = {};
result.forEach((r) => {
dims.forEach((dim) => {
let rqfName = rqf.fieldValues[dim].resultField;
if(typeof dimsValues[rqfName] === 'undefined') {
dimsValues[rqfName] = [];
}
if(dimsValues[rqfName].indexOf(r[rqfName]) === -1) {
dimsValues[rqfName].push(r[rqfName]);
}
})
});
if(dims.length == 2) {
let G = {};
let rqfName = rqf.fieldValues[dims[0]].resultField;
let rqfName2 = rqf.fieldValues[dims[1]].resultField;
G[rqfName] = {};
dimsValues[rqfName].forEach((value) => {
let secondDim = {};
let result = req.result;
dimsValues[rqfName2].forEach((dValue) => {
secondDim[dValue] = false;
let dimsValues = {};
result.forEach((r) => {
dims.forEach((dim) => {
let rqfName = rqf.fieldValues[dim].resultField;
if(typeof dimsValues[rqfName] === 'undefined') {
dimsValues[rqfName] = [];
}
if(dimsValues[rqfName].indexOf(r[rqfName]) === -1) {
dimsValues[rqfName].push(r[rqfName]);
}
})
});
G[rqfName][value] = {};
G[rqfName][value][rqfName2] = secondDim;
});
result.forEach((r) => {
let resultDim1 = r[rqfName];
let resultDim2 = r[rqfName2];
G[rqfName][resultDim1][rqfName2][resultDim2] = true;
});
Object.keys(G[rqfName]).forEach((dim1Value) => {
Object.keys(G[rqfName][dim1Value][rqfName2]).forEach((dim2Value) => {
let value = G[rqfName][dim1Value][rqfName2][dim2Value];
if(!value) {
let newEntry = Object.assign({}, result[0], {[rqfName]: parseInt(dim1Value, 10), [rqfName2]: parseInt(dim2Value, 10), total: 0});
// result.push(newEntry);
let index = 0;
for(let i = 0; i < result.length; ++i) {
let r = result[i];
index = i;
if(r[rqfName] > newEntry[rqfName]) break;
if(r[rqfName] == newEntry[rqfName] && r[rqfName2] > newEntry[rqfName2]) break;
}
if (newEntry.dim1Value == undefined && newEntry.dim2Value == undefined) {
let newResult = [...result.slice(0, index), newEntry, ...result.slice(index, result.length)];
result = newResult;
let G = {};
let rqfName = rqf.fieldValues[dims[0]].resultField;
let rqfName2 = rqf.fieldValues[dims[1]].resultField;
G[rqfName] = {};
dimsValues[rqfName].forEach((value) => {
let secondDim = {};
dimsValues[rqfName2].forEach((dValue) => {
secondDim[dValue] = false;
});
G[rqfName][value] = {};
G[rqfName][value][rqfName2] = secondDim;
});
result.forEach((r) => {
let resultDim1 = r[rqfName];
let resultDim2 = r[rqfName2];
G[rqfName][resultDim1][rqfName2][resultDim2] = true;
});
Object.keys(G[rqfName]).forEach((dim1Value) => {
Object.keys(G[rqfName][dim1Value][rqfName2]).forEach((dim2Value) => {
let value = G[rqfName][dim1Value][rqfName2][dim2Value];
if(!value) {
let newEntry = Object.assign({}, result[0], {[rqfName]: parseInt(dim1Value, 10), [rqfName2]: parseInt(dim2Value, 10), total: 0});
if(newEntry.hasOwnProperty("average"))
newEntry.average = 0;
if(newEntry.hasOwnProperty("median"))
newEntry.median = 0;
if(newEntry.hasOwnProperty("stddev"))
newEntry.stddev = 0;
if(newEntry.hasOwnProperty("first_qt"))
newEntry.first_qt = 0;
if(newEntry.hasOwnProperty("third_qt"))
newEntry.third_qt = 0;
// result.push(newEntry);
let index = 0;
for(let i = 0; i < result.length; ++i) {
let r = result[i];
index = i;
if(r[rqfName] > newEntry[rqfName]) break;
if(r[rqfName] == newEntry[rqfName] && r[rqfName2] > newEntry[rqfName2]) break;
}
if (newEntry.dim1Value == undefined && newEntry.dim2Value == undefined) {
let newResult = [...result.slice(0, index), newEntry, ...result.slice(index, result.length)];
result = newResult;
}
}
}
});
});
});
req.result = result;
req.result = result;
}
// Quando é série historica, é uma dimensão com max e min year nos filtros.
else if (dims.length == 1 && req.filter.min_year != req.filter.max_year) {
let result = req.result;
//Pega os valores da dimensão
let dimsValues = {};
result.forEach((r) => {
// para cada dimensão
dims.forEach((dim) => {
// pega o nome da dimensao
let rqfName = rqf.fieldValues[dim].resultField;
console.log(rqfName);
if (rqfName[0] == "university_id" || rqfName[1] == "university_id") {
rqfName = "university_id"
};
let rqfName2 = "year"
//se n existir o array é uma nova dimensão, então cria os arrays para colocar os ids
if(typeof dimsValues[rqfName] === 'undefined') {
dimsValues[rqfName] = [];
}
if(typeof dimsValues[rqfName2] === 'undefined') {
dimsValues[rqfName2] = [];
}
//se já existe, verifica se está no vetor, se n estiver, adiciona o id
if(dimsValues[rqfName].indexOf(r[rqfName]) === -1) {
dimsValues[rqfName].push(r[rqfName]);
}
//se já existe, verifica se está no vetor, se n estiver, adiciona o ano
if(dimsValues[rqfName2].indexOf(r[rqfName2]) === -1) {
dimsValues[rqfName2].push(r[rqfName2]);
}
})
})
//ordena os anos
dimsValues["year"] = dimsValues["year"].sort();
// console.log(dimsValues);
let dimsValuesKey = Object.keys(dimsValues);
// console.log(dimsValuesKey);
let firstDim = dimsValuesKey[0];
let secondDim = dimsValuesKey[1];
let count = 0;
//Permuta as dimensões em ordem, agora verifica se existe no vetor de resultados.
dimsValues[firstDim].forEach((fDim) => {
dimsValues[secondDim].forEach((sDim) => {
//caso o object chegou ao final e ainda temos coisas para adicionar
if (typeof result[count] === 'undefined' ) {
let newEntry = Object.assign({}, result[count - 1]);
newEntry[firstDim] = fDim;
newEntry[secondDim] = sDim
newEntry["total"] = 0;
let newResult = [...result.slice(0, count), newEntry, ...result.slice(count, result.length)];
result = newResult;
count++;
}
// console.log(fDim,result[count][firstDim],sDim,result[count][secondDim])
//está no vetor, aumenta o contador
else if ((fDim == result[count][firstDim]) && (sDim == result[count][secondDim])) {
// console.log("A Entrada Existe");
count++;
//se não existe no objecto, vamos ordernar
} else {
// console.log("A entrada " + fDim + " "+ sDim + " Não existe");
//Se não existe pega uma copia do próximo, onde a primeira dimensão seja igual
if (result[count][firstDim] == fDim) {
let newEntry = Object.assign({}, result[count]);
newEntry[firstDim] = fDim;
newEntry[secondDim] = sDim
newEntry["total"] = 0;
let newResult = [...result.slice(0, count), newEntry, ...result.slice(count, result.length)];
result = newResult;
count++;
//se não existe pega uma copia do anterior, onde a primeira dimensão seja igual
} else if (result[count - 1][firstDim] == fDim) {
let newEntry = Object.assign({}, result[count]);
newEntry[firstDim] = fDim;
newEntry[secondDim] = sDim
newEntry["total"] = 0;
let newResult = [...result.slice(0, count), newEntry, ...result.slice(count, result.length)];
result = newResult;
count++;
}
}
});
});
req.result = result;
}
next();
};
};
......@@ -338,8 +338,6 @@ function addNullFields(result) {
}
prevFirstDimId = d;
});
console.log("FUNCTION");
console.log(result);
}
function addZeroFields(result) {
......@@ -374,6 +372,9 @@ classCountApp.get('/count', rqf.parse(), (req, res, next) => {
}, rqf.build(), query, addMissing(rqf), id2str.transform(), response('class_count'));
// LDE
// Essa rota não esta sendo usada.
// Ela está com defeito e quando é chamada cai o banco.
/*
classCountApp.get('/', rqf.parse(), (req, res, next) => {
// Faz a consulta do número de alunos pelas dimensões
if(("education_level_mod" in req.dims) || ("education_level_mod" in req.filter) || ("education_level_short" in req.dims)) {
......@@ -449,5 +450,6 @@ classCountApp.get('/', rqf.parse(), (req, res, next) => {
next();
}, response('class_count'));
*/
module.exports = classCountApp;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment