Commit e11cfa47 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Extract ApiAdapter class from Comments.

It's responsibility is to convert between DB structures and the JSON
objects that out HTTP API expects.
parent 5d4c06a9
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
var crypto = require('crypto');

/**
 * @class ApiAdapter
 * Provides methods to convert between old JSON API and how things are
 * named in our MySQL database.
 */
module.exports = {
    /**
     * Turns comment row into JSON response.
     */
    commentToJson: function(comment) {
        return {
            author: comment.username,
            contentHtml: comment.content_html,
            createdAt: String(comment.created_at),
            score: comment.vote,
            moderator: comment.moderator,
            emailHash: crypto.createHash('md5').update(comment.email).digest("hex")
        };
    },

    /**
     * Turns target array in JSON into {type,cls,member} object.
     */
    targetFromJson: function(target) {
        return {
            type: target[0],
            cls: target[1],
            member: target[2] || ""
        };
    }
};
 No newline at end of file
+4 −20
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@ var config = require('./config');
var express = require('express');
var MySQLStore = require('connect-mysql-session')(express);
var services = require('./services');
var crypto = require('crypto');
var ApiAdapter = require('./api_adapter');

var app = express();

@@ -79,25 +79,9 @@ app.get('/auth/:sdk/:version/comments', services.comments, function(req, res) {
        return;
    }

    function formatComment(comment) {
        return {
            author: comment.username,
            contentHtml: comment.content_html,
            createdAt: String(comment.created_at),
            score: comment.vote,
            moderator: comment.moderator,
            emailHash: crypto.createHash('md5').update(comment.email).digest("hex")
        };
    }

    var target = JSON.parse(req.query.startkey);
    var query = {
        type: target[0],
        cls: target[1],
        member: target[2] || ""
    };
    req.comments.find(query, function(err, comments) {
        res.json(comments.map(formatComment));
    var target = ApiAdapter.targetFromJson(JSON.parse(req.query.startkey));
    req.comments.find(target, function(err, comments) {
        res.json(comments.map(ApiAdapter.commentToJson));
    });
});