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`
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);

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

Loading…
Cancel
Save