202 lines
5.3 KiB
JavaScript
202 lines
5.3 KiB
JavaScript
var conf = require('../../config.js').database;
|
|
|
|
var redis = require("redis"),
|
|
redisClient = null; //redis.createClient();
|
|
|
|
var async = require("async");
|
|
var sets = require('simplesets');
|
|
|
|
// If you want Memory Store instead...
|
|
// var MemoryStore = require('connect/middleware/session/memory');
|
|
// var session_store = new MemoryStore();
|
|
|
|
var REDIS_PREFIX = '#scrumblr#';
|
|
|
|
//For Redis Debugging
|
|
|
|
|
|
var db = function(callback) {
|
|
if (conf.sock) {
|
|
console.log('Opening redis connection to socket ' + conf.host);
|
|
redisClient = redis.createClient(conf.host);
|
|
} else {
|
|
console.log('Opening redis connection to ' + conf.host + ':' + conf.port);
|
|
redisClient = redis.createClient(conf.port, conf.host, {});
|
|
}
|
|
redisClient.on("connect", function (err) {
|
|
callback();
|
|
});
|
|
|
|
redisClient.on("error", function (err) {
|
|
console.log("Redis error: " + err);
|
|
});
|
|
|
|
};
|
|
|
|
db.prototype = {
|
|
clearRoom: function(room, callback) {
|
|
redisClient.del(REDIS_PREFIX + '-room:/demo-cards', function (err, res) {
|
|
redisClient.del(REDIS_PREFIX + '-room:/demo-columns', function (err, res) {
|
|
callback();
|
|
});
|
|
});
|
|
},
|
|
|
|
// theme commands
|
|
setTheme: function(room, theme) {
|
|
redisClient.set(REDIS_PREFIX + '-room:' + room + '-theme', theme);
|
|
},
|
|
|
|
getTheme: function(room, callback) {
|
|
redisClient.get(REDIS_PREFIX + '-room:' + room + '-theme', function (err, res) {
|
|
callback(res);
|
|
});
|
|
},
|
|
|
|
// revision commands
|
|
setRevisions: function(room, revisions) {
|
|
if (Object.keys(revisions).length === 0) {
|
|
redisClient.del(REDIS_PREFIX + '-room:' + room + '-revisions');
|
|
} else {
|
|
redisClient.set(REDIS_PREFIX + '-room:' + room + '-revisions', JSON.stringify(revisions));
|
|
}
|
|
},
|
|
|
|
getRevisions: function(room, callback) {
|
|
redisClient.get(REDIS_PREFIX + '-room:' + room + '-revisions', function (err, res) {
|
|
callback(JSON.parse(res));
|
|
});
|
|
},
|
|
|
|
// Column commands
|
|
createColumn: function(room, name, callback) {
|
|
redisClient.rpush(REDIS_PREFIX + '-room:' + room + '-columns', name,
|
|
function (err, res) {
|
|
if (typeof callback != "undefined" && callback !== null) callback();
|
|
}
|
|
);
|
|
},
|
|
|
|
getAllColumns: function(room, callback) {
|
|
redisClient.lrange(REDIS_PREFIX + '-room:' + room + '-columns', 0, -1, function(err, res) {
|
|
callback(res);
|
|
});
|
|
},
|
|
|
|
deleteColumn: function(room) {
|
|
redisClient.rpop(REDIS_PREFIX + '-room:' + room + '-columns');
|
|
},
|
|
|
|
setColumns: function(room, columns) {
|
|
//1. first delete all columns
|
|
redisClient.del(REDIS_PREFIX + '-room:' + room + '-columns', function () {
|
|
//2. now add columns for each thingy
|
|
async.forEachSeries(
|
|
columns,
|
|
function( item, callback ) {
|
|
//console.log('rpush: ' + REDIS_PREFIX + '-room:' + room + '-columns' + ' -- ' + item);
|
|
redisClient.rpush(REDIS_PREFIX + '-room:' + room + '-columns', item,
|
|
function (err, res) {
|
|
callback();
|
|
}
|
|
);
|
|
},
|
|
function() {
|
|
//this happens when the series is complete
|
|
}
|
|
);
|
|
});
|
|
},
|
|
|
|
// Card commands
|
|
createCard: function(room, id, card) {
|
|
var cardString = JSON.stringify(card);
|
|
redisClient.hset(
|
|
REDIS_PREFIX + '-room:' + room + '-cards',
|
|
id,
|
|
cardString
|
|
);
|
|
},
|
|
|
|
getAllCards: function(room, callback) {
|
|
redisClient.hgetall(REDIS_PREFIX + '-room:' + room + '-cards', function (err, res) {
|
|
|
|
var cards = [];
|
|
|
|
for (var i in res) {
|
|
cards.push( JSON.parse(res[i]) );
|
|
}
|
|
//console.dir(cards);
|
|
|
|
callback(cards);
|
|
});
|
|
},
|
|
|
|
cardEdit: function(room, id, text) {
|
|
redisClient.hget(REDIS_PREFIX + '-room:' + room + '-cards', id, function(err, res) {
|
|
var card = JSON.parse(res);
|
|
if (card !== null) {
|
|
card.text = text;
|
|
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', id, JSON.stringify(card));
|
|
}
|
|
});
|
|
},
|
|
|
|
cardSetXY: function(room, id, x, y) {
|
|
redisClient.hget(REDIS_PREFIX + '-room:' + room + '-cards', id, function(err, res) {
|
|
var card = JSON.parse(res);
|
|
if (card !== null) {
|
|
card.x = x;
|
|
card.y = y;
|
|
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', id, JSON.stringify(card));
|
|
}
|
|
});
|
|
},
|
|
|
|
deleteCard: function(room, id) {
|
|
redisClient.hdel(
|
|
REDIS_PREFIX + '-room:' + room + '-cards',
|
|
id
|
|
);
|
|
},
|
|
|
|
addSticker: function(room, cardId, stickerId) {
|
|
redisClient.hget(REDIS_PREFIX + '-room:' + room + '-cards', cardId, function(err, res) {
|
|
var card = JSON.parse(res);
|
|
if (card !== null) {
|
|
if (stickerId === "nosticker")
|
|
{
|
|
card.sticker = null;
|
|
|
|
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', cardId, JSON.stringify(card));
|
|
}
|
|
else
|
|
{
|
|
if (card.sticker !== null)
|
|
stickerSet = new sets.Set( card.sticker );
|
|
else
|
|
stickerSet = new sets.Set();
|
|
|
|
stickerSet.add(stickerId);
|
|
|
|
card.sticker = stickerSet.array();
|
|
|
|
redisClient.hset(REDIS_PREFIX + '-room:' + room + '-cards', cardId, JSON.stringify(card));
|
|
}
|
|
|
|
}
|
|
});
|
|
},
|
|
|
|
setBoardSize: function(room, size) {
|
|
redisClient.set(REDIS_PREFIX + '-room:' + room + '-size', JSON.stringify(size));
|
|
},
|
|
|
|
getBoardSize: function(room, callback) {
|
|
redisClient.get(REDIS_PREFIX + '-room:' + room + '-size', function (err, res) {
|
|
callback(JSON.parse(res));
|
|
});
|
|
}
|
|
|
|
};
|
|
exports.db = db;
|