pinclub/pinclub

View on GitHub
proxy/node.js

Summary

Maintainability
B
5 hrs
Test Coverage
var EventProxy = require('eventproxy');
var models = require('../models');
var Node = models.Node;
var User = require('./user');
var Topic = require('./topic');
var _ = require('lodash');
var config       = require('../config');
var tools = require('../common/tools');


/**
 * 根据ID获取节点信息
 * Callback:
 * - err, 数据库错误
 * - node, 节点
 * - creator, 创建者
 * @param {String} id Node ID
 * @param {Function} callback 回调函数
 */
exports.getNodeById = function (id, callback) {

};

/**
 * 获取关键词能搜索到的节点数量
 * Callback:
 * - err, 数据库错误
 * - count, 节点数量
 * @param {String} query 搜索关键词
 * @param {Function} callback 回调函数
 */
exports.getCountByQuery = function (query, callback) {
    Node.count(query, callback);
};

/**
 * 根据关键词,获取节点 (Node) 列表
 * Callback:
 * - err, 数据库错误
 * - nodes, Node 列表
 * @param {String} query 搜索关键词
 * @param {Object} opt 搜索选项
 * @param {Function} callback 回调函数
 */
exports.getNodesByQuery = function (query, opt, callback) {
    Node.find(query, {}, opt).lean()
        .populate('creator')
        .populate('parent')
        .populate('subs')
        .exec(function (err, nodes) {
            if (err) {
                return callback(err);
            }
            if (nodes.length === 0) {
                return callback(null, []);
            }
            _.forEach(nodes, function (node) {
                node.create_at_ago = tools.formatDate(node.create_at, true);
                node.update_at_ago = tools.formatDate(node.update_at, true);
            });

            nodes = _.compact(nodes); // 删除不合规的 topic
            return callback(null, nodes);

        });
};

/**
 * 获取节点信息
 * Callback:
 * - err, 数据库异常
 * - message, 消息
 * - node, 节点
 * @param {String} id 主题ID
 * @param {Function} callback 回调函数
 */
exports.getFullNode = function (id, callback) {
    var proxy = new EventProxy();
    var events = ['node'];
    proxy
        .assign(events, function (node) {
            callback(null, '', node);
        })
        .fail(callback);

    Node.findOne({_id: id}).lean()
        .populate('creator')
        .populate('parent')
        .exec(proxy.done(function (node) {
            if (!node) {
                proxy.unbind();
                return callback(null, '此节点不存在或已被删除。');
            }
            node.create_at_ago = tools.formatDate(node.create_at, true);
            node.update_at_ago = tools.formatDate(node.update_at, true);
            proxy.emit('node', node);
        }));
};

/**
 * 根据Node ID,查找
 * @param {String} id Node ID
 * @param {Function} callback 回调函数
 */
exports.getNode = function (id, callback) {
    Node.findOne({_id: id}, callback);
};

exports.newAndSave = function (nodeObj, callback) {
    var node = new Node(nodeObj);
    node.save(callback);
};