lfapi

changeset 15:ef5f746f21ad

Added GET /population
author bsw
date Sat Nov 05 12:14:18 2011 +0100 (2011-11-05)
parents fe484d4ca81f
children 91658b95d000
files lfapi/main.js
line diff
     1.1 --- a/lfapi/main.js	Fri Nov 04 20:39:19 2011 +0100
     1.2 +++ b/lfapi/main.js	Sat Nov 05 12:14:18 2011 +0100
     1.3 @@ -647,6 +647,50 @@
     1.4      });
     1.5    },
     1.6  
     1.7 +  '/population': function (conn, req, res, params) {
     1.8 +    requireAccessLevel(conn, req, res, 'pseudonym', function() {
     1.9 +      var query = new selector.Selector();
    1.10 +      query.from('direct_population_snapshot', 'population');
    1.11 +      switch (params.snapshot) {
    1.12 +        case 'latest':
    1.13 +          query.addWhere('population.event = issue.latest_snapshot_event');
    1.14 +          break;
    1.15 +          
    1.16 +        case 'end_of_admission':
    1.17 +        case 'half_freeze':
    1.18 +        case 'full_freeze':
    1.19 +          query.addWhere(['population.event = ?', params.snapshot]);
    1.20 +          break;
    1.21 +          
    1.22 +        default:
    1.23 +          respond('json', conn, req, res, 'unprocessable', { error: 'Invalid snapshot type' });
    1.24 +          return;
    1.25 +
    1.26 +      };
    1.27 +      query.addField('population.*');
    1.28 +      query.join('member', null, 'member.id = population.member_id');
    1.29 +      query.join('issue', null, 'population.issue_id = issue.id');
    1.30 +      query.join('policy', null, 'policy.id = issue.policy_id');
    1.31 +      query.join('area', null, 'area.id = issue.area_id');
    1.32 +      query.join('unit', null, 'area.unit_id = unit.id');
    1.33 +      general_params.addMemberOptions(req, query, params);
    1.34 +      general_params.addIssueOptions(req, query, params);
    1.35 +      query.addOrderBy('population.issue_id, population.member_id');
    1.36 +      general_params.addLimitAndOffset(query, params);
    1.37 +      db.query(conn, req, res, query, function (population_result, conn) {
    1.38 +        console.log(population_result);
    1.39 +        var result = { result: population_result.rows }
    1.40 +        includes = [];
    1.41 +        if (params.include_members) includes.push({ class: 'member', objects: 'result'});
    1.42 +        if (params.include_issues) includes.push({ class: 'issue', objects: 'result'});
    1.43 +        if (params.include_areas) includes.push({ class: 'area', objects: 'areas'});
    1.44 +        if (params.include_units) includes.push({ class: 'unit', objects: 'areas'});
    1.45 +        if (params.include_policies) includes.push({ class: 'policy', objects: 'issues' });
    1.46 +        addRelatedData(conn, req, res, result, includes);
    1.47 +      });
    1.48 +    });
    1.49 +  },
    1.50 +  
    1.51    '/interest': function (conn, req, res, params) {
    1.52      requireAccessLevel(conn, req, res, 'pseudonym', function() {
    1.53        var query = new selector.Selector();

Impressum / About Us