const db = require('./connect'); const fecha = require('fecha'); // exports.create = (req, res) => { function prepareData(_obj) { const newObj = Object.assign({}, { 'tweet':JSON.stringify(_obj) }); newObj.ts = parseInt(_obj.timestamp_ms, 10); newObj.createdAt = fecha.parse(_obj.created_at, 'ddd MMM DD HH:mm:ss ZZ YYYY').getTime(); // Thu Apr 30 11:59:47 +0000 2020 newObj.id = _obj.id; newObj.idStr = _obj.id_str; newObj.userID = _obj.user.id; newObj.userIDStr = _obj.user.id_str; newObj.name = _obj.user.name; newObj.screenName = _obj.user.screen_name; return newObj; } exports.prepareData = prepareData; exports.getAll = (list) => { console.log('>> getAll:', list); const outgoing = []; // const sql = 'SELECT * FROM tweets order by _id desc limit 20'; const sql = `SELECT * FROM tweets where userID In ( ${list.join(',')} ) order by _id desc limit 20`; return new Promise((resolve, reject) => { db.all(sql, [], (err, rows) => { if (err) reject(err); rows.forEach((row) => { outgoing.push(row); }); resolve(outgoing) ; }); }); }; exports.getTopOne = (hash) => { const sql = 'SELECT * FROM tweets order by _id desc limit 1'; return new Promise((resolve, reject) => { db.get(sql, [hash], (err, row) => { if (err) reject(err); if (!err) resolve([row]); }); }); }; exports.getOne = (hash) => { const sql = 'SELECT * FROM menu WHERE hash = ?'; return new Promise((resolve, reject) => { db.get(sql, [hash], (err, row) => { if (err) reject(err); if (!err) resolve(row); }); }); }; exports.getOneShort = (short) => { const sql = 'SELECT * FROM menu WHERE short = ?'; return new Promise((resolve, reject) => { db.get(sql, [short], (err, row) => { if (err) reject(err); if (!err) resolve(row); }); }); }; exports.insertOne = (data) => { const sql = 'INSERT INTO tweets VALUES (?,?,?,?,?,?,?,?,?,?)'; const tweetObj = prepareData(data); return new Promise((resolve, reject) => { db.run(sql, [null, tweetObj.ts, tweetObj.createdAt, tweetObj.id, tweetObj.idStr, tweetObj.userID, tweetObj.userIDStr, tweetObj.name, tweetObj.screenName, tweetObj.tweet], function(err) { if (err) reject(err); resolve({ 'msg':'Row inserted', '_id': this.lastID }); }); }); }; exports.deleteOne = (hash) => { const sql = 'DELETE FROM menu WHERE hash=?'; return new Promise((resolve, reject) => { db.run('DELETE FROM menu WHERE hash=?', hash, function(err) { if (err) reject(err); resolve({ 'msg':'Row deleted', 'changes': this.changes }); }); }); }; exports.updateOne = (data) => { const oldHash = data.hash; const workObj = prepareData(data); const sql = `UPDATE menu SET name = ?, url = ?, md = ?, short = ?, hash = ?, meat = ?, mealtype = ?, lastused = ? WHERE hash = ?`; const newData = [workObj.name, workObj.url, workObj.md, workObj.short, workObj.hash, workObj.meat, workObj.mealtype, workObj.lastused, oldHash]; return new Promise((resolve, reject) => { db.run(sql, newData, function(err) { if (err) reject(err); resolve({ 'msg':'Row updated', 'changes': this.changes }); }); }); }; exports.getRandom = (timestamp) => { const sql = 'SELECT _id, short, hash, name, meat, mealtype FROM menu where mealtype =1 and lastused { db.all(sql, [sqlTimestamp], (err, rows) => { if (err) reject(err); if (!err) { const outgoing = [...rows]; resolve(outgoing) ; } }); }); }; exports.updateTimestamps = (newTimestamp, items) => { const sqlTimestamp = ~~(newTimestamp / 1000); console.log('>> items', items); const sql = 'UPDATE menu SET lastused = $lastused WHERE _id = $in'; return new Promise((resolve, reject) => { db.serialize(() => { const stmt = db.prepare(sql); items.forEach((item) => { console.log(item); const newData = { '$lastused':sqlTimestamp, '$in':item }; stmt.run(newData); }); stmt.finalize((err) => { if (err) reject(err); resolve({ 'msg':'Row updateds' }); }); }); }); };