rmduplicates fix

This commit is contained in:
mrfry 2023-11-18 15:46:13 +01:00
parent ee30410209
commit 2c031e4d05
2 changed files with 55 additions and 2 deletions

View file

@ -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)

View file

@ -1,11 +1,11 @@
const utils = require('../../dist/utils/utils.js').default // eslint-disable-line const utils = require('../../dist/utils/utils.js').default // eslint-disable-line
const logger = require('../../dist/utils/logger.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 { const {
addQuestion, addQuestion,
doSearch,
compareQuestionObj, compareQuestionObj,
createQuestion, 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 { loadData, writeData } = require('../../dist/utils/actions.js') // eslint-disable-line
const fs = require('fs') // eslint-disable-line const fs = require('fs') // eslint-disable-line