From d201c59c7a7e4eed79ec20835b27dcc13ab8e848 Mon Sep 17 00:00:00 2001 From: rob Date: Fri, 24 Dec 2021 11:54:02 -0500 Subject: [PATCH] some cleanup --- .vscode/launch.json | 2 +- app/models/email-blacklist.js | 2 +- app/models/resource-visit.js | 2 +- app/views/components/page-sidebar.pug | 2 +- dtp-libertylinks-cli.js | 13 +++++++++++++ lib/site-platform.js | 24 +++++++++++++++++++++++- 6 files changed, 40 insertions(+), 5 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 7e9c7c7..ba8bccc 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -26,7 +26,7 @@ ], "program": "${workspaceFolder:dtp-libertylinks}/dtp-libertylinks-cli.js", "console": "integratedTerminal", - "args": ["--action=make-bucket", "images"] + "args": ["--action=reset-indexes", "all"] } ] } \ No newline at end of file diff --git a/app/models/email-blacklist.js b/app/models/email-blacklist.js index c579560..0abf4cd 100644 --- a/app/models/email-blacklist.js +++ b/app/models/email-blacklist.js @@ -24,7 +24,7 @@ const EmailBlacklistSchema = new Schema({ EmailBlacklistSchema.index({ email: 1, - 'flags.isVerified': true, + 'flags.isVerified': 1, }, { partialFilterExpression: { 'flags.isVerified': true, diff --git a/app/models/resource-visit.js b/app/models/resource-visit.js index bf41d4c..8eb7f82 100644 --- a/app/models/resource-visit.js +++ b/app/models/resource-visit.js @@ -13,7 +13,7 @@ const ResourceVisitSchema = new Schema({ created: { type: Date, required: true, default: Date.now, index: -1, expires: '7d' }, resourceType: { type: String, enum: ['Link', 'User'], required: true }, resource: { type: Schema.ObjectId, required: true, index: 1, ref: 'Link' }, - user: { type: Schema.ObjectId, index: 1, ref: 'User' }, + user: { type: Schema.ObjectId, ref: 'User' }, geoip: { type: GeoIp }, }); diff --git a/app/views/components/page-sidebar.pug b/app/views/components/page-sidebar.pug index f4b63e4..d5239a8 100644 --- a/app/views/components/page-sidebar.pug +++ b/app/views/components/page-sidebar.pug @@ -1,7 +1,7 @@ mixin renderSidebarLink (link) div a( - href=link.href, + href= link.href, data-visit-url= `/link/${link._id}/visit`, onclick="return dtp.app.visitLink(event);", ).dtp-link-button.uk-display-block.uk-border-rounded.uk-width-1-1= link.label diff --git a/dtp-libertylinks-cli.js b/dtp-libertylinks-cli.js index e93057d..96e76d9 100644 --- a/dtp-libertylinks-cli.js +++ b/dtp-libertylinks-cli.js @@ -101,6 +101,15 @@ module.makeBucket = async (target) => { } }; +module.resetIndexes = async ( ) => { + try { + module.log.info('resetting MongoDB indexes...'); + await SitePlatform.resetIndexes(module); + } catch (error) { + module.log.error('failed to reset database indexes', { error }); + } +}; + /* * SERVER INIT */ @@ -155,6 +164,10 @@ module.makeBucket = async (target) => { await module.deleteOtpAccount(target); break; + case 'reset-indexes': + await module.resetIndexes(); + break; + default: throw new Error(`invalid action: ${module.app.options.action}`); } diff --git a/lib/site-platform.js b/lib/site-platform.js index 8fe4a1f..57efded 100644 --- a/lib/site-platform.js +++ b/lib/site-platform.js @@ -57,7 +57,29 @@ module.loadModels = async (dtp) => { module.log.error('model name collision', { name: model.modelName }); process.exit(-1); } - module.models[model.modelName] = model; + module.models.push(model); + }); +}; + +module.exports.resetIndexes = async (dtp) => { + await SiteAsync.each(dtp.models, module.resetIndex); +}; + +module.resetIndex = async (model) => { + return new Promise(async (resolve, reject) => { + module.log.info('dropping model indexes', { model: model.modelName }); + model.collection.dropIndexes((err) => { + if (err) { + return reject(err); + } + module.log.info('creating model indexes', { model: model.modelName }); + model.ensureIndexes((err) => { + if (err) { + return reject(err); + } + return resolve(model); + }); + }); }); };