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