diff --git a/packages/skin-database/cli.ts b/packages/skin-database/cli.ts index 50d868c0..5d291646 100755 --- a/packages/skin-database/cli.ts +++ b/packages/skin-database/cli.ts @@ -15,6 +15,7 @@ import { scrapeLikeData } from "./tasks/scrapeLikes"; import { screenshot } from "./tasks/screenshotSkin"; import Shooter from "./shooter"; import UserContext from "./data/UserContext"; +import { integrityCheck } from "./tasks/integrityCheck"; async function main() { const client = new Discord.Client(); @@ -23,6 +24,9 @@ async function main() { try { switch (argv._[0]) { + case "integity-check": + await integrityCheck(); + break; case "screenshot": { const md5 = argv._[1] || (await Skins.getSkinToShoot()); if (md5 == null) { diff --git a/packages/skin-database/tasks/integrityCheck.ts b/packages/skin-database/tasks/integrityCheck.ts new file mode 100644 index 00000000..69420378 --- /dev/null +++ b/packages/skin-database/tasks/integrityCheck.ts @@ -0,0 +1,47 @@ +import { knex } from "../db"; + +export async function integrityCheck(): Promise { + await skinsWithoutFiles(); + await filesWithoutSkins(); + await reviewsWithoutSkins(); + console.log("Done."); +} + +async function skinsWithoutFiles(): Promise { + console.log("Checking for skins without files..."); + const result = await knex("skins") + .leftJoin("files", "skins.md5", "=", "files.skin_md5") + .where("files.skin_md5", null) + .select(["md5"]); + if (result.length > 0) { + console.warn(`Found ${result.length} skins without files`); + } else { + console.log("None found."); + } +} + +async function filesWithoutSkins(): Promise { + console.log("Checking for files without skins..."); + const result = await knex("files") + .leftJoin("skins", "skins.md5", "=", "files.skin_md5") + .where("skins.md5", null) + .select(["files.skin_md5"]); + if (result.length > 0) { + console.warn(`Found ${result.length} files without skins`); + } else { + console.log("None found."); + } +} + +async function reviewsWithoutSkins(): Promise { + console.log("Checking for reviews without skins..."); + const result = await knex("skin_reviews") + .leftJoin("skins", "skins.md5", "=", "skin_reviews.skin_md5") + .where("skins.md5", null) + .select(["skin_reviews.skin_md5"]); + if (result.length > 0) { + console.warn(`Found ${result.length} reviews without skins`); + } else { + console.log("None found."); + } +}