aggregate query with unwind/sample for random banner selection, and delete banners fixed for board specific path

merge-requests/208/head
fatchan 5 years ago
parent 756d15cfd3
commit 09412d5e85
  1. 2
      models/forms/deletebanners.js
  2. 29
      models/pages/banners.js

@ -9,7 +9,7 @@ module.exports = async (req, res, next) => {
const redirect = `/${req.params.board}/manage.html` const redirect = `/${req.params.board}/manage.html`
await Promise.all(req.body.checkedbanners.map(async filename => { await Promise.all(req.body.checkedbanners.map(async filename => {
remove(`${uploadDirectory}banner/${filename}`); remove(`${uploadDirectory}banner/${req.params.board}/${filename}`);
})); }));
await Boards.removeBanners(req.params.board, req.body.checkedbanners); await Boards.removeBanners(req.params.board, req.body.checkedbanners);

@ -8,21 +8,20 @@ module.exports = async (req, res, next) => {
return next(); return next();
} }
// get all threads //agregate to get single random item from banners array
let board; const board = await Boards.db.aggregate([
try { {
board = await Boards.findOne(req.query.board); '$unwind': '$banners'
} catch (err) { },
return next(err); {
} '$sample': {
'size' : 1
if (!board) { }
return next(); }
} ]).toArray().then(res => res[0]);
if (board.banners.length > 0) { if (board && board.banners != null) {
const randomBanner = board.banners[Math.floor(Math.random()*board.banners.length)]; return res.redirect(`/banner/${req.query.board}/${board.banners}`);
return res.redirect(`/banner/${req.query.board}/${randomBanner}`);
} }
return res.redirect('/img/defaultbanner.png'); return res.redirect('/img/defaultbanner.png');

Loading…
Cancel
Save