var db = require('./db') var _ = require('lodash') var bucky = module.exports = { /* INDEX */ ensureLatestThreads: function (req, res, next){ db.getLatestThreads().then(function(threads){ res.threads = threads res.threads_ids = res.threads.pluck("id").sort() res.keywords = _.uniq(res.threads.pluck("keyword")) next() }) }, ensureCommentCountsForThreads: function (req, res, next){ db.getCommentCounts(res.threads_ids).then(function(counts){ var lookup = {} counts.forEach(function(c){ lookup[c.thread] = c }) res.threads.forEach(function(thread){ thread.set("comment_count", lookup[thread.id].count) }) next() }) }, ensureFileCountsForThreads: function (req, res, next){ db.getFileCounts(res.threads_ids).then(function(counts){ var lookup = {} counts.forEach(function(c){ lookup[c.thread] = c }) res.threads.forEach(function(t){ var c = lookup[t.id] t.set("file_count", c ? c.count : 0) }) next() }) }, ensureKeywordsForThreads: function (req, res, next){ db.getKeywords(res.keywords).then(function(keywords){ var lookup = {} keywords.forEach(function(k){ lookup[k.get('keyword')] = k }) res.threads.forEach(function(t){ var kw = t.get('keyword') if (! kw) return var k = lookup[kw] if (! k) return if (! t.get("color")) { t.set("color", k.get("color")) } }) next() }) }, ensureHootbox: function (req, res, next){ db.getCommentsForThread(1, 9, 0, "desc").then(function(hootbox){ res.hootbox = hootbox next() }) }, ensureLastlog: function (req, res, next){ db.getLastlog(6).then(function(lastlog){ res.lastlog = lastlog next() }) }, /* DETAILS */ ensureThread: function (req, res, next){ var id = req.params.id.replace(/\D/g, "") if (! id) { return res.sendStatus(404) } db.getThread(id).then(function(thread){ if (thread) { res.thread = thread next() } else { res.sendStatus(404) } }) }, ensureKeywordForThread: function (req, res, next){ var keyword = res.thread.get('keyword') if (! keyword) return next() db.getKeyword(keyword).then(function(keyword){ res.keyword = keyword next() }) }, ensureCommentsForThread: function (req, res, next){ db.getCommentsForThread(res.thread.get('id')).then(function(comments){ res.comments = comments next() }) }, ensureFilesForThread: function (req, res, next){ db.getFilesForThread(res.thread.get('id')).then(function(files){ res.files = files next() }) }, /* KEYWORDS */ ensureKeyword: function (req, res, next){ var keyword = req.params.keyword if (! keyword) { return res.sendStatus(404) } db.getKeyword(keyword).then(function(k){ if (! k) { return res.sendStatus(404) } res.keyword = k next() }) }, ensureThreadsForKeyword: function (req, res, next){ var keyword = req.params.keyword if (! keyword) { res.sendStatus(404) } db.getThreadsForKeyword(keyword).then(function(threads){ res.threads = threads res.threads_ids = res.threads.pluck("id").sort() res.keywords = _.uniq(res.threads.pluck("keyword")) next() }) }, /* MAIL */ ensureMailboxes: function (req, res, next){ var username = req.user.get('username') var box = req.params.box var mbox = username + "." + box if (! box) { res.sendStatus(404) } db.getMailboxes(username).then(function(boxes){ if (! boxes) { return res.sendStatus(404) } if (! boxes.models.some(function(box){ return box.get('mbox') == mbox })) { return res.sendStatus(404) } res.boxes = boxes next() }) }, ensureMailboxCounts: function (req, res, next){ db.getMailboxCounts(res.boxes.pluck("mbox")).then(function(counts){ var lookup = {} counts.forEach(function(c){ lookup[c.mbox] = c }) res.boxes.forEach(function(box){ var count = lookup[box.get('mbox')] ? lookup[box.get('mbox')].count : 0 box.set("count", count) }) next() }) }, ensureMessages: function (req, res, next){ db.getMessages(req.user.get('username'), req.params.box, 50, 0).then(function(messages){ res.messages = messages next() }) }, }