103 lines
3.3 KiB
JavaScript
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);
|
|
});
|
|
}
|
|
}; |