2015-03-20 14:21:44 -07:00

103 lines
3.3 KiB
JavaScript

var uuid = require('node-uuid');
var util = require('util');
var fs = require('fs');
var TableStore = module.exports = {
store : './localstore/tables.json',
entity : 'tables',
create : function(obj, cb){
var me = this;
me.persist({
id : obj.id || uuid.v1(),
tid : obj.tid,
smallBlind : obj.smallBlind,
bigBlind : obj.bigBlind,
minBuyIn : obj.minBuyIn,
maxBuyIn : obj.maxBuyIn,
minPlayers : obj.minPlayers,
maxPlayers : obj.maxPlayers,
gameMode : obj.gameMode,
board : obj.board,
creator : obj.creator,
players : obj.players || [],
actions : obj.actions || [],
gameWinners : obj.gameWinners || [],
created : Date.now()
}, function(e, table){
if(e){
cb(e);
}else{
// console.log('TableStore: table created - ', table);
cb(null, table);
}
});
},
set : function(obj, cb){
var me = this;
me.persist(obj, function(e, table){
if(e){
cb(e);
}else{
// console.log('TableStore: table modified - ', table);
cb(null, table);
}
});
},
getByAttr : function(key, val, cb){
var matches = [], matched;
this.retrieve(function(e, entities){
if(e){
return cb(e);
}
if(key == '*' && val == '*'){
cb(null, entities);
}else{
for(var entity in entities){
if(util.isArray(key)){
matched = true;
for(var i=key.length;i--;){
if(entities[entity][key[i]] != val[i]){
matched = false;
}
}
if(matched){
matches.push(entities[entity]);
}
}else if(entities[entity][key] == val){
matches.push(entities[entity]);
}
}
cb(null, matches.length == 0 ? null : (matches.length == 1 ? matches[0] : matches));
}
});
},
persist : function(row, cb){
var me = this;
me.retrieve(function(e, entities){
entities[row.id] = entities[row.id] || {};
for(var key in row){
entities[row.id][key] = row[key];
}
fs.writeFile(me.store, JSON.stringify(entities, undefined, 4), function(e2){
if(e2){
return cb('error writing file: ' + e2);
}else{
cb(null, entities[row.id]);
}
});
});
},
retrieve : function(cb){
fs.readFile(this.store, 'utf8', function(e, content){
if(e){
return cb('error loading file: ' + e);
}
if(content.trim().length == 0){
content = {};
}else{
content = JSON.parse(content);
}
cb(null, content);
});
}
};