From 2c031e4d057d2abb6f161a737ba7215abb2afbf9 Mon Sep 17 00:00:00 2001 From: mrfry Date: Sat, 18 Nov 2023 15:46:13 +0100 Subject: [PATCH] rmduplicates fix --- .../duplicateSubjectsInQdbFix.js | 53 +++++++++++++++++++ src/standaloneUtils/rmDuplicates.js | 4 +- 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/standaloneUtils/duplicateSubjectsInQdbFix.js diff --git a/src/standaloneUtils/duplicateSubjectsInQdbFix.js b/src/standaloneUtils/duplicateSubjectsInQdbFix.js new file mode 100644 index 0000000..601f0d3 --- /dev/null +++ b/src/standaloneUtils/duplicateSubjectsInQdbFix.js @@ -0,0 +1,53 @@ +const fs = require('fs') +const path = require('path') + +const arg = process.argv[2] +const files = fs.readdirSync(arg) +const resdir = './res' + +let duplicateSubjects = 0 +let questionsInDuplicateSubjects = 0 + +function merge(x, y) { + 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')) + + 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 + } + }) + + const newFile = Object.values(result) + + fs.writeFileSync(path.join(resdir, dbname), JSON.stringify(newFile)) +} + +if (fs.existsSync(resdir)) { + fs.rmSync(resdir, { recursive: true }) + fs.mkdirSync(resdir) +} + +files.forEach((x) => { + if (x.includes('json')) { + fixQdb(x) + } +}) + +console.log('Done! Found duplicates:', duplicateSubjects) +console.log(questionsInDuplicateSubjects) diff --git a/src/standaloneUtils/rmDuplicates.js b/src/standaloneUtils/rmDuplicates.js index f8e0659..8f57c90 100644 --- a/src/standaloneUtils/rmDuplicates.js +++ b/src/standaloneUtils/rmDuplicates.js @@ -1,11 +1,11 @@ const utils = require('../../dist/utils/utils.js').default // eslint-disable-line const logger = require('../../dist/utils/logger.js').default // eslint-disable-line +const { doSearch } = require('../../dist/worker/handlers/handleSearch.js') // eslint-disable-line const { addQuestion, - doSearch, compareQuestionObj, createQuestion, -} = require('../../dist/utils/classes.js') // eslint-disable-line +} = require('../../dist/utils/qdbUtils.js') // eslint-disable-line const { loadData, writeData } = require('../../dist/utils/actions.js') // eslint-disable-line const fs = require('fs') // eslint-disable-line