summaryrefslogtreecommitdiff
path: root/bucky/app/bucky.js
diff options
context:
space:
mode:
Diffstat (limited to 'bucky/app/bucky.js')
-rw-r--r--bucky/app/bucky.js211
1 files changed, 211 insertions, 0 deletions
diff --git a/bucky/app/bucky.js b/bucky/app/bucky.js
new file mode 100644
index 0000000..757592a
--- /dev/null
+++ b/bucky/app/bucky.js
@@ -0,0 +1,211 @@
+var db = require('../db')
+var util = require('../util/util')
+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){
+ if (lookup[thread.id]) {
+ 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, 15, 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()
+ })
+ },
+
+ /* COMMENTS */
+
+ createComment: function (req, res, next){
+ if (! req.body.comment || ! req.body.comment.length) {
+ res.json({ error: "no comment" })
+ return
+ }
+ var data = {
+ thread: res.thread.get('id'),
+ parent_id: req.body.parent_id || -1,
+ username: req.user.get('username'),
+ date: util.now(),
+ comment: req.body.comment,
+ }
+ db.createComment(data).then(function(comment){
+ res.comment = comment
+ 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()
+ })
+ },
+ ensureMessage: function(req, res, next){
+ db.getMessage(req.params.id).then(function(message){
+ var username = req.user.get('username')
+ if (username !== message.get('recipient') && username !== message.get('sender')) {
+ res.sendStatus(404)
+ return
+ }
+ res.message = message
+ next()
+ })
+ }
+} \ No newline at end of file