-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathqueries.js
114 lines (86 loc) · 2.67 KB
/
queries.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
const { Publication, Sample } = require('./models');
const countOccurrences = (rows, key) => rows.reduce((acc, row) => {
const prop = row[key];
acc[prop] = acc[prop] ? acc[prop] + 1 : 1;
return acc;
}, {});
const countsToArray = (counts) => Object.keys(counts).map((key) => [key, counts[key]]);
function getDiseases(rows) {
// TODO: match with master disease list
return countsToArray(countOccurrences(rows, 'disease'));
}
function getPlatforms(rows) {
const counts = countOccurrences(rows, 'instrument');
return countsToArray(counts);
}
function getLibraryFormats(rows) {
const counts = countOccurrences(rows, 'libraryFormat');
counts.SINGLE = 0;
return countsToArray(counts);
}
function getTissues(rows) {
return countsToArray(countOccurrences(rows, 'tissue'));
}
function getAssayTypes(rows) {
return countsToArray(countOccurrences(rows, 'assayType'));
}
function getReadLengthRange(rows) {
return countsToArray(countOccurrences(rows, 'readLength'));
}
function getDois(rows) {
return countsToArray(countOccurrences(rows, 'doi'));
}
function getMBases(rows) {
return countsToArray(countOccurrences(rows, 'mbases'));
}
const getData = async (request, response) => {
try {
const samples = await Sample.findAll();
// get each sample
const samplesList = samples.map((row) => ({
...row.toJSON(),
}));
// get metadata stats for all samples
const diseaseList = getDiseases(samplesList);
const platformList = getPlatforms(samplesList);
const libraryFormatList = getLibraryFormats(samplesList);
const tissueList = getTissues(samplesList);
const assayTypeList = getAssayTypes(samplesList);
const doiList = getDois(samplesList);
const mbasesList = getMBases(samplesList);
const readLengthRange = getReadLengthRange(samplesList);
console.log(tissueList);
console.log(assayTypeList);
console.log(readLengthRange)
console.log("doi list " + doiList)
console.log("mbases list " + mbasesList)
// send data
response.status(200).json({
diseases: diseaseList,
platforms: platformList,
libraryFormats: libraryFormatList,
tissues: tissueList,
assayTypes: assayTypeList,
dois: doiList,
mbases: mbasesList,
readLengths: readLengthRange,
samples: samplesList,
});
} catch (e) {
response.status(500).json(e);
}
};
// const getPublications = async (request, response) => {
// try {
// const publications = await Publication.findAll({limit: 2});
// response.status(200).json({
// publications,
// });
// } catch (e) {
// response.status(500).json(e);
// }
// };
module.exports = {
getData,
// getPublications,
};