Advertisement
Guest User

/models/url.model.js

a guest
May 27th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const load = require(`${__base}load`);
  2.  
  3. module.exports = db => {
  4.   const dbHelper = load.helper(`db`)(db);
  5.  
  6.   return {
  7.     byId: (id) => {
  8.        return db.query(`SELECT u.*, s.domain AS s_domain
  9.                       FROM urls u
  10.                       LEFT JOIN sites s ON s.id = u.site_id
  11.                       WHERE u.id = ?`, [id])
  12.               .then(res => {
  13.                 return res.length ? res[0] : null;
  14.               });
  15.     },
  16.  
  17.  
  18.     byUnique: (key, value) => {
  19.       key = key.match(/\./) ? key : ('u.' + key);
  20.  
  21.       return db.query(`SELECT u.*, s.domain AS s_domain
  22.                     FROM urls u
  23.                     LEFT JOIN sites s ON s.id = u.site_id
  24.                     WHERE ${key} = ?`, [value])
  25.             .then(res => {
  26.               return res.length ? res[0] : null;
  27.             });
  28.     },
  29.  
  30.  
  31.     unparsed: function(options) {
  32.       options = options || {};
  33.       options.limit = options.limit || 200;
  34.       options.site_id = options.site_id || null;
  35.  
  36.       var query = `SELECT u.*, s.domain AS s_domain
  37.                     FROM urls u
  38.                     LEFT JOIN sites s ON s.id = u.site_id
  39.                     WHERE u.parsed_at IS NULL AND u.attempts != 2
  40.                     ORDER BY RAND()`;
  41.       var params = [];
  42.  
  43.       if (options.site_id) {
  44.         query += ' AND u.site_id = ?';
  45.         params.push(options.site_id);
  46.       }
  47.       if (options.limit) {
  48.         query += ' LIMIT ?';
  49.         params.push(options.limit);
  50.       }
  51.  
  52.       return db.query(query, params);
  53.     },
  54.  
  55.  
  56.     create: (data) => {
  57.       var now = new Date();
  58.  
  59.       data.site_id = data.site_id || null;
  60.       data.url = data.url || null;
  61.       data.title = data.title || null;
  62.       data.description = data.description || null;
  63.       data.image = data.image || null;
  64.       data.text = data.text || null;
  65.       data.created_at = data.created_at || now;
  66.       data.parsed_at = data.parsed_at || null;
  67.       data.published_at = data.published_at || null;
  68.       data.updated_at = data.updated_at || now;
  69.       data.is_deleted = Number(!!data.is_deleted);
  70.  
  71.       return dbHelper.insert('urls', data);
  72.     },
  73.  
  74.  
  75.     findOrCreate: function(data) {
  76.       return this.byUnique('url', data.url)
  77.         .then(res => {
  78.           if (res) {
  79.             return Object.assign(res, {is_new: false});
  80.           }
  81.  
  82.           return this.create(data)
  83.             .then(ins => {
  84.               return this.byId(ins.insertId)
  85.                 .then(res => Object.assign(res, {is_new: true}));
  86.             });
  87.         });
  88.     },
  89.  
  90.  
  91.     update: function(id, data) {
  92.        return dbHelper.update('urls', ['id =', id], data)
  93.           .then(() => {
  94.             return this.byId(id);
  95.           });
  96.     }
  97.   };
  98. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement