diff --git a/routes/nodes.js b/routes/nodes.js index 9b0b6ed..e1befe5 100644 --- a/routes/nodes.js +++ b/routes/nodes.js @@ -48,7 +48,11 @@ module.exports = { } Promise.all([ - knex('current_nodes').where('id', nodeId), + knex.select('current_nodes.*', 'users.display_name as user', 'users.id as uid') + .from('current_nodes') + .leftJoin('changesets', 'current_nodes.changeset_id', 'changesets.id') + .leftJoin('users', 'changesets.user_id', 'users.id') + .where('current_nodes.id', nodeId), knex('current_node_tags').where('node_id', nodeId) ]) .then(function (result) { diff --git a/services/query-ways.js b/services/query-ways.js index 5279b91..54a30e2 100644 --- a/services/query-ways.js +++ b/services/query-ways.js @@ -6,16 +6,28 @@ module.exports = function queryWays(knex, wayIds) { // helper to make raw queries, because knex version of these // simple selects was MUCH slower - function select(table, key, ids) { + function selectWithUserInfo(table, key, ids) { if(ids.length === 0) return Promise.resolve([]); - return knex.raw('select * from '+table + - ' where '+key+' in ('+ ids.join(',') + ')') + return knex.raw('select a.*, c.display_name as user, c.id as uid from '+table + + ' a left join changesets b on a.changeset_id = b.id' + + ' left join users c on b.user_id = c.id ' + + ' where a.'+key+' in ('+ ids.join(',') + ')') .then(function (resp) { return resp.rows; }); } + function select(table, key, ids) { + if(ids.length === 0) + return Promise.resolve([]); + return knex.raw('select * from '+table + + ' where '+key+' in ('+ ids.join(',') + ')') + .then(function (resp) { + return resp.rows; + }); + } + // Query the desired ways and any way_nodes that are in those ways // Also query any relations that those ways are a part of. @@ -23,7 +35,11 @@ module.exports = function queryWays(knex, wayIds) { // or other relations that are part of relations. return Promise.all([ - knex('current_ways').whereIn('id', wayIds), + knex.select('current_ways.*', 'users.display_name as user', 'users.id as uid') + .from('current_ways') + .leftJoin('changesets', 'current_ways.changeset_id', 'changesets.id') + .leftJoin('users', 'changesets.user_id', 'users.id') + .whereIn('current_ways.id', wayIds), knex('current_way_nodes') .orderBy('sequence_id', 'asc') .whereIn('way_id', wayIds), @@ -44,10 +60,10 @@ module.exports = function queryWays(knex, wayIds) { var relationIds = _.pluck(result[2], 'relation_id'); return Promise.all(result.concat([ - select('current_nodes', 'id', nodeIds), + selectWithUserInfo('current_nodes', 'id', nodeIds), select('current_way_tags', 'way_id', wayIds), select('current_node_tags', 'node_id', nodeIds), - select('current_relations', 'id', relationIds), + selectWithUserInfo('current_relations', 'id', relationIds), select('current_relation_tags', 'relation_id', relationIds) ])); }) @@ -84,7 +100,11 @@ module.exports = function queryWays(knex, wayIds) { return result; - }); + }) + .catch(function (err) { + console.log(err); + res(Boom.wrap(err)); + }); }; diff --git a/services/xml.js b/services/xml.js index 4eb788b..ae6598f 100644 --- a/services/xml.js +++ b/services/xml.js @@ -114,8 +114,8 @@ var xml = { version: node.version, changeset: node.changeset_id, timestamp: node.timestamp, - user: 'DevelopmentSeed', - uid: 1, + user: node.user, + uid: node.uid, lat: node.latitude / RATIO, lon: node.longitude / RATIO }); @@ -140,8 +140,8 @@ var xml = { version: way.version, changeset: way.changeset_id, timestamp: way.timestamp, - user: 'DevelopmentSeed', - uid: 1 + user: way.user, + uid: way.uid }); // Use the sequence ID to make sure nodes are ordered correctly.