diff --git a/server/controllers/assessmentsController/index.js b/server/controllers/assessmentsController/index.js index ae2ad401..02b680e8 100644 --- a/server/controllers/assessmentsController/index.js +++ b/server/controllers/assessmentsController/index.js @@ -20,6 +20,25 @@ const assessmentsController = { return res.status(401).json({ error: error.message }) } }, + raw: async (req, res) => { + try { + const { appDb } = req.app.locals + const { assessment, variable } = req.params + + console.log(req.params) + console.log('Assesment : ', assessment, 'Variable : ', variable) + + const rawData = await AssessmentModel.allForAssessmentRaw( + appDb, + assessment, + variable + ) + + return res.status(200).json({ data: rawData }) + } catch (error) { + return res.status(401).json({ error: error.message }) + } + }, } export default assessmentsController diff --git a/server/models/AssessmentModel/index.js b/server/models/AssessmentModel/index.js index 242e0f24..d798add8 100644 --- a/server/models/AssessmentModel/index.js +++ b/server/models/AssessmentModel/index.js @@ -1,8 +1,45 @@ +import { ALL_SUBJECTS_MONGO_PROJECTION, STUDIES_TO_OMIT } from '../../constants' import { collections } from '../../utils/mongoCollections' const AssessmentModel = { all: async (db, query) => await db.collection(collections.assessments).find(query).toArray(), + allForAssessmentRaw: async (db, assessment, variable) => { + console.log('Assesment : ', assessment, 'Variable : ', variable) + // const data = this.allForAssessmentRaw(db, chart.assessment, chart.variable) + // console.log('Data : ', data) + const data = await db + .collection(collections.assessmentDayData) + .find( + { + assessment, + study: { $nin: STUDIES_TO_OMIT }, + }, + { + projection: ALL_SUBJECTS_MONGO_PROJECTION, + } + ) + .toArray() + + const rawData = {} + + for (const document of data) { + const dayData = document.dayData + const subjectSite = document.study + + if (!rawData[subjectSite]) { + rawData[subjectSite] = [] + } + + for (const day of dayData) { + const rawDayData = day[variable] + rawData[subjectSite].push(rawDayData) + } + } + + console.log('rawData : ', rawData) + return rawData + }, upsert: async (db, query, updatedAttributes) => await db.collection(collections.assessments).findOneAndUpdate( query, diff --git a/server/models/ParticipantsModel/index.js b/server/models/ParticipantsModel/index.js index 0b0d4765..7d8d1865 100644 --- a/server/models/ParticipantsModel/index.js +++ b/server/models/ParticipantsModel/index.js @@ -20,11 +20,48 @@ const ParticipantsModel = { assessment: chart.assessment, study: { $in: filtersService.requestedSites, $nin: STUDIES_TO_OMIT }, } + + // console.log('Assesment : ', chart.assessment, 'Variable : ', chart.variable) + // // const data = this.allForAssessmentRaw(db, chart.assessment, chart.variable) + // // console.log('Data : ', data) + // const data = await db + // .collection(collections.assessmentDayData) + // .find( + // { + // assessment: chart.assessment, + // study: { $nin: STUDIES_TO_OMIT }, + // }, + // { + // projection: ALL_SUBJECTS_MONGO_PROJECTION, + // } + // ) + // .toArray() + + // const rawData = {} + + // for (const document of data) { + // const dayData = document.dayData + // const subjectSite = document.study + + // if (!rawData[subjectSite]) { + // rawData[subjectSite] = [] + // } + + // for (const day of dayData) { + // const rawDayData = day[chart.variable] + // rawData[subjectSite].push(rawDayData) + // } + // } + + // console.log('rawData : ', rawData) + if (filtersService.allFiltersInactive()) { - return await db + const data = await db .collection(collections.assessmentDayData) .find(query, { projection: ALL_SUBJECTS_MONGO_PROJECTION }) .stream() + + return data } const groupedParticipants = await Promise.all( diff --git a/server/routes/assessments.js b/server/routes/assessments.js index a8219755..2e429d43 100644 --- a/server/routes/assessments.js +++ b/server/routes/assessments.js @@ -20,4 +20,8 @@ router assessmentsController.index ) +router + .route(v1Routes.assessments.rawData) + .get(ensureAuthenticated, assessmentsController.raw) + export default router diff --git a/server/utils/routes.js b/server/utils/routes.js index 8fcaa28f..28723176 100644 --- a/server/utils/routes.js +++ b/server/utils/routes.js @@ -14,6 +14,7 @@ export const routes = { export const v1Routes = { assessments: { index: `${v1Root}/assessments`, + rawData: `${v1Root}/assessments/:assessment/data/:variable`, }, assessmentData: { index: `${v1Root}/import/data/day`, diff --git a/views/api/assessments/index.js b/views/api/assessments/index.js index 54610cff..d0916734 100644 --- a/views/api/assessments/index.js +++ b/views/api/assessments/index.js @@ -4,6 +4,8 @@ import http from '../http' const assessments = { loadAll: async (queryParams) => http.get(apiRoutes.assessments.index, queryParams), + rawData: async (assessment, variable) => + http.get(apiRoutes.assessments.rawData(assessment, variable)), } export default assessments diff --git a/views/routes/routes.js b/views/routes/routes.js index 084ae257..15427622 100644 --- a/views/routes/routes.js +++ b/views/routes/routes.js @@ -33,8 +33,8 @@ export const routes = { viewChart: (chartId, queryParams) => queryParams ? `/charts/${chartId}${qs.stringify(queryParams, { - addQueryPrefix: true, - })}` + addQueryPrefix: true, + })}` : `/charts/${chartId}`, viewChartPage: '/charts/:chart_id', viewConfiguration: (configId) => `/u/configure?s=view&id=${configId}`, @@ -51,6 +51,8 @@ export const apiRoutes = { }, assessments: { index: `${apiPath}/assessments`, + rawData: (assessment, variable) => + `${apiPath}/assessments/${assessment}/data/${variable}`, }, auth: { login: `${apiPath}/login`,