Loading comments/comments.js +3 −30 Original line number Diff line number Diff line var Targets = require("./targets"); module.exports = (function(){ /** Loading @@ -15,6 +16,7 @@ module.exports = (function(){ function Comments(db, domain) { this.db = db; this.domain = domain; this.targets = new Targets(db, domain); } Comments.prototype = { Loading Loading @@ -153,7 +155,7 @@ module.exports = (function(){ * @param {Function} callback.id The ID of newly inserted comment. */ add: function(comment, callback) { this.ensureTarget(comment, function(target_id) { this.targets.ensure(comment, function(target_id) { this.db.insert('comments', { target_id: target_id, user_id: comment.user_id, Loading Loading @@ -188,35 +190,6 @@ module.exports = (function(){ created_at: new Date() }, callback); }.bind(this)); }, ensureTarget: function(target, callback) { this.getTarget(target, function(targetFound) { if (targetFound) { callback(targetFound.id); } else { this.addTarget(target, callback); } }.bind(this)); }, getTarget: function(target, callback) { var sql = [ 'SELECT * FROM targets', 'WHERE domain = ? AND type = ? AND cls = ? AND member = ?' ]; var params = [this.domain, target.type, target.cls, target.member]; this.db.queryOne(sql, params, callback); }, addTarget: function(target, callback) { this.db.insert("targets", { domain: this.domain, type: target.type, cls: target.cls, member: target.member }, callback); } }; Loading comments/targets.js 0 → 100644 +56 −0 Original line number Diff line number Diff line /** * Represents a Targets table. * * @constructor * Initializes Targets with a database connection and a target domain. * * @param {DbFacade} db Instance of DbFacade. * @param {String} domain The comments domain within which to work. */ function Targets(db, domain) { this.db = db; this.domain = domain; } Targets.prototype = { /** * Ensures that a target exists, then calls the callback with * target ID. * @param {Object} target A target object: * @param {String} target.type * @param {String} target.cls * @param {String} target.member * @param {Function} callback * @param {Number} callback.id The ID of the target */ ensure: function(target, callback) { this.get(target, function(targetFound) { if (targetFound) { callback(targetFound.id); } else { this.add(target, callback); } }.bind(this)); }, get: function(target, callback) { var sql = [ 'SELECT * FROM targets', 'WHERE domain = ? AND type = ? AND cls = ? AND member = ?' ]; var params = [this.domain, target.type, target.cls, target.member]; this.db.queryOne(sql, params, callback); }, add: function(target, callback) { this.db.insert("targets", { domain: this.domain, type: target.type, cls: target.cls, member: target.member }, callback); } }; module.exports = Targets; Loading
comments/comments.js +3 −30 Original line number Diff line number Diff line var Targets = require("./targets"); module.exports = (function(){ /** Loading @@ -15,6 +16,7 @@ module.exports = (function(){ function Comments(db, domain) { this.db = db; this.domain = domain; this.targets = new Targets(db, domain); } Comments.prototype = { Loading Loading @@ -153,7 +155,7 @@ module.exports = (function(){ * @param {Function} callback.id The ID of newly inserted comment. */ add: function(comment, callback) { this.ensureTarget(comment, function(target_id) { this.targets.ensure(comment, function(target_id) { this.db.insert('comments', { target_id: target_id, user_id: comment.user_id, Loading Loading @@ -188,35 +190,6 @@ module.exports = (function(){ created_at: new Date() }, callback); }.bind(this)); }, ensureTarget: function(target, callback) { this.getTarget(target, function(targetFound) { if (targetFound) { callback(targetFound.id); } else { this.addTarget(target, callback); } }.bind(this)); }, getTarget: function(target, callback) { var sql = [ 'SELECT * FROM targets', 'WHERE domain = ? AND type = ? AND cls = ? AND member = ?' ]; var params = [this.domain, target.type, target.cls, target.member]; this.db.queryOne(sql, params, callback); }, addTarget: function(target, callback) { this.db.insert("targets", { domain: this.domain, type: target.type, cls: target.cls, member: target.member }, callback); } }; Loading
comments/targets.js 0 → 100644 +56 −0 Original line number Diff line number Diff line /** * Represents a Targets table. * * @constructor * Initializes Targets with a database connection and a target domain. * * @param {DbFacade} db Instance of DbFacade. * @param {String} domain The comments domain within which to work. */ function Targets(db, domain) { this.db = db; this.domain = domain; } Targets.prototype = { /** * Ensures that a target exists, then calls the callback with * target ID. * @param {Object} target A target object: * @param {String} target.type * @param {String} target.cls * @param {String} target.member * @param {Function} callback * @param {Number} callback.id The ID of the target */ ensure: function(target, callback) { this.get(target, function(targetFound) { if (targetFound) { callback(targetFound.id); } else { this.add(target, callback); } }.bind(this)); }, get: function(target, callback) { var sql = [ 'SELECT * FROM targets', 'WHERE domain = ? AND type = ? AND cls = ? AND member = ?' ]; var params = [this.domain, target.type, target.cls, target.member]; this.db.queryOne(sql, params, callback); }, add: function(target, callback) { this.db.insert("targets", { domain: this.domain, type: target.type, cls: target.cls, member: target.member }, callback); } }; module.exports = Targets;