'use strict'; var async = require('async'); var _ = require('underscore'); var validator = require('validator'); var db = require('../database'); var user = require('../user'); var favourites = require('../favourites'); var posts = require('../posts'); var meta = require('../meta'); module.exports = function(Topics) { Topics.onNewPostMade = function(postData, callback) { async.series([ function(next) { Topics.increasePostCount(postData.tid, next); }, function(next) { Topics.updateTimestamp(postData.tid, postData.timestamp, next); }, function(next) { Topics.addPostToTopic(postData.tid, postData, next); } ], callback); }; Topics.getTopicPosts = function(tid, set, start, stop, uid, reverse, callback) { callback = callback || function() {}; async.parallel({ posts: function(next) { posts.getPostsFromSet(set, start, stop, uid, reverse, next); }, postCount: function(next) { Topics.getTopicField(tid, 'postcount', next); } }, function(err, results) { if (err) { return callback(err); } Topics.calculatePostIndices(results.posts, start, stop, results.postCount, reverse); Topics.addPostData(results.posts, uid, callback); }); }; Topics.addPostData = function(postData, uid, callback) { if (!Array.isArray(postData) || !postData.length) { return callback(null, []); } var pids = postData.map(function(post) { return post && post.pid; }); if (!Array.isArray(pids) || !pids.length) { return callback(null, []); } async.parallel({ favourites: function(next) { favourites.getFavouritesByPostIDs(pids, uid, next); }, voteData: function(next) { favourites.getVoteStatusByPostIDs(pids, uid, next); }, userData: function(next) { var uids = []; for(var i=0; i