diff --git a/db/boards.js b/db/boards.js index c61faff9..dd4a9dfe 100644 --- a/db/boards.js +++ b/db/boards.js @@ -51,17 +51,30 @@ module.exports = { insertOne: (data) => { cache.del(`board:${data._id}`); //removing cached no_exist + if (!data.settings.unlistedLocal) { + cache.sadd('boards:listed', data._id); + } return db.insertOne(data); }, deleteOne: (board) => { cache.del(`board:${board}`); cache.del(`banners:${board}`); + cache.srem('boards:listed', board); cache.srem('triggered', board); return db.deleteOne({ '_id': board }); }, updateOne: (board, update) => { + if (update['$set'] + && update['$set'].settings + && update['$set'].settings.unlistedLocal !== null) { + if (update['$set'].settings.unlistedLocal) { + cache.sadd('boards:listed', board); + } else { + cache.srem('boards:listed', board); + } + } cache.del(`board:${board}`); return db.updateOne({ '_id': board @@ -102,6 +115,23 @@ module.exports = { ); }, + getLocalListed: async () => { + let cachedListed = await cache.sgetall('boards:listed'); + if (cachedListed) { + return cachedListed; + } + let listedBoards = await db.find({ + 'settings.unlistedLocal': false + }, { + 'projection': { + '_id': 1, + } + }); + listedBoards = listedBoards.map(b => b._id); + await cache.sadd('boards:listed', listedBoards); + return listedBoards; + }, + boardSort: (skip=0, limit=50, sort={ ips:-1, pph:-1, sequence_value:-1 }, filter={}, showUnlisted=false) => { const addedFilter = {}; if (!showUnlisted) { diff --git a/db/posts.js b/db/posts.js index 51c71bc9..36816865 100644 --- a/db/posts.js +++ b/db/posts.js @@ -65,7 +65,14 @@ module.exports = { 'thread': null, } if (board) { - threadsQuery[board] = board; + if (Array.isArray(board)) { + //array for overboard + threadsQuery['board'] = { + '$in': board + } + } else { + threadsQuery['board'] = board; + } } const threads = await db.find(threadsQuery, { projection diff --git a/models/pages/overboard.js b/models/pages/overboard.js index 0366bbd4..c13ffe95 100644 --- a/models/pages/overboard.js +++ b/models/pages/overboard.js @@ -1,6 +1,6 @@ 'use strict'; -const Posts = require(__dirname+'/../../db/posts.js') +const { Posts, Boards } = require(__dirname+'/../../db/') , cache = require(__dirname+'/../../redis.js') , { overboardLimit } = require(__dirname+'/../../configs/main.js'); @@ -8,7 +8,9 @@ module.exports = async (req, res, next) => { let threads = []; try { - threads = await Posts.getRecent(null, 1, overboardLimit, false); + const listedBoards = await Boards.getLocalListed(); + console.log(listedBoards); + threads = await Posts.getRecent(listedBoards, 1, overboardLimit, false); } catch (err) { return next(err); } @@ -16,7 +18,6 @@ module.exports = async (req, res, next) => { res .set('Cache-Control', 'public, max-age=60') .render('overboard', { - modview: true, threads, });