CartoDB-SQL-API/app/models/metadata.js
2013-03-14 11:58:30 +01:00

76 lines
2.2 KiB
JavaScript

/**
* User: simon
* Date: 23/08/2011
* Time: 21:10
* Desc: retrieves users database_name from the redis metadatabase based on subdomain/username
*/
var RedisPool = require("./redis_pool")
, _ = require('underscore')
, Step = require('step');
module.exports = function() {
var me = {
metadata_database: 5,
user_key: "rails:users:<%= username %>"
};
/**
* Get the database name for this particular subdomain/username
*
* @param req - standard express req object. importantly contains host information
* @param callback
*/
me.getDatabase = function(req, callback) {
// strip subdomain from header host
var username = req.headers.host.split('.')[0]
var redisKey = _.template(this.user_key, {username: username});
this.retrieve(redisKey, 'database_name', callback);
};
/**
* Get the user id for this particular subdomain/username
*
* @param req - standard express req object. importantly contains host information
* @param callback
*/
me.getId= function(req, callback) {
// strip subdomain from header host
var username = req.headers.host.split('.')[0]
var redisKey = _.template(this.user_key, {username: username});
this.retrieve(redisKey, 'id', callback);
};
/**
* Make a data access call to Redis
*
* @param redisKey - the base redis key where the metadata hash lives
* @param hashKey - the specific metadata you want to retrieve
* @param callback - function to pass metadata too. err,data args
*/
me.retrieve = function(redisKey, hashKey, callback) {
var that = this;
var redisClient;
Step(
function getRedisClient() {
RedisPool.acquire(that.metadata_database, this);
},
function lookupMetadata(err, data) {
if (err) throw err;
redisClient = data;
redisClient.HGET(redisKey, hashKey, this);
},
function releaseRedisClient(err, data) {
if ( redisClient ) RedisPool.release(that.metadata_database, redisClient);
callback(err, data);
}
);
};
return me;
}();