From 19fc6b80b91f9edc4fe051c8fab89371d6ecafb9 Mon Sep 17 00:00:00 2001 From: Dave Landry Date: Tue, 13 Apr 2021 13:32:53 -0400 Subject: [PATCH] adds flickr-clean script --- package.json | 1 + scripts/flickr-clean.js | 54 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 scripts/flickr-clean.js diff --git a/package.json b/package.json index 43d4f55d..72296022 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "cube2csv": "node scripts/cube2csv.js", "dev": "canon-dev", "docs": "jsdoc2md '+(api|app|db|tools)/**/*.+(js|jsx)' --separators > DOCS.md", + "flickr-clean": "node scripts/flickr-clean.js", "flickr": "node scripts/flickr-scrape.js", "setup": "canon-setup", "start": "node index.js", diff --git a/scripts/flickr-clean.js b/scripts/flickr-clean.js new file mode 100644 index 00000000..7aab0ea2 --- /dev/null +++ b/scripts/flickr-clean.js @@ -0,0 +1,54 @@ +#! /usr/bin/env node + +const Sequelize = require("sequelize"), + fs = require("fs"), + path = require("path"), + shell = require("shelljs"); + +const dbName = process.env.CANON_DB_NAME; +const dbUser = process.env.CANON_DB_USER; +const dbHost = process.env.CANON_DB_HOST || "127.0.0.1"; +const dbPw = process.env.CANON_DB_PW || null; + +const db = new Sequelize(dbName, dbUser, dbPw, + { + host: dbHost, + dialect: "postgres", + define: {timestamps: true}, + logging: () => {} + } +); + +const dbFolder = path.join(__dirname, "../node_modules/@datawheel/canon-cms/src/db/"); +fs.readdirSync(dbFolder) + .filter(file => file && file.indexOf(".") !== 0) + .forEach(file => { + const model = db.import(path.join(dbFolder, file)); + db[model.name] = model; + }); + +async function run() { + + const pagesWithImages = await db.search.findAll({where: {imageId: {[Sequelize.Op.ne]: null}}}); + const usedImages = pagesWithImages.map(d => d.imageId); + + const unusedImagesRows = await db.image.findAll({where: {id: {[Sequelize.Op.notIn]: usedImages}}}); + const unusedImages = unusedImagesRows.map(d => d.id); + + console.log(`Deleting ${unusedImages.length} unused images...`); + + unusedImages.forEach(id => { + const splashPath = path.join(process.cwd(), `static/images/profile/splash/${id}.jpg`); + const thumbPath = path.join(process.cwd(), `static/images/profile/thumb/${id}.jpg`); + if (shell.test("-e", splashPath)) fs.unlinkSync(splashPath); + if (shell.test("-e", thumbPath)) fs.unlinkSync(thumbPath); + }); + + await db.image_content.destroy({where: {id: unusedImages}}); + await db.image.destroy({where: {id: unusedImages}}); + + shell.exit(0); + +} + +run();