lfapi

changeset 28:a37c91ce44d6

Added snapshot support to GET /supporter
author bsw
date Sun Nov 06 20:24:39 2011 +0100 (2011-11-06)
parents c01cf3f82496
children 1956fe9e9d62
files lfapi/main.js
line diff
     1.1 --- a/lfapi/main.js	Sun Nov 06 20:22:51 2011 +0100
     1.2 +++ b/lfapi/main.js	Sun Nov 06 20:24:39 2011 +0100
     1.3 @@ -834,13 +834,53 @@
     1.4  
     1.5    '/supporter': function (conn, req, res, params) {
     1.6      requireAccessLevel(conn, req, res, 'pseudonym', function() {
     1.7 -      var fields = ['supporter.issue_id', 'supporter.initiative_id', 'supporter.member_id', 'supporter.draft_id'];
     1.8        var query = new selector.Selector();
     1.9 -      query.from('supporter')
    1.10 +      if (params.snapshot) {
    1.11 +
    1.12 +        query.from('direct_supporter_snapshot', 'supporter');
    1.13 +
    1.14 +        if (params.delegating == '1') {
    1.15 +          query.join('delegating_interest_snapshot', 'interest', 'interest.issue_id = supporter.issue_id AND interest.delegate_member_ids @> ARRAY[supporter.member_id] AND interest.event = supporter.event');
    1.16 +          if (params.delegate_member_id) {
    1.17 +            query.addWhere(['interest.delegate_member_ids @> array[?::int]', params.delegate_member_id]);
    1.18 +          }
    1.19 +          if (params.direct_delegate_member_id) {
    1.20 +            query.addWhere(['interest.delegate_member_ids[1] = ?', params.direct_delegate_member_id]);
    1.21 +          }
    1.22 +        } else {
    1.23 +          query.join('direct_interest_snapshot', 'interest', 'interest.issue_id = supporter.issue_id AND interest.member_id = supporter.member_id AND interest.event = supporter.event');
    1.24 +        }
    1.25 +
    1.26 +        query.addField('interest.*')
    1.27 +        query.addField('supporter.initiative_id');
    1.28 +        
    1.29 +        switch (params.snapshot) {
    1.30 +          case 'latest':
    1.31 +            query.addWhere('supporter.event = issue.latest_snapshot_event');
    1.32 +            break;
    1.33 +            
    1.34 +          case 'end_of_admission':
    1.35 +          case 'half_freeze':
    1.36 +          case 'full_freeze':
    1.37 +            query.addWhere(['supporter.event = ?', params.snapshot]);
    1.38 +            break;
    1.39 +            
    1.40 +          default:
    1.41 +            respond('json', conn, req, res, 'unprocessable', null, 'Invalid snapshot type');
    1.42 +            return;
    1.43 +
    1.44 +        };
    1.45 +        
    1.46 +      } else {
    1.47 +        if (! req.current_member_id) {
    1.48 +          respond('json', conn, req, res, 'unprocessable', null, 'No snapshot type given and not beeing member');
    1.49 +          return;
    1.50 +        };
    1.51 +        query.from('supporter')
    1.52 +        query.addField('supporter.*');
    1.53 +        query.addWhere(['supporter.member_id = ?', req.current_member_id]);
    1.54 +      }
    1.55        query.join('member', null, 'member.id = supporter.member_id JOIN initiative ON initiative.id = supporter.initiative_id JOIN issue ON issue.id = initiative.issue_id JOIN policy ON policy.id = issue.policy_id JOIN area ON area.id = issue.area_id JOIN unit ON area.unit_id = unit.id');
    1.56 -      fields.forEach( function(field) {
    1.57 -        query.addField(field, null, ['grouped']);
    1.58 -      });
    1.59        general_params.addMemberOptions(req, query, params);
    1.60        general_params.addInitiativeOptions(req, query, params);
    1.61        query.addOrderBy('supporter.issue_id, supporter.initiative_id, supporter.member_id');

Impressum / About Us