From c8653805fbfb0671c1e455ba14f5eded98be1cdd Mon Sep 17 00:00:00 2001
From: mrfry <mr.fry@tutanota.com>
Date: Mon, 20 Nov 2023 15:36:13 +0100
Subject: [PATCH] mergeDuplicateSubjectsAndRmDuplicates.sh

---
 .../duplicateSubjectsInQdbFix.js              | 63 ++++++++++---------
 .../mergeDuplicateSubjectsAndRmDuplicates.sh  | 28 +++++++++
 2 files changed, 63 insertions(+), 28 deletions(-)
 create mode 100755 src/standaloneUtils/mergeDuplicateSubjectsAndRmDuplicates.sh

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!"