var exports = module.exports; //var {Database} = require('sqlite3'); //var sqldb = new Database(_data+'/data.db'); var {Client} = require('cassandra-driver'); const cass = new Client({ cloud: {secureConnectBundle:'secure-connect-todo.zip'}, credentials: { username:'', password:'' }, }); async function startcass() { await cass.connect(); cass.execute('use todo'); } startcass(); (()=>{ var rankCache = new Map(); var rankReadTimeouts = new Map(); var rankWriteTimeouts = new Map(); var rankReadBounce = 1000*60*5; var rankWriteBounce = 1000*15; function rawgetrank(user,cb) { cass.execute('Select json from rank where user=?',[user]).then(result=>{ if(!result || !result.rows || !result.rows.length) return cb(null,{}); cb(null,JSON.parse(result.rows[0].json)); }).catch(cb); } function updaterankreadtimeout(user) { if(rankReadTimeouts.has(user)) clearTimeout(rankReadTimeouts.get(user)); rankReadTimeouts.set(user,setTimeout(()=>rankCache.delete(user),rankReadBounce)); } function getrank(user,cb) { updaterankreadtimeout(user); if(rankCache.has(user)) return cb(null,rankCache.get(user)); rawgetrank(user,(err,obj)=>{ if(err) return cb(err); rankCache.set(user,obj); return cb(null,obj); }); } function rawwriterank(user,obj) { cass.execute('Insert into rank (user,json) values (?,?)',[user,JSON.stringify(obj)]); } function writerank(user,obj) { if(rankWriteTimeouts.has(user)) clearTimeout(rankWriteTimeouts.get(user)); rankWriteTimeouts.set(user,setTimeout(()=>rawwriterank(user,obj),rankWriteBounce)); } exports.getrank=getrank; exports.writerank=writerank; })(); (()=>{ function rawgettitle(user,id,cb) { cass.execute('Select title from titles where user=? and id=?',[user,id]).then(result=>{ if(!result || !result.rows || !result.rows.length) return cb('title not found'); cb(null,result.rows[0]); }).catch(cb); } function rawwritetitle(user,id,title) { cass.execute('Insert into titles (user,id,title) values (?,?,?)',[user.id,title]); } exports.gettitle=rawgettitle; exports.writetitle=rawwritetitle; })(); (()=>{ function rawgetday(user,day,cb) { cass.execute('Select json from day where user=? and day=?',[user,day]).then(result=>{ if(!result || !result.rows || !result.rows.length) return cb(null,[]); cb(null,JSON.parse(result.rows[0].json)); }).catch(cb); } function rawwriteday(user,day,list) { cass.execute('Insert into day (user,day,json) values (?,?,?)',[user,day,JSON.stringify(list)]); } exports.getday=rawgetday; exports.writeday=rawwriteday; })(); (()=>{ function rawaddlog(user,title,id) { cass.execute('Insert into addjournal (user,time,title,id) values (?,?,?,?)',[user,Date.now(),title,id]); } exports.addlogwrite=rawaddlog; })();