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');