Files
DiceCloud/app/imports/migrations/methods/validateDatabase.js
2022-03-08 15:04:51 +02:00

36 lines
1.1 KiB
JavaScript

import { ValidatedMethod } from 'meteor/mdg:validated-method';
import { RateLimiterMixin } from 'ddp-rate-limiter-mixin';
import { assertAdmin } from '/imports/api/sharing/sharingPermissions.js';
const validateDatabase = new ValidatedMethod({
name: 'validateDatabase',
validate: null,
mixins: [RateLimiterMixin],
rateLimit: {
numRequests: 1,
timeInterval: 10000,
},
run() {
assertAdmin(this.userId);
// Very computationally expensive data diagnostics
// Only run in an offline instance you control
return;
if (Meteor.isClient) return;
Meteor.Collection.getAll().forEach(collection => {
if (!collection.instance._c2?._simpleSchemas) return;
collection.instance.find({}).forEach(doc => {
const schema = collection.instance.simpleSchema(doc);
let cleanDoc = schema.clean(doc);
try {
schema.validate(cleanDoc, {modifier: false});
} catch (e){
console.log(collection.name, doc._id, e.message || e.reason || e.toString());
}
});
});
},
});
export default validateDatabase;