@@ -40,7 +40,7 @@ func (u CohortDataController) RetrieveHistogramForCohortIdAndConceptId(c *gin.Co
40
40
return
41
41
}
42
42
43
- filterConceptIds , cohortPairs , err := utils .ParseConceptIdsAndDichotomousDefs (c )
43
+ filterConceptIdsAndValues , cohortPairs , err := utils .ParseConceptDefsAndDichotomousDefs (c )
44
44
if err != nil {
45
45
c .JSON (http .StatusInternalServerError , gin.H {"message" : "Error parsing request body for prefixed concept ids" , "error" : err .Error ()})
46
46
c .Abort ()
@@ -59,7 +59,7 @@ func (u CohortDataController) RetrieveHistogramForCohortIdAndConceptId(c *gin.Co
59
59
return
60
60
}
61
61
62
- cohortData , err := u .cohortDataModel .RetrieveHistogramDataBySourceIdAndCohortIdAndConceptIdsAndCohortPairs (sourceId , cohortId , histogramConceptId , filterConceptIds , cohortPairs )
62
+ cohortData , err := u .cohortDataModel .RetrieveHistogramDataBySourceIdAndCohortIdAndConceptIdsAndCohortPairs (sourceId , cohortId , histogramConceptId , filterConceptIdsAndValues , cohortPairs )
63
63
if err != nil {
64
64
c .JSON (http .StatusInternalServerError , gin.H {"message" : "Error retrieving concept details" , "error" : err .Error ()})
65
65
c .Abort ()
@@ -76,6 +76,49 @@ func (u CohortDataController) RetrieveHistogramForCohortIdAndConceptId(c *gin.Co
76
76
c .JSON (http .StatusOK , gin.H {"bins" : histogramData })
77
77
}
78
78
79
+ func (u CohortDataController ) RetrieveStatsForCohortIdAndConceptId (c * gin.Context ) {
80
+ sourceIdStr := c .Param ("sourceid" )
81
+ log .Printf ("Querying source: %s" , sourceIdStr )
82
+ cohortIdStr := c .Param ("cohortid" )
83
+ log .Printf ("Querying cohort for cohort definition id: %s" , cohortIdStr )
84
+ conceptIdStr := c .Param ("conceptid" )
85
+ if sourceIdStr == "" || cohortIdStr == "" || conceptIdStr == "" {
86
+ c .JSON (http .StatusBadRequest , gin.H {"message" : "bad request" })
87
+ c .Abort ()
88
+ return
89
+ }
90
+
91
+ filterConceptIdsAndValues , cohortPairs , _ := utils .ParseConceptDefsAndDichotomousDefs (c )
92
+
93
+ sourceId , _ := strconv .Atoi (sourceIdStr )
94
+ cohortId , _ := strconv .Atoi (cohortIdStr )
95
+ conceptId , _ := strconv .ParseInt (conceptIdStr , 10 , 64 )
96
+
97
+ validAccessRequest := u .teamProjectAuthz .TeamProjectValidation (c , []int {cohortId }, cohortPairs )
98
+ if ! validAccessRequest {
99
+ log .Printf ("Error: invalid request" )
100
+ c .JSON (http .StatusForbidden , gin.H {"message" : "access denied" })
101
+ c .Abort ()
102
+ return
103
+ }
104
+
105
+ cohortData , err := u .cohortDataModel .RetrieveHistogramDataBySourceIdAndCohortIdAndConceptIdsAndCohortPairs (sourceId , cohortId , conceptId , filterConceptIdsAndValues , cohortPairs )
106
+ if err != nil {
107
+ c .JSON (http .StatusInternalServerError , gin.H {"message" : "Error retrieving concept details" , "error" : err .Error ()})
108
+ c .Abort ()
109
+ return
110
+ }
111
+
112
+ conceptValues := []float64 {}
113
+ for _ , personData := range cohortData {
114
+ conceptValues = append (conceptValues , float64 (* personData .ConceptValueAsNumber ))
115
+ }
116
+
117
+ statsData := utils .GenerateStatsData (cohortId , conceptId , conceptValues )
118
+
119
+ c .JSON (http .StatusOK , gin.H {"statsData" : statsData })
120
+ }
121
+
79
122
func (u CohortDataController ) RetrieveDataBySourceIdAndCohortIdAndVariables (c * gin.Context ) {
80
123
// TODO - add some validation to ensure that only calls from Argo are allowed through since it outputs FULL data?
81
124
@@ -90,7 +133,9 @@ func (u CohortDataController) RetrieveDataBySourceIdAndCohortIdAndVariables(c *g
90
133
return
91
134
}
92
135
93
- conceptIds , cohortPairs , err := utils .ParseConceptIdsAndDichotomousDefs (c )
136
+ conceptIdsAndValues , cohortPairs , err := utils .ParseConceptDefsAndDichotomousDefs (c )
137
+ conceptIds := utils .ExtractConceptIdsFromCustomConceptVariablesDef (conceptIdsAndValues )
138
+
94
139
if err != nil {
95
140
c .JSON (http .StatusInternalServerError , gin.H {"message" : "Error parsing request body for prefixed concept ids and dichotomous Ids" , "error" : err .Error ()})
96
141
c .Abort ()
@@ -250,12 +295,13 @@ func populateConceptValue(row []string, cohortItem models.PersonConceptAndValue,
250
295
func (u CohortDataController ) RetrieveCohortOverlapStats (c * gin.Context ) {
251
296
errors := make ([]error , 4 )
252
297
var sourceId , caseCohortId , controlCohortId int
253
- var conceptIds []int64
298
+ var conceptIdsAndValues []utils. CustomConceptVariableDef
254
299
var cohortPairs []utils.CustomDichotomousVariableDef
255
300
sourceId , errors [0 ] = utils .ParseNumericArg (c , "sourceid" )
256
301
caseCohortId , errors [1 ] = utils .ParseNumericArg (c , "casecohortid" )
257
302
controlCohortId , errors [2 ] = utils .ParseNumericArg (c , "controlcohortid" )
258
- conceptIds , cohortPairs , errors [3 ] = utils .ParseConceptIdsAndDichotomousDefs (c )
303
+ conceptIdsAndValues , cohortPairs , errors [3 ] = utils .ParseConceptDefsAndDichotomousDefs (c )
304
+ conceptIds := utils .ExtractConceptIdsFromCustomConceptVariablesDef (conceptIdsAndValues )
259
305
260
306
validAccessRequest := u .teamProjectAuthz .TeamProjectValidation (c , []int {caseCohortId , controlCohortId }, cohortPairs )
261
307
if ! validAccessRequest {
0 commit comments