From 2ddc520bb65798246a124822e2ea04c79c8f7d2a Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Mon, 29 May 2017 11:16:46 +0200 Subject: [PATCH] Added cron job to remove old documents --- rpg-docs/.meteor/packages | 1 + rpg-docs/.meteor/versions | 1 + .../server/lib/cron/deleteRemovedDocuments.js | 43 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 rpg-docs/server/lib/cron/deleteRemovedDocuments.js 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(); + } + }, +});