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