jschan - Anonymous imageboard software. Classic look, modern features and feel. Works without JavaScript and supports Tor, I2P, Lokinet, etc.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
1.5 KiB

'use strict';
const Mongo = require(__dirname+'/db.js')
, db = Mongo.client.db('jschan').collection('modlog');
module.exports = {
getDates: (board) => {
return db.aggregate([
{
'$match': {
'board': board._id
}
},
{
'$project': {
'year': {
'$year': '$_id'
},
'month': {
'$month': '$_id'
},
'day': {
'$dayOfMonth': '$_id'
}
}
},
{
'$group': {
'_id': null,
'dates': {
'$addToSet': {
'year': '$year',
'month': '$month',
'day': '$day',
}
}
}
},
{
'$unwind': '$dates'
},
{
'$sort': {
'dates.year': -1,
'dates.month': -1,
'dates.day': -1
}
},
{
'$group': {
'_id': null,
'dates': {
'$push': '$dates'
}
}
}
5 years ago
]).toArray().then(res => res[0] ? res[0].dates : []);
},
findBetweenDate: (board, start, end) => {
const startDate = Mongo.ObjectId.createFromTime(Math.floor(start.getTime()/1000));
const endDate = Mongo.ObjectId.createFromTime(Math.floor(end.getTime()/1000));
return db.find({
'_id': {
'$gte': startDate,
'$lte': endDate
},
'board': board._id
}).sort({
'_id': -1
}).toArray();
},
insertMany: (events) => {
return db.insertMany(events);
},
deleteBoard: (board) => {
return db.deleteMany({
'board': board
});
},
deleteAll: () => {
return db.deleteMany({});
},
}