57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
import {Meteor} from "meteor/meteor";
|
|
import { _ } from 'underscore';
|
|
import { Roles } from 'meteor/alanning:roles';
|
|
|
|
if (Meteor.isServer) {
|
|
Meteor.methods({
|
|
'admin.fixRecords'(input) {
|
|
if(Roles.userIsInRole(Meteor.userId(), "admin", {anyScope:true})) {
|
|
console.log("In Fix Records");
|
|
console.log("Deleting invalid records...");
|
|
|
|
// Delete any records missing key fields.
|
|
Meteor.Records.remove({serial: {$exists: false}});
|
|
Meteor.Records.remove({deviceId: {$exists: false}});
|
|
Meteor.Records.remove({endTime: {$exists: false}});
|
|
|
|
console.log("Consolidating records...");
|
|
|
|
let emails = _.uniq(Meteor.Records.find({}, {
|
|
sort: {email: 1},
|
|
fields: {email: true}
|
|
}).fetch().map(function (x) {
|
|
return x.email;
|
|
}), true);
|
|
|
|
emails.forEach(email => {
|
|
// Find all records for the user sorted from oldest to newest.
|
|
let records = Meteor.Records.find({email}, {sort: {startTime: 1}}).fetch();
|
|
let newRecords = [];
|
|
let record = records[0];
|
|
|
|
for (let index = 1; index < records.length; index++) {
|
|
let nextRecord = records[index];
|
|
|
|
if (record.deviceId === nextRecord.deviceId) {
|
|
record.endTime = nextRecord.endTime;
|
|
record.count += nextRecord.count;
|
|
record.internalCount += nextRecord.internalCount;
|
|
} else {
|
|
if (!record.endTime) record.endTime = nextRecord.startTime;
|
|
newRecords.push(record);
|
|
record = nextRecord;
|
|
}
|
|
}
|
|
newRecords.push(record);
|
|
|
|
Meteor.Records.remove({email});
|
|
|
|
for (let index = 0; index < newRecords.length; index++) {
|
|
Meteor.Records.insert(newRecords[index]);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
});
|
|
}
|