diff --git a/src/standaloneUtils/duplicateSubjectsInQdbFix.js b/src/standaloneUtils/duplicateSubjectsInQdbFix.js index 601f0d3..3386faf 100644 --- a/src/standaloneUtils/duplicateSubjectsInQdbFix.js +++ b/src/standaloneUtils/duplicateSubjectsInQdbFix.js @@ -1,52 +1,59 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ const fs = require('fs') const path = require('path') -const arg = process.argv[2] -const files = fs.readdirSync(arg) -const resdir = './res' +const filesDirPath = process.argv[2] +const resdir = process.argv[3] +const files = fs.readdirSync(filesDirPath) let duplicateSubjects = 0 let questionsInDuplicateSubjects = 0 +if (!fs.existsSync(resdir)) { + fs.mkdirSync(resdir) +} + function merge(x, y) { - return { - Name: x.Name, - Questions: [...x.Questions, ...y.Questions], - } + return { + Name: x.Name, + Questions: [...x.Questions, ...y.Questions], + } } const fixQdb = (dbname) => { - console.log(dbname) - console.log() - const file = JSON.parse(fs.readFileSync(path.join(arg + dbname), 'utf8')) + console.log(dbname) + console.log() + const file = JSON.parse( + fs.readFileSync(path.join(filesDirPath + dbname), 'utf8') + ) - const result = {} + const result = {} - file.forEach((x) => { - if (result[x.Name]) { - console.log(x.Name, ' is duplicate!') - duplicateSubjects += 1 - result[x.Name] = merge(result[x.Name], x) - questionsInDuplicateSubjects += result[x.Name].Questions.length - } else { - result[x.Name] = x - } - }) + file.forEach((x) => { + if (result[x.Name]) { + console.log(x.Name, ' is duplicate!') + duplicateSubjects += 1 + result[x.Name] = merge(result[x.Name], x) + questionsInDuplicateSubjects += result[x.Name].Questions.length + } else { + result[x.Name] = x + } + }) - const newFile = Object.values(result) + const newFile = Object.values(result) - fs.writeFileSync(path.join(resdir, dbname), JSON.stringify(newFile)) + fs.writeFileSync(path.join(resdir, dbname), JSON.stringify(newFile)) } if (fs.existsSync(resdir)) { - fs.rmSync(resdir, { recursive: true }) - fs.mkdirSync(resdir) + fs.rmSync(resdir, { recursive: true }) + fs.mkdirSync(resdir) } files.forEach((x) => { - if (x.includes('json')) { - fixQdb(x) - } + if (x.includes('json')) { + fixQdb(x) + } }) console.log('Done! Found duplicates:', duplicateSubjects) diff --git a/src/standaloneUtils/mergeDuplicateSubjectsAndRmDuplicates.sh b/src/standaloneUtils/mergeDuplicateSubjectsAndRmDuplicates.sh new file mode 100755 index 0000000..8a5ca44 --- /dev/null +++ b/src/standaloneUtils/mergeDuplicateSubjectsAndRmDuplicates.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +OUTDIR="/tmp/res/" + +echo "> pwd ${PWD}" + +mkdir -p OUTDIR +node ./src/standaloneUtils/duplicateSubjectsInQdbFix.js ./public/questionDbs/ "${OUTDIR}" + +echo -e "\n\n\n" +find "${OUTDIR}" -type f | while IFS= read -r qdb; do + node \ + ./src/standaloneUtils/rmDuplicates.js \ + "${qdb}" + + echo -e "\n\n\n" +done + +rm -v ${OUTDIR}*.json || exit + +mv -v ./*.res "${OUTDIR}" || exit + +find "${OUTDIR}" -type f | while IFS= read -r qdb; do + newName=$(echo "${qdb}" | rev | cut -d '.' -f 2- | rev) + mv -v "${qdb}" "${newName}" +done + +echo "Done!"