feat: Add options to skip automatic creation of internal database indexes on server start (#9897)
This commit is contained in:
@@ -1738,50 +1738,66 @@ class DatabaseController {
|
||||
await this.loadSchema().then(schema => schema.enforceClassExists('_Role'));
|
||||
await this.loadSchema().then(schema => schema.enforceClassExists('_Idempotency'));
|
||||
|
||||
await this.adapter.ensureUniqueness('_User', requiredUserFields, ['username']).catch(error => {
|
||||
logger.warn('Unable to ensure uniqueness for usernames: ', error);
|
||||
throw error;
|
||||
});
|
||||
const databaseOptions = this.options.databaseOptions || {};
|
||||
|
||||
if (databaseOptions.createIndexUserUsername !== false) {
|
||||
await this.adapter.ensureUniqueness('_User', requiredUserFields, ['username']).catch(error => {
|
||||
logger.warn('Unable to ensure uniqueness for usernames: ', error);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
if (!this.options.enableCollationCaseComparison) {
|
||||
await this.adapter
|
||||
.ensureIndex('_User', requiredUserFields, ['username'], 'case_insensitive_username', true)
|
||||
.catch(error => {
|
||||
logger.warn('Unable to create case insensitive username index: ', error);
|
||||
throw error;
|
||||
});
|
||||
if (databaseOptions.createIndexUserUsernameCaseInsensitive !== false) {
|
||||
await this.adapter
|
||||
.ensureIndex('_User', requiredUserFields, ['username'], 'case_insensitive_username', true)
|
||||
.catch(error => {
|
||||
logger.warn('Unable to create case insensitive username index: ', error);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
if (databaseOptions.createIndexUserEmailCaseInsensitive !== false) {
|
||||
await this.adapter
|
||||
.ensureIndex('_User', requiredUserFields, ['email'], 'case_insensitive_email', true)
|
||||
.catch(error => {
|
||||
logger.warn('Unable to create case insensitive email index: ', error);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (databaseOptions.createIndexUserEmail !== false) {
|
||||
await this.adapter.ensureUniqueness('_User', requiredUserFields, ['email']).catch(error => {
|
||||
logger.warn('Unable to ensure uniqueness for user email addresses: ', error);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
if (databaseOptions.createIndexUserEmailVerifyToken !== false) {
|
||||
await this.adapter
|
||||
.ensureIndex('_User', requiredUserFields, ['email'], 'case_insensitive_email', true)
|
||||
.ensureIndex('_User', requiredUserFields, ['_email_verify_token'], '_email_verify_token', false)
|
||||
.catch(error => {
|
||||
logger.warn('Unable to create case insensitive email index: ', error);
|
||||
logger.warn('Unable to create index for email verification token: ', error);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
await this.adapter.ensureUniqueness('_User', requiredUserFields, ['email']).catch(error => {
|
||||
logger.warn('Unable to ensure uniqueness for user email addresses: ', error);
|
||||
throw error;
|
||||
});
|
||||
if (databaseOptions.createIndexUserPasswordResetToken !== false) {
|
||||
await this.adapter
|
||||
.ensureIndex('_User', requiredUserFields, ['_perishable_token'], '_perishable_token', false)
|
||||
.catch(error => {
|
||||
logger.warn('Unable to create index for password reset token: ', error);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
await this.adapter
|
||||
.ensureIndex('_User', requiredUserFields, ['_email_verify_token'], '_email_verify_token', false)
|
||||
.catch(error => {
|
||||
logger.warn('Unable to create index for email verification token: ', error);
|
||||
if (databaseOptions.createIndexRoleName !== false) {
|
||||
await this.adapter.ensureUniqueness('_Role', requiredRoleFields, ['name']).catch(error => {
|
||||
logger.warn('Unable to ensure uniqueness for role name: ', error);
|
||||
throw error;
|
||||
});
|
||||
|
||||
await this.adapter
|
||||
.ensureIndex('_User', requiredUserFields, ['_perishable_token'], '_perishable_token', false)
|
||||
.catch(error => {
|
||||
logger.warn('Unable to create index for password reset token: ', error);
|
||||
throw error;
|
||||
});
|
||||
|
||||
await this.adapter.ensureUniqueness('_Role', requiredRoleFields, ['name']).catch(error => {
|
||||
logger.warn('Unable to ensure uniqueness for role name: ', error);
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
await this.adapter
|
||||
.ensureUniqueness('_Idempotency', requiredIdempotencyFields, ['reqId'])
|
||||
|
||||
Reference in New Issue
Block a user