aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2026-10-17 10:25:53 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2026-10-17 10:25:53 +0200
commite89ac9cec5dbde327c408b6e0f35e5c17f358e3d (patch)
treed5eec1b066badcd02775c1255d9e4dbddfde5eec
parent198bbebd89d212faae3e45a22830bab66dec49e0 (diff)
downloadbycs-sol-e89ac9cec5dbde327c408b6e0f35e5c17f358e3d.tar.gz
bycs-sol-e89ac9cec5dbde327c408b6e0f35e5c17f358e3d.zip
admin-tools: add method to delete duplicatesdelete-duplicates
-rw-r--r--admin-tools.html1
-rw-r--r--src/admin-tools.js31
2 files changed, 32 insertions, 0 deletions
diff --git a/admin-tools.html b/admin-tools.html
index 7f3b3bc..fc118e0 100644
--- a/admin-tools.html
+++ b/admin-tools.html
@@ -27,6 +27,7 @@
</div>
<button id="print-ids">StudentIds</button>
<button id="find-duplicates">Finde Duplikate</button>
+ <button id="delete-duplicates">Lösche Duplikate</button>
<button id="export-graduation-dbs">Exportiere Graduation Dbs</button>
</body>
</html>
diff --git a/src/admin-tools.js b/src/admin-tools.js
index b3135b1..858ec6d 100644
--- a/src/admin-tools.js
+++ b/src/admin-tools.js
@@ -111,6 +111,36 @@ async function findAllDuplicates() {
}
}
+async function deleteAllDuplicates() {
+ output("loading courses ...");
+ const courses = await fetchCourses("SOL Graduierung");
+ output(`searching in ${courses.length} courses ... `);
+ const promises = [];
+ for (const course of courses) {
+ promises.push(findDuplicates(course));
+ }
+
+ const allDuplicates = await Promise.all(promises);
+
+ const deletePromises = [];
+ for (const [course, courseDuplicates] of allDuplicates) {
+ const toDelete = [];
+ for (const duplicates of courseDuplicates) {
+ for (let i = duplicates.length - 1; i > 0; i--) {
+ toDelete.push(duplicates[i].changeId);
+ }
+ }
+ output(`${course.title}: Deleting ${toDelete}`);
+ deletePromises.push(
+ (async function () {
+ const dbActivity = await course.getActivity("Graduation");
+ const db = new DB(dbActivity.id);
+ await db.deleteEntries(toDelete);
+ })(),
+ );
+ }
+}
+
async function exportGraduations(course) {
const dbActivity = await course.getActivity("Graduation");
const db = new DB(dbActivity.id);
@@ -151,6 +181,7 @@ async function init() {
output(JSON.stringify(students.map((s) => s.id)));
});
document.getElementById("find-duplicates").addEventListener("click", findAllDuplicates);
+ document.getElementById("delete-duplicates").addEventListener("click", deleteAllDuplicates);
document.getElementById("export-graduation-dbs").addEventListener("click", exportAllGraduations);
}