Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const load = require(`${__base}load`);
- module.exports = db => {
- const dbHelper = load.helper(`db`)(db);
- return {
- byId: (id) => {
- return db.query(`SELECT u.*, s.domain AS s_domain
- FROM urls u
- LEFT JOIN sites s ON s.id = u.site_id
- WHERE u.id = ?`, [id])
- .then(res => {
- return res.length ? res[0] : null;
- });
- },
- byUnique: (key, value) => {
- key = key.match(/\./) ? key : ('u.' + key);
- return db.query(`SELECT u.*, s.domain AS s_domain
- FROM urls u
- LEFT JOIN sites s ON s.id = u.site_id
- WHERE ${key} = ?`, [value])
- .then(res => {
- return res.length ? res[0] : null;
- });
- },
- unparsed: function(options) {
- options = options || {};
- options.limit = options.limit || 200;
- options.site_id = options.site_id || null;
- var query = `SELECT u.*, s.domain AS s_domain
- FROM urls u
- LEFT JOIN sites s ON s.id = u.site_id
- WHERE u.parsed_at IS NULL AND u.attempts != 2
- ORDER BY RAND()`;
- var params = [];
- if (options.site_id) {
- query += ' AND u.site_id = ?';
- params.push(options.site_id);
- }
- if (options.limit) {
- query += ' LIMIT ?';
- params.push(options.limit);
- }
- return db.query(query, params);
- },
- create: (data) => {
- var now = new Date();
- data.site_id = data.site_id || null;
- data.url = data.url || null;
- data.title = data.title || null;
- data.description = data.description || null;
- data.image = data.image || null;
- data.text = data.text || null;
- data.created_at = data.created_at || now;
- data.parsed_at = data.parsed_at || null;
- data.published_at = data.published_at || null;
- data.updated_at = data.updated_at || now;
- data.is_deleted = Number(!!data.is_deleted);
- return dbHelper.insert('urls', data);
- },
- findOrCreate: function(data) {
- return this.byUnique('url', data.url)
- .then(res => {
- if (res) {
- return Object.assign(res, {is_new: false});
- }
- return this.create(data)
- .then(ins => {
- return this.byId(ins.insertId)
- .then(res => Object.assign(res, {is_new: true}));
- });
- });
- },
- update: function(id, data) {
- return dbHelper.update('urls', ['id =', id], data)
- .then(() => {
- return this.byId(id);
- });
- }
- };
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement