added asset re-write

This commit is contained in:
Wyatt Johnson
2018-01-16 16:47:05 -07:00
parent 13fc91b355
commit e3cdad1f2a
2 changed files with 55 additions and 1 deletions
+54
View File
@@ -14,6 +14,8 @@ const AssetsService = require('../services/assets');
const mongoose = require('../services/mongoose');
const scraper = require('../services/scraper');
const inquirer = require('inquirer');
const { URL } = require('url');
const errors = require('../errors');
// Register the shutdown criteria.
util.onshutdown([() => mongoose.disconnect()]);
@@ -125,6 +127,51 @@ async function merge(srcID, dstID) {
}
}
async function rewrite(search, replace) {
try {
search = new RegExp(search);
const assets = await AssetModel.find({
url: { $regex: search },
});
if (assets.length === 0) {
console.log(`No assets found with the pattern: ${search}`);
return util.shutdown(0);
}
const bulk = AssetModel.collection.initializeUnorderedBulkOp();
let ops = 0;
assets.forEach(({ id, url: oldURL }) => {
// Replace the url.
const newURL = oldURL.replace(search, replace);
// Try to validate that the new url is valid.
try {
new URL(newURL);
} catch (err) {
throw errors.ErrInvalidAssetURL;
}
// If the url was updated with the operation, then queue up the update op.
if (newURL !== oldURL) {
ops++;
bulk.find({ id }).updateOne({ $set: { url: newURL } });
}
});
if (ops > 0) {
await bulk.execute();
}
console.log(`${ops} assets had their url's updated`);
util.shutdown(0);
} catch (err) {
console.error(err);
util.shutdown(1);
}
}
//==============================================================================
// Setting up the program command line arguments.
//==============================================================================
@@ -151,6 +198,13 @@ program
)
.action(merge);
program
.command('rewrite <search> <replace>')
.description(
"rewrites asset url's using the provided regex replacement pattern"
)
.action(rewrite);
program.parse(process.argv);
// If there is no command listed, output help.
+1 -1
View File
@@ -41,7 +41,7 @@ const AssetSchema = new Schema(
publication_date: Date,
modified_date: Date,
// This object is used exclusivly for storing settings that are to override
// This object is used exclusively for storing settings that are to override
// the base settings from the base Settings object. This is to be accessed
// always after running `rectifySettings` against it.
settings: {