var db = module.exports var connection = require("./bookshelf") var bookshelf = connection.bookshelf var knex = connection.knex /* MODELS */ var User = db.User = bookshelf.Model.extend({ tableName: 'users', hasTimestamps: false, }) var Thread = db.Thread = bookshelf.Model.extend({ tableName: 'threads', hasTimestamps: false, }) var Comment = db.Comment = bookshelf.Model.extend({ tableName: 'comments', hasTimestamps: false, }) var File = db.File = bookshelf.Model.extend({ tableName: 'files', hasTimestamps: false, }) var Keyword = db.Keyword = bookshelf.Model.extend({ tableName: 'keywords', hasTimestamps: false, }) var Mailbox = db.Mailbox = bookshelf.Model.extend({ tableName: 'boxes', hasTimestamps: false, }) var Message = db.Message = bookshelf.Model.extend({ tableName: 'messages', hasTimestamps: false, }) /* USERS */ db.createUser = function(data){ return new db.User(data).save() } db.getUsers = function () { return User.query(function(qb){ qb.orderBy("id", "desc") }).fetchAll() } db.getUser = function(id) { var model = new User({'id': id}) return model.fetch() } db.getUserByUsername = function(username) { var model = new User({'username': username}) return model.fetch() } db.getLastlog = function(limit){ return knex.column('username').column('lastseen').select().from('users').orderBy('lastseen', 'desc').limit(limit || 10) } /* THREADS */ db.getLatestThreads = function () { return Thread.query(function(qb){ qb.orderBy("lastmodified", "desc").limit(50) }).fetchAll() } db.getThreadsForKeyword = function (keyword) { return Thread.query(function(qb){ qb.where("keyword", "=", keyword).orderBy("id", "desc") }).fetchAll() } db.getThread = function (id) { return Thread.query("where", "id", "=", id).fetch() } db.getThreadsById = function(ids){ return Thread.where("id", "in", ids).fetchAll() } db.createThread = function(data){ return new db.Thread(data).save() } db.updateThread = function(data){ } db.removeThread = function(id){ } /* FILES */ db.getFilesForThread = function (id){ return File.query("where", "thread", "=", id).fetchAll() } db.getFileCounts = function(ids){ return knex.column('thread').count('* as count').select().from('files').where('thread', 'in', ids).groupBy('thread') } db.getFileSizes = function(ids){ return knex.column('thread').sum('size as size').select().from('files').where('thread', 'in', ids).groupBy('thread') } db.getFilesById = function(ids){ return File.where("id", "in", ids).fetchAll() } db.createFile = function(data){ return new db.File(data).save() } db.removeFile = function(id){ } /* COMMENTS */ db.getCommentsForThread = function (id, limit, offset, order){ order = order || "asc" return Comment.query(function(qb){ qb.where("thread", "=", id).orderBy("id", order) if (limit) { qb.limit(limit) } if (offset) { qb.offset(offset) } }).fetchAll().then(function(comments){ comments.forEach(function(comment){ comment.set("comment", comment.get("comment").toString() ) }) return comments }) } db.getCommentsById = function(ids){ return Comment.where("id", "in", ids).fetchAll() } db.getCommentCounts = function(ids){ return knex.column('thread').count('* as count').select().from('comments').where('thread', 'in', ids).groupBy('thread') } db.createComment = function(data){ return new db.Comment(data).save() } db.updateComment = function(data){ } db.removeComment = function(id){ } /* KEYWORDS */ db.getKeywords = function (keywords){ if (keywords) { return Keyword.query("where", "keyword", "in", keywords).fetchAll() } return Keyword.fetchAll() } db.getKeyword = function (keyword) { return Keyword.query("where", "keyword", "=", keyword).fetch() } db.createKeyword = function(data){ return new db.Keyword(data).save() } db.updateKeyword = function(data){ } db.removeKeyword = function(id){ } /* MAILBOXES */ db.getMailboxes = function(username){ return Mailbox.query("where", "owner", "=", username).fetchAll() } db.getMailboxCounts = function(boxes){ return knex.column('mbox').count('* as count').select().from('messages').where('mbox', 'in', boxes).groupBy('mbox') } db.createMailbox = function(data){ } /* MESSAGES */ db.getMessages = function(username, box, limit, offset){ var mbox = username + "." + box return Message.query(function(qb){ qb.column('id', 'mbox', 'unread', 'sender', 'recipient', 'date', 'subject', knex.raw("CHAR_LENGTH(body) as size")).where("mbox", "=", mbox).orderBy("id", "desc") if (limit) { qb.limit(limit) } if (offset) { qb.offset(offset) } }).fetchAll() } db.getMessage = function (id){ var model = new Message({'id': id}) return model.fetch().then(function(message){ message.set("body", message.get("body").toString() ) return message }) } db.createMessage = function(data){ return new db.Message(data).save() } db.updateMessage = function(data){ } db.removeMessage = function(id){ }