diff --git a/app.js b/app.js index a0ebe0f16..61ea8531b 100644 --- a/app.js +++ b/app.js @@ -12,6 +12,7 @@ var cookieParser = require('cookie-parser'); var mongoose = require('mongoose'); var port = process.env.PORT || 3000; var database = process.env.DATABASE || process.env.MONGODB_URI || "mongodb://localhost:27017"; +mongoose.Promise = Promise; var settingsConfig = require('./config/settings'); var adminConfig = require('./config/admin'); diff --git a/app/server/controllers/SettingsController.js b/app/server/controllers/SettingsController.js index d5119908d..f1709f6b9 100644 --- a/app/server/controllers/SettingsController.js +++ b/app/server/controllers/SettingsController.js @@ -89,4 +89,23 @@ SettingsController.getPublicSettings = function(callback){ Settings.getPublicSettings(callback); }; +/** + * Adds the Setting's schema's newly added fields to the records + * @param {Function} callback [description] + */ + +SettingsController.updateRecordsWithMissingFields = function(callback) { + var settingSchema = Settings.schema.obj; + + Settings.update({}, + { $set: { + checkInOpen: settingSchema.checkInOpen.default, + teamSizeAccepted: settingSchema.teamSizeAccepted.default, + hackLocation: settingSchema.hackLocation, + maxTableCount: settingSchema.maxTableCount.default, + currentTableCount: settingSchema.currentTableCount.default + }}, { multi: true }) + .exec(callback); +} + module.exports = SettingsController; \ No newline at end of file diff --git a/app/server/controllers/UserController.js b/app/server/controllers/UserController.js index 302e144a8..d3f1c8a99 100644 --- a/app/server/controllers/UserController.js +++ b/app/server/controllers/UserController.js @@ -716,6 +716,19 @@ UserController.checkOutById = function(id, user, callback){ callback); }; +/** + * Adds the schema's newly added fields to the records that do not contain it + * @param {Function} callback [description] + */ +UserController.updateRecordsWithMissingFields = function(callback) { + var userSchema = User.schema.obj; + + User.update({ 'status.tableNumber': {$exists: false} }, + { $set: { + 'status.tableNumber': userSchema.status.tableNumber.default, + }}, { multi: true }) + .exec(callback); +} /** * [ADMIN ONLY] diff --git a/app/server/models/Settings.js b/app/server/models/Settings.js index 06fae4632..bdf59fcb4 100644 --- a/app/server/models/Settings.js +++ b/app/server/models/Settings.js @@ -9,6 +9,11 @@ var validator = require('validator'); * * @type {mongoose} */ +var geolocation = { + latitude: 0, + longitude: 0 +}; + var schema = new mongoose.Schema({ status: String, timeOpen: { @@ -37,6 +42,23 @@ var schema = new mongoose.Schema({ confirmationText: { type: String }, + checkInOpen: { + type: Number, + default: 0 + }, + teamSizeAccepted: { + type: Number, + default: 4 + }, + hackLocation: geolocation, + maxTableCount: { + type: Number, + default: 100 + }, + currentTableCount: { + type: Number, + default: 0 + } }); /** diff --git a/app/server/models/User.js b/app/server/models/User.js index 4d8a84297..899205133 100644 --- a/app/server/models/User.js +++ b/app/server/models/User.js @@ -166,6 +166,10 @@ var status = { reimbursementGiven: { type: Boolean, default: false + }, + tableNumber: { + type: Number, + default: -1 } }; diff --git a/package-lock.json b/package-lock.json index a1eb29a48..035fc21c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -712,9 +712,9 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "bower": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz", - "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=" + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.8.tgz", + "integrity": "sha512-1SrJnXnkP9soITHptSO+ahx3QKp3cVzn8poI6ujqc5SeOkg5iqM1pK9H+DSc2OQ8SnO0jC/NG4Ur/UIwy7574A==" }, "boxen": { "version": "1.3.0", diff --git a/package.json b/package.json index 34415c7ed..a96da4ae6 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "async": "^1.4.2", "bcrypt-nodejs": "0.0.3", "body-parser": "^1.18.3", - "bower": "^1.8.0", + "bower": "^1.8.8", "cookie-parser": "~1.3.2", "dotenv": "^1.2.0", "email-templates": "^2.0.1", @@ -16,7 +16,7 @@ "gulp-minify-css": "^1.2.0", "gulp-ng-annotate": "^1.1.0", "gulp-nodemon": "^2.2.1", - "gulp-sass": "^2.3.2", + "gulp-sass": "^3.0.0", "gulp-sourcemaps": "^1.12.0", "gulp-uglify": "^1.5.4", "handlebars": "^3.0.3", diff --git a/scripts/addSettingsMissingFields.js b/scripts/addSettingsMissingFields.js new file mode 100644 index 000000000..8ce649f32 --- /dev/null +++ b/scripts/addSettingsMissingFields.js @@ -0,0 +1,12 @@ +require('dotenv').load({silent: true}); + +// Connect to mongodb +var mongoose = require('mongoose'); +var database = process.env.MONGODB_URI || "mongodb://localhost:27017" +mongoose.connect(database); + +var SettingsController = require('../app/server/controllers/SettingsController'); + +SettingsController.updateRecordsWithMissingFields(function() { + console.log('Updated settings to include missing fields'); +}) diff --git a/scripts/cloneRemoteDB.js b/scripts/cloneRemoteDB.js new file mode 100644 index 000000000..71f12409c --- /dev/null +++ b/scripts/cloneRemoteDB.js @@ -0,0 +1,65 @@ +function clone(){ + require('dotenv').load({silent:true}); + // Connect locally to mongodb + + const mongoose = require('mongoose'), + localDB = process.env.MONGODB_URI || "mongodb://localhost:27017", + remoteDB = process.env.REMOTE_URI, + Settings = require('../app/server/models/Settings'), + User = require('../app/server/models/User'); + mongoose.Promise = Promise; + + // Connect to remote db + if(!remoteDB) return console.log("NO REMOTE URI"); + + let local = mongoose.createConnection(localDB); + let remote = mongoose.createConnection(remoteDB); + + console.log("LOCAL DB name => ", local.name); + console.log("REMOTE DB name => ", remote.name); + + + // Gets remote settings + remote.model('Settings').findOne({}).select('-_id') + .then(settingsR => { + console.log("New Settings :", settingsR) + // Updates local settings + return local.model('Settings').findOneAndUpdate({}, settingsR) + }) + .then(settingsPrior => { + console.log('Old Settings :', settingsPrior); + // Droops users + return local.db.dropCollection('users') + }) + .then(() =>{ + console.log("Dropped local user collection"); + // Gets remote users + return remote.model('User').find({}).select('+password +salt +status.admittedBy') + }) + .then(usersR => { + console.log('Amount of remote users :', usersR.length); + let LocalUser = local.model('User'); + let p = usersR.map( user => { + return new Promise((resolve, reject) => { + let u = new LocalUser(user.toObject()); + u.save((err,newUser) => { + if(err) return reject(err) + resolve(newUser); + }) + }); + }) + // Creates users locally + return Promise.all(p) + }) + .then(newUsers => { + console.log('New Users :', newUsers.length); + process.exit(0); + }) + .catch(err =>{ + console.log("ERROR"); + console.log('err :', err); + process.exit(1); + }) +} + +clone(); \ No newline at end of file