diff --git a/rpg-docs/.meteor/packages b/rpg-docs/.meteor/packages index 3f142441..0928a7e4 100644 --- a/rpg-docs/.meteor/packages +++ b/rpg-docs/.meteor/packages @@ -47,3 +47,4 @@ ecmascript@0.6.1 es5-shim@4.6.15 differential:vulcanize reactive-dict +percolate:synced-cron diff --git a/rpg-docs/.meteor/versions b/rpg-docs/.meteor/versions index 2f490285..04f53178 100644 --- a/rpg-docs/.meteor/versions +++ b/rpg-docs/.meteor/versions @@ -87,6 +87,7 @@ oauth2@1.1.11 observe-sequence@1.0.14 ordered-dict@1.0.9 percolate:migrations@0.9.8 +percolate:synced-cron@1.3.2 promise@0.8.8 raix:eventemitter@0.1.3 random@1.0.10 diff --git a/rpg-docs/server/lib/cron/deleteRemovedDocuments.js b/rpg-docs/server/lib/cron/deleteRemovedDocuments.js new file mode 100644 index 00000000..83fe8f47 --- /dev/null +++ b/rpg-docs/server/lib/cron/deleteRemovedDocuments.js @@ -0,0 +1,43 @@ +const collections = [ + Actions, Attacks, Buffs, Classes, Effects, Experiences, + Features, Notes, Proficiencies, SpellLists, Spells, + Containers, Items, +]; + +/** + * Deletes all soft removed documents that were removed more than 30 minutes ago + * and were not restored + * @return {Number} Number of documents removed + */ +const deleteOldSoftRemovedDocs = function(){ + let numRemoved = 0; + const now = new Date(); + const thirtyMinutesAgo = new Date(now.getTime() - 30*60000); + _.each(collections, (collection) => { + numRemoved += collection.remove({ + removed: true, + removedAt: {$lt: thirtyMinutesAgo} // dates *before* 30 minutes ago + }); + }); + return numRemoved; +}; + +SyncedCron.add({ + name: "Delete all soft removed items that haven't been restored", + schedule: function(parser) { + return parser.text('every 6 hours'); + }, + job: function() { + deleteOldSoftRemovedDocs(); + } +}); + +// Add a method to manually trigger removal +Meteor.methods({ + deleteOldSoftRemovedDocs() { + const user = Meteor.users.findOne(this.userId); + if (user && _.contains(user.roles, "admin")){ + deleteOldSoftRemovedDocs(); + } + }, +});