Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
simcaq-node
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Harbor Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
simcaq
simcaq-node
Commits
0d22508a
Commit
0d22508a
authored
5 years ago
by
pdg16
Browse files
Options
Downloads
Patches
Plain Diff
[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
5 years ago
Stage: test
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
CHANGELOG.md
+4
-0
4 additions, 0 deletions
CHANGELOG.md
src/libs/middlewares/addMissing.js
+166
-53
166 additions, 53 deletions
src/libs/middlewares/addMissing.js
src/libs/routes/classCount.js
+4
-2
4 additions, 2 deletions
src/libs/routes/classCount.js
with
174 additions
and
55 deletions
CHANGELOG.md
+
4
−
0
View file @
0d22508a
...
...
@@ -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
...
...
This diff is collapsed.
Click to expand it.
src/libs/middlewares/addMissing.js
+
166
−
53
View file @
0d22508a
...
...
@@ -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
();
};
};
This diff is collapsed.
Click to expand it.
src/libs/routes/classCount.js
+
4
−
2
View file @
0d22508a
...
...
@@ -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
;
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment