lfapi
changeset 3:e69609a3c98a
Added member_ttl, added 'latest' snapshot to interest.
author | bsw |
---|---|
date | Thu Oct 20 13:55:29 2011 +0200 (2011-10-20) |
parents | cfdb8f15c388 |
children | 77b761569ae2 |
files | lfapi/main.js |
line diff
1.1 --- a/lfapi/main.js Thu Oct 20 13:54:07 2011 +0200 1.2 +++ b/lfapi/main.js Thu Oct 20 13:55:29 2011 +0200 1.3 @@ -46,7 +46,7 @@ 1.4 1.5 // callback function, encoding result and sending it to the client 1.6 function respond(mode, conn, req, res, status, object, err) { 1.7 - var http_status = 500; 1.8 + var http_status = 200; 1.9 var command; 1.10 1.11 if (status == 'ok') { 1.12 @@ -137,7 +137,6 @@ 1.13 1.14 if (objects) { 1.15 var objects_exists = false; 1.16 - query = new selector.Selector(); 1.17 var ids_hash = {}; 1.18 if (typeof(objects) == 'array') { 1.19 if (objects.length > 0) { 1.20 @@ -163,10 +162,12 @@ 1.21 for (key in ids_hash) { 1.22 ids.push(key) 1.23 } 1.24 - 1.25 - query.from(class); 1.26 - query.addWhere([class + '.id IN (??)', ids]); 1.27 - fields.addObjectFields(query, class); 1.28 + if (ids.length > 0) { 1.29 + query = new selector.Selector(); 1.30 + query.from(class); 1.31 + query.addWhere([class + '.id IN (??)', ids]); 1.32 + fields.addObjectFields(query, class); 1.33 + } 1.34 }; 1.35 }; 1.36 1.37 @@ -395,12 +396,22 @@ 1.38 query.addField('"liquid_feedback_version".*'); 1.39 db.query(conn, req, res, query, function (result, conn) { 1.40 var liquid_feedback_version = result.rows[0]; 1.41 - respond('json', conn, req, res, 'ok', { 1.42 - core_version: liquid_feedback_version.string, 1.43 - api_version: api_version, 1.44 - current_access_level: req.current_member_id ? 'member' : req.current_access_level, 1.45 - current_member_id: req.current_member_id, 1.46 - settings: config.settings 1.47 + var query = new selector.Selector(); 1.48 + query.from('"system_setting"'); 1.49 + query.addField('"member_ttl"'); 1.50 + db.query(conn, req, res, query, function (result, conn) { 1.51 + var member_ttl = null; 1.52 + if (result.rows[0]) { 1.53 + member_ttl = result.rows[0].member_ttl; 1.54 + }; 1.55 + respond('json', conn, req, res, 'ok', { 1.56 + core_version: liquid_feedback_version.string, 1.57 + api_version: api_version, 1.58 + current_access_level: req.current_member_id ? 'member' : req.current_access_level, 1.59 + current_member_id: req.current_member_id, 1.60 + member_ttl: member_ttl, 1.61 + settings: config.settings 1.62 + }); 1.63 }); 1.64 }); 1.65 }); 1.66 @@ -414,8 +425,8 @@ 1.67 db.query(conn, req, res, query, function (result, conn) { 1.68 var member_count = result.rows[0]; 1.69 respond('json', conn, req, res, 'ok', { 1.70 - member_count: member_count.total_count, 1.71 - member_count_calculated: member_count.calculated 1.72 + total_count: member_count.total_count, 1.73 + calculated: member_count.calculated 1.74 }); 1.75 }); 1.76 }); 1.77 @@ -641,8 +652,18 @@ 1.78 '/interest': function (conn, req, res, params) { 1.79 requireAccessLevel(conn, req, res, 'pseudonym', function() { 1.80 var query = new selector.Selector(); 1.81 - query.from('interest JOIN member ON member.id = interest.member_id JOIN issue on interest.issue_id = 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.82 + if (!params.snapshot) { 1.83 + query.from('interest'); 1.84 + } else if (params.snapshot == 'latest') { 1.85 + query.from('direct_interest_snapshot', 'interest'); 1.86 + query.addWhere('interest.event = issue.latest_snapshot_event'); 1.87 + }; 1.88 query.addField('interest.*'); 1.89 + query.join('member', null, 'member.id = interest.member_id'); 1.90 + query.join('issue', null, 'interest.issue_id = issue.id'); 1.91 + query.join('policy', null, 'policy.id = issue.policy_id'); 1.92 + query.join('area', null, 'area.id = issue.area_id'); 1.93 + query.join('unit', null, 'area.unit_id = unit.id'); 1.94 general_params.addMemberOptions(req, query, params); 1.95 general_params.addIssueOptions(req, query, params); 1.96 query.addOrderBy('interest.issue_id, interest.member_id'); 1.97 @@ -687,8 +708,8 @@ 1.98 var query = new selector.Selector(); 1.99 query.from('initiative 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.100 fields.addObjectFields(query, 'initiative'); 1.101 + query.addOrderBy('initiative.id'); 1.102 general_params.addInitiativeOptions(req, query, params); 1.103 - query.addOrderBy('initiative.issue_id, initiative.id'); 1.104 general_params.addLimitAndOffset(query, params); 1.105 db.query(conn, req, res, query, function (initiative_result, conn) { 1.106 var result = { result: initiative_result.rows } 1.107 @@ -1187,13 +1208,11 @@ 1.108 var query = new selector.SQLUpdate('member'); 1.109 query.addWhere(['member.id = ?', req.current_member_id]); 1.110 fields.forEach( function(field) { 1.111 - var tmp = {} 1.112 if (typeof(params[field]) != 'undefined') { 1.113 - tmp[field] = params[field]; 1.114 + query.addValues({ field: params[field] }); 1.115 } else { 1.116 - tmp[field] = null; 1.117 + query.addValues({ field: null }); 1.118 } 1.119 - query.addValues(tmp); 1.120 }); 1.121 db.query(conn, req, res, query, function(result) { respond('json', conn, req, res, 'ok'); }); 1.122 }); 1.123 @@ -1607,6 +1626,11 @@ 1.124 // new draft in new initiative in existant issue 1.125 } else if (issue_id && !area_id && !initiative_id) { 1.126 1.127 + if (!initiative_name) { 1.128 + respond('json', conn, req, res, 'unprocessable', null, 'No initiative name supplied.'); 1.129 + return; 1.130 + } 1.131 + 1.132 // check privilege 1.133 requireIssuePrivilege(conn, req, res, issue_id, function() { 1.134