var uuid = require('node-uuid'); var pick = require('lodash/pick'); var connector = require('./db/connector'); var reports = 'remotedev_reports'; var knex; var baseFields = ['id', 'title', 'added']; function error(msg) { return new Promise(function(resolve, reject) { return resolve({ error: msg }); }); } function list(query, fields) { var r = knex.select(fields || baseFields).from(reports); if (query) return r.where(query); return r; } function get(id) { if (!id) return error('No id specified.'); return knex(reports).where('id', id); } function add(data) { if (!data.type || !data.payload) { return error('Required parameters aren\'t specified.'); } if (data.type !== 'ACTIONS' && data.type !== 'STATE') { return error('Type ' + data.type + ' is not supported yet.'); } var obj = { id: uuid.v4(), type: data.type, title: data.title || data.exception && data.exception.message || data.action, description: data.description, action: data.action, payload: data.payload, preloadedState: data.preloadedState, screenshot: data.screenshot, version: data.version, appId: data.appId, userAgent: data.userAgent, user: data.user, userId: typeof data.user === 'object' ? data.user.id : data.user, meta: data.meta, exception: data.exception }; return knex.insert(obj).into(reports) .then(function (){ return byBaseFields(obj); }) } function byBaseFields(data) { return pick(data, baseFields); } function createStore(options) { knex = connector(options); return { list: list, get: get, add: add }; } module.exports = createStore;