Loading comments/app.js +7 −0 Original line number Diff line number Diff line Loading @@ -168,5 +168,12 @@ app.get('/auth/:sdk/:version/subscriptions', function(req, res) { }); }); // Subscibe / unsubscribe to a comment thread app.post('/auth/:sdk/:version/subscribe', validator.isLoggedIn, function(req, res) { new Request(req).changeSubscription(req.body.target, req.body.subscribed === 'true', function() { res.send({ success: true }); }); }); app.listen(config.port); console.log("Server started at port "+config.port+"..."); comments/request.js +25 −11 Original line number Diff line number Diff line Loading @@ -68,17 +68,6 @@ Request.prototype = { }); }, getSubscriptions: function(callback) { if (!this.isLoggedIn()) { callback([]); return; } this.db.subscriptions().findTargetsByUser(this.getUserId(), function(err, targets) { callback(targets.map(ApiAdapter.targetToJson)); }); }, updateComment: function(comment_id, content, callback) { var update = { id: comment_id, Loading Loading @@ -106,6 +95,31 @@ Request.prototype = { }); }, getSubscriptions: function(callback) { if (!this.isLoggedIn()) { callback([]); return; } this.db.subscriptions().findTargetsByUser(this.getUserId(), function(err, targets) { callback(targets.map(ApiAdapter.targetToJson)); }); }, changeSubscription: function(target, subscribe, callback) { var sub = { user_id: this.getUserId(), target: ApiAdapter.targetFromJson(JSON.parse(target)) }; if (subscribe) { this.db.subscriptions().add(sub, callback); } else { this.db.subscriptions().remove(sub, callback); } }, getUser: function(callback) { callback(this.req.session && this.req.session.user); }, Loading comments/subscriptions.js +41 −0 Original line number Diff line number Diff line var Targets = require("./targets"); /** * Represents a Subscriptions table. * Loading @@ -10,6 +12,7 @@ function Subscriptions(db, domain) { this.db = db; this.domain = domain; this.targets = new Targets(db, domain); } Subscriptions.prototype = { Loading Loading @@ -47,6 +50,44 @@ Subscriptions.prototype = { ]; this.db.query(sql, [target_id], callback); }, /** * Adds new subscription. * @param {Object} subscription * @param {Number} subscription.user_id * @param {Object} subscription.target * @param {Function} callback * @param {Error} callback.err The error object. * @param {Number} callback.subscriptionId ID of the new subscription. */ add: function(subscription, callback) { // First remove any existing subscriptions, then continue with // adding the new one. this.remove(subscription, function(err) { this.targets.ensure(subscription.target, function(err, target_id) { this.db.insert("subscriptions", { user_id: subscription.user_id, target_id: target_id, created_at: new Date() }, callback); }.bind(this)); }.bind(this)); }, /** * Removes an existing subscription. * @param {Object} subscription * @param {Number} subscription.user_id * @param {Object} subscription.target * @param {Function} callback * @param {Error} callback.err The error object. */ remove: function(subscription, callback) { this.targets.ensure(subscription.target, function(err, target_id) { var sql = "DELETE FROM subscriptions WHERE user_id = ? AND target_id = ?"; this.db.query(sql, [subscription.user_id, target_id], callback); }.bind(this)); } }; Loading comments/subscriptions.spec.js +35 −0 Original line number Diff line number Diff line Loading @@ -64,4 +64,39 @@ describe("Subscriptions", function() { }); }); it("#add adds new subscription", function(done) { subscriptions.add({user_id: 1, target: {type: "guide", cls: "testing", member: ""}}, function(err, id) { subscriptions.findTargetsByUser(1, function(err, subs) { expect(subs.length).toEqual(3); done(); }); }); }); it("#add does nothing when subscription already exists", function(done) { subscriptions.add({user_id: 1, target: {type: "guide", cls: "testing", member: ""}}, function(err, id) { subscriptions.findTargetsByUser(1, function(err, subs) { expect(subs.length).toEqual(3); done(); }); }); }); it("#remove removes existing subscription", function(done) { subscriptions.remove({user_id: 1, target: {type: "guide", cls: "testing", member: ""}}, function(err, id) { subscriptions.findTargetsByUser(1, function(err, subs) { expect(subs.length).toEqual(2); done(); }); }); }); it("#remove does nothing when subscription doesn't exist", function(done) { subscriptions.remove({user_id: 1, target: {type: "guide", cls: "testing", member: ""}}, function(err, id) { subscriptions.findTargetsByUser(1, function(err, subs) { expect(subs.length).toEqual(2); done(); }); }); }); }); Loading
comments/app.js +7 −0 Original line number Diff line number Diff line Loading @@ -168,5 +168,12 @@ app.get('/auth/:sdk/:version/subscriptions', function(req, res) { }); }); // Subscibe / unsubscribe to a comment thread app.post('/auth/:sdk/:version/subscribe', validator.isLoggedIn, function(req, res) { new Request(req).changeSubscription(req.body.target, req.body.subscribed === 'true', function() { res.send({ success: true }); }); }); app.listen(config.port); console.log("Server started at port "+config.port+"...");
comments/request.js +25 −11 Original line number Diff line number Diff line Loading @@ -68,17 +68,6 @@ Request.prototype = { }); }, getSubscriptions: function(callback) { if (!this.isLoggedIn()) { callback([]); return; } this.db.subscriptions().findTargetsByUser(this.getUserId(), function(err, targets) { callback(targets.map(ApiAdapter.targetToJson)); }); }, updateComment: function(comment_id, content, callback) { var update = { id: comment_id, Loading Loading @@ -106,6 +95,31 @@ Request.prototype = { }); }, getSubscriptions: function(callback) { if (!this.isLoggedIn()) { callback([]); return; } this.db.subscriptions().findTargetsByUser(this.getUserId(), function(err, targets) { callback(targets.map(ApiAdapter.targetToJson)); }); }, changeSubscription: function(target, subscribe, callback) { var sub = { user_id: this.getUserId(), target: ApiAdapter.targetFromJson(JSON.parse(target)) }; if (subscribe) { this.db.subscriptions().add(sub, callback); } else { this.db.subscriptions().remove(sub, callback); } }, getUser: function(callback) { callback(this.req.session && this.req.session.user); }, Loading
comments/subscriptions.js +41 −0 Original line number Diff line number Diff line var Targets = require("./targets"); /** * Represents a Subscriptions table. * Loading @@ -10,6 +12,7 @@ function Subscriptions(db, domain) { this.db = db; this.domain = domain; this.targets = new Targets(db, domain); } Subscriptions.prototype = { Loading Loading @@ -47,6 +50,44 @@ Subscriptions.prototype = { ]; this.db.query(sql, [target_id], callback); }, /** * Adds new subscription. * @param {Object} subscription * @param {Number} subscription.user_id * @param {Object} subscription.target * @param {Function} callback * @param {Error} callback.err The error object. * @param {Number} callback.subscriptionId ID of the new subscription. */ add: function(subscription, callback) { // First remove any existing subscriptions, then continue with // adding the new one. this.remove(subscription, function(err) { this.targets.ensure(subscription.target, function(err, target_id) { this.db.insert("subscriptions", { user_id: subscription.user_id, target_id: target_id, created_at: new Date() }, callback); }.bind(this)); }.bind(this)); }, /** * Removes an existing subscription. * @param {Object} subscription * @param {Number} subscription.user_id * @param {Object} subscription.target * @param {Function} callback * @param {Error} callback.err The error object. */ remove: function(subscription, callback) { this.targets.ensure(subscription.target, function(err, target_id) { var sql = "DELETE FROM subscriptions WHERE user_id = ? AND target_id = ?"; this.db.query(sql, [subscription.user_id, target_id], callback); }.bind(this)); } }; Loading
comments/subscriptions.spec.js +35 −0 Original line number Diff line number Diff line Loading @@ -64,4 +64,39 @@ describe("Subscriptions", function() { }); }); it("#add adds new subscription", function(done) { subscriptions.add({user_id: 1, target: {type: "guide", cls: "testing", member: ""}}, function(err, id) { subscriptions.findTargetsByUser(1, function(err, subs) { expect(subs.length).toEqual(3); done(); }); }); }); it("#add does nothing when subscription already exists", function(done) { subscriptions.add({user_id: 1, target: {type: "guide", cls: "testing", member: ""}}, function(err, id) { subscriptions.findTargetsByUser(1, function(err, subs) { expect(subs.length).toEqual(3); done(); }); }); }); it("#remove removes existing subscription", function(done) { subscriptions.remove({user_id: 1, target: {type: "guide", cls: "testing", member: ""}}, function(err, id) { subscriptions.findTargetsByUser(1, function(err, subs) { expect(subs.length).toEqual(2); done(); }); }); }); it("#remove does nothing when subscription doesn't exist", function(done) { subscriptions.remove({user_id: 1, target: {type: "guide", cls: "testing", member: ""}}, function(err, id) { subscriptions.findTargetsByUser(1, function(err, subs) { expect(subs.length).toEqual(2); done(); }); }); }); });