Ignore:
Timestamp:
Mar 28, 2012, 7:09:01 PM (9 years ago)
Author:
work@…
Message:
  • added / improved api documentation
  • added getAssaysForStudy api method
  • simplified and centralized simplication method for flattening domain data
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/api/ApiController.groovy

    r2186 r2188  
    3737
    3838        // see if we already have a token on file for this device id
    39         def token = Token.findByDeviceID(params.deviceID)
    40 
     39        def token = Token.findByDeviceID(params?.deviceID)
     40       
    4141        // generate a new token if we don't have a token on file
    4242        def result = [:]
     
    5252                ).save(failOnError: true)
    5353            }
    54 
     54           
    5555            result = ['token':token.deviceToken,'sequence':token.sequence]
    5656
     
    7272    }
    7373
    74 //    @Secured(['ROLE_CLIENT', 'ROLE_ADMIN'])
    7574    def getStudies = {
    7675        println "api::getStudies: ${params}"
     
    8382            response.sendError(401, 'Unauthorized')
    8483        } else {
    85 //            def user = authenticationService.getLoggedInUser()
    86             def user = Token.findByDeviceID(deviceID).user
     84            def user = Token.findByDeviceID(deviceID)?.user
    8785            def readableStudies = Study.giveReadableStudies(user)
    8886            def studies = []
     
    9795                        'subjects'              : study.subjects.size(),
    9896                        'species'               : study.subjects.species.collect { it.name }.unique(),
    99                         'assays'                : study.assays.collect { it.module.name }.unique(),
     97                        'assays'                : study.assays.collect { it.name }.unique(),
     98                        'modules'               : study.assays.collect { it.module.name }.unique(),
    10099                        'events'                : study.events.size(),
    101100                        'uniqueEvents'          : study.events.collect { it.toString() }.unique(),
     
    107106                ]
    108107            }
    109            
    110108
    111109            def result = [
     
    126124    }
    127125
    128 //    @Secured(['ROLE_CLIENT', 'ROLE_ADMIN'])
    129126    def getSubjectsForStudy = {
    130127        println "api::getSubjectsForStudy: ${params}"
     
    135132
    136133        // fetch user and study
    137 //        def user    = authenticationService.getLoggedInUser()
    138         def user    = Token.findByDeviceID(deviceID).user
     134        def user    = Token.findByDeviceID(deviceID)?.user
    139135        def study   = Study.findByStudyUUID(studyToken)
    140136       
     
    147143            response.sendError(401, 'Unauthorized')
    148144        } else {
    149             def subjects = []
    150            
    151             // iterate through subjects
    152             study.subjects.each {
    153                 def fields  = it.giveFields()
    154                 def subject = [:]
    155 
    156                 // add subject id
    157                 subject['id'] = it.id
    158 
    159                 // add subject field values
    160                 fields.each { field ->
    161                     def value = it.getFieldValue( field.name )
    162 
    163                     if (value.hasProperty('name')) {
    164                         subject[ field.name ] = value.name
    165                     } else {
    166                         subject[ field.name ] = value
    167                     }
    168                 }
    169 
    170                 subjects[ subjects.size() ] = subject
    171             }
    172            
     145            def subjects = apiService.flattenDomainData( study.subjects )
     146
    173147            // define result
    174148            def result = [
    175                     'count'     : study.subjects.size(),
     149                    'count'     : subjects.size(),
    176150                    'subjects'  : subjects
    177151            ]
     
    189163    }
    190164
    191 
    192 //    @Secured(['ROLE_CLIENT', 'ROLE_ADMIN'])
    193165    def getAssaysForStudy = {
    194166        println "api::getAssaysForStudy: ${params}"
     
    199171
    200172        // fetch user and study
    201 //        def user    = authenticationService.getLoggedInUser()
    202         def user    = Token.findByDeviceID(deviceID).user
     173        def user    = Token.findByDeviceID(deviceID)?.user
    203174        def study   = Study.findByStudyUUID(studyToken)
    204175
    205176        // check
    206177        if (!apiService.validateRequest(deviceID,validation)) {
    207             println "1"
    208178            response.sendError(401, 'Unauthorized')
    209179        } else if (!study) {
    210             println "2"
    211180            response.sendError(400, 'No such study')
    212181        } else if (!study.canRead(user)) {
    213             println "3"
    214             response.sendError(401, 'Unauthorized')
    215         } else {
     182            response.sendError(401, 'Unauthorized')
     183        } else {
     184            def assays = apiService.flattenDomainData( study.assays )
     185           
    216186            // define result
    217187            def result = [
    218 //                    'count'     : study.subjects.size(),
    219 //                    'subjects'  : subjects
     188                    'count'     : assays.size(),
     189                    'assays'    : assays
    220190            ]
    221191
Note: See TracChangeset for help on using the changeset viewer.