optimization fixes on server

This commit is contained in:
Yaman Qalieh 2016-08-12 12:10:21 -04:00
parent 7032b30aa1
commit 4f67ff8194

View File

@ -4,7 +4,7 @@ import { Mongo } from 'meteor/mongo';
_uuid4 = function(cc) { _uuid4 = function(cc) {
var rr = Math.random() * 16 | 0; var rr = Math.random() * 16 | 0;
return (cc === 'x' ? rr : (rr & 0x3 | 0x8)).toString(16); return (cc === 'x' ? rr : (rr & 0x3 | 0x8)).toString(16);
} };
worktype = ["test", "quiz", "project", "normal"]; worktype = ["test", "quiz", "project", "normal"];
Meteor.methods({ Meteor.methods({
@ -13,27 +13,27 @@ Meteor.methods({
}, },
'createSchool': function(schoolname) { 'createSchool': function(schoolname) {
// if superadmin, no need for approval // if superadmin, no need for approval
if (Meteor.user() != null && if (Meteor.user() !== null &&
schools.findOne({name:input.school}) != null && schools.findOne({name:input.school}) !== null &&
schools.findOne({status: false, creator: Meteor.userId()}) != null) { schools.findOne({status: false, creator: Meteor.userId()}) !== null) {
schools.insert({name: schoolname, status: false, creator: Meteor.userId()}); schools.insert({name: schoolname, status: false, creator: Meteor.userId()});
} }
}, },
'deleteSchool': function(schoolid) { 'deleteSchool': function(schoolid) {
// alanning:roles implementation here // alanning:roles implementation here
schools.remove({_id: schoolid}) schools.remove({_id: schoolid});
}, },
'createClass': function(input) { 'createClass': function(input) {
// if superadmin, no need for approval // if superadmin, no need for approval
classes.schema.validate(input); classes.schema.validate(input);
if(Meteor.user() != null && if(Meteor.user() !== null &&
classes.find({status:false, admin:Meteor.userId()}).fetch().length < 5 && classes.find({status:false, admin:Meteor.userId()}).fetch().length < 5 &&
schools.findOne({name:input.school}) != null) { schools.findOne({name:input.school}) !== null) {
input.status = false; input.status = false;
input.subscribers = 0; input.subscribers = 0;
input.admin = Meteor.userId() input.admin = Meteor.userId();
if (input.privacy) { if (input.privacy) {
Meteor.call('genCode', function(error, result) { Meteor.call('genCode', function(error, result) {
input.code = result; input.code = result;
@ -44,9 +44,9 @@ Meteor.methods({
if (input.category != "class" && input.category != "club") { if (input.category != "class" && input.category != "club") {
input.category = "other"; input.category = "other";
} }
input.moderators = [] input.moderators = [];
input.banned = [] input.banned = [];
input.blockEdit = [] input.blockEdit = [];
classes.insert(input); classes.insert(input);
Meteor.call('joinClass',classes.findOne(input)._id, input.code, function(error,result){}); Meteor.call('joinClass',classes.findOne(input)._id, input.code, function(error,result){});
return 1; return 1;
@ -57,19 +57,19 @@ Meteor.methods({
'deleteClass': function(classid) { 'deleteClass': function(classid) {
found = classes.findOne({_id: classid}); found = classes.findOne({_id: classid});
// Add roles // Add roles
if (Meteor.user() != null && found != null && found.admin === Meteor.user()._id) { if (Meteor.user() !== null && found !== null && found.admin === Meteor.user()._id) {
classes.remove({_id: classid}) classes.remove({_id: classid});
} }
}, },
'createWork': function(input) { 'createWork': function(input) {
ref = new Date() ref = new Date();
month = ref.getMonth +1 month = ref.getMonth + 1;
ref = new Date(ref.getFullYear()+ "-" + month.toString() + "-" + ref.getDate()).getTime() ref = new Date(ref.getFullYear()+ "-" + month.toString() + "-" + ref.getDate()).getTime();
work.schema.validate(input); work.schema.validate(input);
found = Meteor.findOne({_id: input.class}) found = Meteor.findOne({_id: input.class});
if (Meteor.user() != null && if (Meteor.user() !== null &&
found != null && found !== null &&
found.subscribers.indexOf(Meteor.userId()) != -1 && found.subscribers.indexOf(Meteor.userId()) != -1 &&
found.banned.indexOf(Meteor.userId()) === -1 && found.banned.indexOf(Meteor.userId()) === -1 &&
found.blockEdit.indexOf(Meteor.userId()) === -1 && found.blockEdit.indexOf(Meteor.userId()) === -1 &&
@ -96,8 +96,8 @@ Meteor.methods({
current.description = change.description; current.description = change.description;
current.avatar = change.avatar; current.avatar = change.avatar;
current.banner = change.banner; current.banner = change.banner;
current.preferences = change.preferences current.preferences = change.preferences;
if (schools.findOne({name:current.school}) != null && if (schools.findOne({name:current.school}) !== null &&
Number.isInteger(current.grade) && Number.isInteger(current.grade) &&
current.grade >= 9 && current.grade <= 12 && current.grade >= 9 && current.grade <= 12 &&
current.description.length <= 50) { current.description.length <= 50) {
@ -115,12 +115,12 @@ Meteor.methods({
if(Meteor.user().profile.classes === undefined) { if(Meteor.user().profile.classes === undefined) {
curr = Meteor.user().profile; curr = Meteor.user().profile;
curr.classes = []; curr.classes = [];
Meteor.users.update({_id: Meteor.userId()}, {$set: {profile: curr}}) Meteor.users.update({_id: Meteor.userId()}, {$set: {profile: curr}});
} }
prof = Meteor.user().profile; prof = Meteor.user().profile;
found = classes.findOne({_id: change, status: true}); found = classes.findOne({_id: change, status: true});
if (Meteor.user() != null && if (Meteor.user() !== null &&
found != null && found !== null &&
pass === found.code && pass === found.code &&
!found.banned.includes(Meteor.userId()) && !found.banned.includes(Meteor.userId()) &&
!prof.classes.includes(change)) { !prof.classes.includes(change)) {
@ -134,16 +134,16 @@ Meteor.methods({
} }
}, },
'leaveClass': function(change) { 'leaveClass': function(change) {
if (Meteor.user() != null) { if (Meteor.user() !== null) {
profile = Meteor.user().profile profile = Meteor.user().profile;
index = profile.classes.indexOf(change) index = profile.classes.indexOf(change);
if (index >= 0) { if (index >= 0) {
if (classes.findOne({_id: change}).admin != Meteor.userId()) { if (classes.findOne({_id: change}).admin != Meteor.userId()) {
profile.classes.splice(index, 1); profile.classes.splice(index, 1);
Meteor.users.update({_id: Meteor.userId()}, {$set: {profile: current}}); Meteor.users.update({_id: Meteor.userId()}, {$set: {profile: current}});
return 1 return 1;
} else { } else {
throw "You are currently the admin of this class. Transfer ownership in order to leave this class." throw "You are currently the admin of this class. Transfer ownership in order to leave this class.";
} }
} }
@ -156,4 +156,4 @@ function has(array, has) {
if(array[i] === has) return true; if(array[i] === has) return true;
} }
return false; return false;
} }