72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
import { ValidatedMethod } from 'meteor/mdg:validated-method';
|
|
import { RateLimiterMixin } from 'ddp-rate-limiter-mixin';
|
|
import ArchiveCreatureFiles from '/imports/api/creature/archive/ArchiveCreatureFiles';
|
|
import UserImages from '/imports/api/files/UserImages';
|
|
const fileCollections = [ArchiveCreatureFiles, UserImages];
|
|
|
|
const updateFileStorageUsed = new ValidatedMethod({
|
|
name: 'users.recalculateFileStorageUsed',
|
|
validate: null,
|
|
mixins: [RateLimiterMixin],
|
|
rateLimit: {
|
|
numRequests: 5,
|
|
timeInterval: 5000,
|
|
},
|
|
run() {
|
|
const userId = Meteor.userId();
|
|
if (!userId) throw new Meteor.Error('No user',
|
|
'You must be logged in to recalculate your file use');
|
|
const user = Meteor.users.findOne(userId);
|
|
if (!user) {
|
|
throw new Meteor.Error('noUser', 'User not found');
|
|
}
|
|
updateFileStorageUsedWork(userId);
|
|
}
|
|
});
|
|
|
|
export default updateFileStorageUsed;
|
|
|
|
export function updateFileStorageUsedWork(userId) {
|
|
if (!userId) {
|
|
throw new Meteor.Error('idRequired',
|
|
'No user ID was provided to update file storage used')
|
|
}
|
|
|
|
let sum = 0;
|
|
fileCollections.forEach(collection => {
|
|
collection.find({ userId }, { fields: { size: 1 } }).forEach(file => {
|
|
sum += file.size;
|
|
});
|
|
});
|
|
|
|
Meteor.users.update(userId, {
|
|
$set: {
|
|
fileStorageUsed: sum,
|
|
}
|
|
});
|
|
}
|
|
|
|
export function incrementFileStorageUsed(userId, amount) {
|
|
if (!userId) {
|
|
throw new Meteor.Error('idRequired',
|
|
'No user ID was provided to update file storage used')
|
|
}
|
|
|
|
const user = Meteor.users.findOne(userId);
|
|
if (!user) {
|
|
throw new Meteor.Error('noUser', 'User not found');
|
|
}
|
|
|
|
if (user.fileStorageUsed === undefined) {
|
|
// The user doesn't have a current value for storage used, calculate it
|
|
// from scratch
|
|
updateFileStorageUsedWork(userId);
|
|
} else {
|
|
Meteor.users.update(userId, {
|
|
$inc: {
|
|
fileStorageUsed: amount,
|
|
}
|
|
});
|
|
}
|
|
}
|