Unique indexes (#1971)
* Add unique indexing * Add unique indexing for username/email * WIP * Finish unique indexes * Notes on how to upgrade to 2.3.0 safely * index on unique-indexes: c454180 Revert "Log objects rather than JSON stringified objects (#1922)" * reconfigure username/email tests * Start dealing with test shittyness * Remove tests for files that we are removing * most tests passing * fix failing test * Make specific server config for tests async * Fix more tests * fix more tests * Fix another test * fix more tests * Fix email validation * move some stuff around * Destroy server to ensure all connections are gone * Fix broken cloud code * Save callback to variable * no need to delete non existant cloud * undo * Fix all tests where connections are left open after server closes. * Fix issues caused by missing gridstore adapter * Update guide for 2.3.0 and fix final tests * use strict * don't use features that won't work in node 4 * Fix syntax error * Fix typos * Add duplicate finding command * Update 2.3.0.md
This commit is contained in:
@@ -1,74 +1,21 @@
|
||||
/** @flow weak */
|
||||
// Database Adapter
|
||||
//
|
||||
// Allows you to change the underlying database.
|
||||
//
|
||||
// Adapter classes must implement the following methods:
|
||||
// * a constructor with signature (connectionString, optionsObject)
|
||||
// * connect()
|
||||
// * loadSchema()
|
||||
// * create(className, object)
|
||||
// * find(className, query, options)
|
||||
// * update(className, query, update, options)
|
||||
// * destroy(className, query, options)
|
||||
// * This list is incomplete and the database process is not fully modularized.
|
||||
//
|
||||
// Default is MongoStorageAdapter.
|
||||
|
||||
import DatabaseController from './Controllers/DatabaseController';
|
||||
import MongoStorageAdapter from './Adapters/Storage/Mongo/MongoStorageAdapter';
|
||||
|
||||
let dbConnections = {};
|
||||
let appDatabaseURIs = {};
|
||||
let appDatabaseOptions = {};
|
||||
|
||||
function setAppDatabaseURI(appId, uri) {
|
||||
appDatabaseURIs[appId] = uri;
|
||||
}
|
||||
|
||||
function setAppDatabaseOptions(appId: string, options: Object) {
|
||||
appDatabaseOptions[appId] = options;
|
||||
}
|
||||
|
||||
//Used by tests
|
||||
function clearDatabaseSettings() {
|
||||
appDatabaseURIs = {};
|
||||
dbConnections = {};
|
||||
appDatabaseOptions = {};
|
||||
}
|
||||
import AppCache from './cache';
|
||||
|
||||
//Used by tests
|
||||
function destroyAllDataPermanently() {
|
||||
if (process.env.TESTING) {
|
||||
var promises = [];
|
||||
for (var conn in dbConnections) {
|
||||
promises.push(dbConnections[conn].deleteEverything());
|
||||
}
|
||||
return Promise.all(promises);
|
||||
// This is super janky, but destroyAllDataPermanently is
|
||||
// a janky interface, so we need to have some jankyness
|
||||
// to support it
|
||||
return Promise.all(Object.keys(AppCache.cache).map(appId => {
|
||||
const app = AppCache.get(appId);
|
||||
if (app.databaseController) {
|
||||
return app.databaseController.deleteEverything();
|
||||
} else {
|
||||
return Promise.resolve();
|
||||
}
|
||||
}));
|
||||
}
|
||||
throw 'Only supported in test environment';
|
||||
}
|
||||
|
||||
function getDatabaseConnection(appId: string, collectionPrefix: string) {
|
||||
if (dbConnections[appId]) {
|
||||
return dbConnections[appId];
|
||||
}
|
||||
|
||||
let mongoAdapterOptions = {
|
||||
collectionPrefix: collectionPrefix,
|
||||
mongoOptions: appDatabaseOptions[appId],
|
||||
uri: appDatabaseURIs[appId], //may be undefined if the user didn't supply a URI, in which case the default will be used
|
||||
}
|
||||
|
||||
dbConnections[appId] = new DatabaseController(new MongoStorageAdapter(mongoAdapterOptions), {appId: appId});
|
||||
|
||||
return dbConnections[appId];
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getDatabaseConnection: getDatabaseConnection,
|
||||
setAppDatabaseOptions: setAppDatabaseOptions,
|
||||
setAppDatabaseURI: setAppDatabaseURI,
|
||||
clearDatabaseSettings: clearDatabaseSettings,
|
||||
destroyAllDataPermanently: destroyAllDataPermanently,
|
||||
};
|
||||
module.exports = { destroyAllDataPermanently };
|
||||
|
||||
Reference in New Issue
Block a user