lfapi

changeset 14:fe484d4ca81f

Completed snapshot support for GET /interest, code formatting for GET /event
author bsw
date Fri Nov 04 20:39:19 2011 +0100 (2011-11-04)
parents 7708205ce4c5
children ef5f746f21ad
files lfapi/main.js
line diff
     1.1 --- a/lfapi/main.js	Tue Nov 01 11:40:58 2011 +0100
     1.2 +++ b/lfapi/main.js	Fri Nov 04 20:39:19 2011 +0100
     1.3 @@ -650,11 +650,27 @@
     1.4    '/interest': function (conn, req, res, params) {
     1.5      requireAccessLevel(conn, req, res, 'pseudonym', function() {
     1.6        var query = new selector.Selector();
     1.7 -      if (!params.snapshot) {
     1.8 -        query.from('interest');
     1.9 -      } else if (params.snapshot == 'latest') {
    1.10 -        query.from('direct_interest_snapshot', 'interest');
    1.11 -        query.addWhere('interest.event = issue.latest_snapshot_event');
    1.12 +      switch (params.snapshot) {
    1.13 +        case 'latest':
    1.14 +          query.from('direct_interest_snapshot', 'interest');
    1.15 +          query.addWhere('interest.event = issue.latest_snapshot_event');
    1.16 +          break;
    1.17 +          
    1.18 +        case 'end_of_admission':
    1.19 +        case 'half_freeze':
    1.20 +        case 'full_freeze':
    1.21 +          query.from('direct_interest_snapshot', 'interest');
    1.22 +          query.addWhere('interest.event = ?', params.snapshot);
    1.23 +          break;
    1.24 +          
    1.25 +        case undefined:
    1.26 +          query.from('interest');
    1.27 +          break;
    1.28 +          
    1.29 +        default:
    1.30 +          respond('json', conn, req, res, 'unprocessable', { error: 'Invalid snapshot type' });
    1.31 +          return;
    1.32 +
    1.33        };
    1.34        query.addField('interest.*');
    1.35        query.join('member', null, 'member.id = interest.member_id');
    1.36 @@ -929,28 +945,30 @@
    1.37      });
    1.38    },
    1.39    
    1.40 -  '/event': function (conn, req, res, params) { requireAccessLevel(conn, req, res, 'anonymous', function() {
    1.41 -    var fields = ['event.id', 'event.occurrence', 'event.event', 'event.member_id', 'event.issue_id', 'event.state', 'event.initiative_id', 'event.draft_id', 'event.suggestion_id'];
    1.42 -    var query = new selector.Selector();
    1.43 -    query.from('event LEFT JOIN member ON member.id = event.member_id LEFT JOIN initiative ON initiative.id = event.initiative_id LEFT JOIN issue ON issue.id = event.issue_id LEFT JOIN policy ON policy.id = issue.policy_id LEFT JOIN area ON area.id = issue.area_id LEFT JOIN unit ON area.unit_id = unit.id');
    1.44 -    fields.forEach( function(field) {
    1.45 -      query.addField(field, null, ['grouped']);
    1.46 +  '/event': function (conn, req, res, params) {
    1.47 +    requireAccessLevel(conn, req, res, 'anonymous', function() {
    1.48 +      var fields = ['event.id', 'event.occurrence', 'event.event', 'event.member_id', 'event.issue_id', 'event.state', 'event.initiative_id', 'event.draft_id', 'event.suggestion_id'];
    1.49 +      var query = new selector.Selector();
    1.50 +      query.from('event LEFT JOIN member ON member.id = event.member_id LEFT JOIN initiative ON initiative.id = event.initiative_id LEFT JOIN issue ON issue.id = event.issue_id LEFT JOIN policy ON policy.id = issue.policy_id LEFT JOIN area ON area.id = issue.area_id LEFT JOIN unit ON area.unit_id = unit.id');
    1.51 +      fields.forEach( function(field) {
    1.52 +        query.addField(field, null, ['grouped']);
    1.53 +      });
    1.54 +      general_params.addMemberOptions(req, query, params);
    1.55 +      general_params.addInitiativeOptions(req, query, params);
    1.56 +      query.addOrderBy('event.id');
    1.57 +      general_params.addLimitAndOffset(query, params);
    1.58 +      db.query(conn, req, res, query, function (events, conn) {
    1.59 +        var result = { result: events.rows }
    1.60 +        includes = [];
    1.61 +        if (params.include_initiatives) includes.push({ class: 'initiative', objects: 'result'});
    1.62 +        if (params.include_issues) includes.push({ class: 'issue', objects: 'result'});
    1.63 +        if (params.include_areas) includes.push({ class: 'area', objects: 'issues'});
    1.64 +        if (params.include_units) includes.push({ class: 'unit', objects: 'areas'});
    1.65 +        if (params.include_policies) includes.push({ class: 'policy', objects: 'issues' });
    1.66 +        addRelatedData(conn, req, res, result, includes);
    1.67 +      });
    1.68      });
    1.69 -    general_params.addMemberOptions(req, query, params);
    1.70 -    general_params.addInitiativeOptions(req, query, params);
    1.71 -    query.addOrderBy('event.id');
    1.72 -    general_params.addLimitAndOffset(query, params);
    1.73 -    db.query(conn, req, res, query, function (events, conn) {
    1.74 -      var result = { result: events.rows }
    1.75 -      includes = [];
    1.76 -      if (params.include_initiatives) includes.push({ class: 'initiative', objects: 'result'});
    1.77 -      if (params.include_issues) includes.push({ class: 'issue', objects: 'result'});
    1.78 -      if (params.include_areas) includes.push({ class: 'area', objects: 'issues'});
    1.79 -      if (params.include_units) includes.push({ class: 'unit', objects: 'areas'});
    1.80 -      if (params.include_policies) includes.push({ class: 'policy', objects: 'issues' });
    1.81 -      addRelatedData(conn, req, res, result, includes);
    1.82 -    });
    1.83 -  }); },
    1.84 +  },
    1.85    
    1.86    // TODO add interfaces for data structure:
    1.87    // ignored_member requireAccessLevel(conn, req, res, 'member');

Impressum / About Us