From 8f37d4c717f0ff348ee4d23fb75ca6e017705603 Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Fri, 20 Jun 2025 09:43:47 +0000
Subject: [PATCH] GS-2156

---
 lib/db.js                |   10 ++--
 lib/libIlias.js          |   13 +++---
 package-lock.json        |   23 +++++++++++
 bin/deleteUserByLogin.js |   44 ++++++++++++++++++++++
 package.json             |    1 
 lib/search.js            |   11 ++++-
 6 files changed, 88 insertions(+), 14 deletions(-)

diff --git a/bin/deleteUserByLogin.js b/bin/deleteUserByLogin.js
new file mode 100644
index 0000000..a280475
--- /dev/null
+++ b/bin/deleteUserByLogin.js
@@ -0,0 +1,44 @@
+const db = require("../lib/db")
+const yargs = require("yargs")
+const libIlias = require("../lib/libIlias")
+const search = require("../lib/search")
+
+/////////////////////////////////////////////////////////////////////////
+
+const argv = yargs
+   .usage("$0 <login>", "delete user <login>",)
+   .strict()
+   .parse()
+
+console.log(`argv.ref_id=${argv.ref_id}`)
+
+run(argv)
+   .then(console.log)
+   .catch(console.error)
+   .finally(process.exit)
+
+async function run ({login}) {
+   let userIds = await search.search(String(login))
+
+   if (userIds.length > 1) throw {msg: "result not distinct!", results: userIds}
+   if (userIds.length === 0) throw {msg: "nothing found!", results: userIds}
+
+   const usr_id = userIds[0]
+   const user = await db.getUserByUserId(usr_id)
+   console.log(user)
+
+   const { Confirm } = require('enquirer');
+   const prompt = new Confirm({
+      name: 'question',
+      message: `Delete user ${user.firstname} ${user.lastname} (${user.usr_id})`,
+   });
+   const doContinue = await prompt.run();
+
+   if(doContinue) {
+      return libIlias.deleteUser(usr_id)
+   }
+   else {
+      return "nothing changed... bye bye!"
+   }
+}
+
diff --git a/lib/db.js b/lib/db.js
index d547d86..531e5cf 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -44,7 +44,7 @@
 
 /////////////////////////////////////////////////////////////////////////
 
-function getUserSearchQuery (offset, limit, search) {
+async function getUserSearchQuery (offset, limit, search) {
    const sel = `usr_id, login, firstname, lastname, gender, email, institution, street, city, zipcode, country, department, active`
    if (!search || search === '') {
       return `SELECT ${sel}
@@ -55,10 +55,10 @@
       `
    }
    else {
-      const ids = searchLib.search(search)
+      const ids = await searchLib.search(search)
       if (!ids.length) {
          throw "nothing found"
-         return getUserSearchQuery(offset, limit)
+         return await getUserSearchQuery(offset, limit)
       } // nothing found
       return `SELECT ${sel}
               FROM ${database}.usr_data AS ud
@@ -79,7 +79,7 @@
    const pool = await poolP
 
    try {
-      let userSearchQuery = getUserSearchQuery(offset, limit, search)
+      let userSearchQuery = await getUserSearchQuery(offset, limit, search)
       // console.log(userSearchQuery)
       const [results, fields] = await pool.query(userSearchQuery)
       const count = await getUserCount(offset, limit, search)
@@ -101,7 +101,7 @@
 async function getUserCount (offset, limit, search) {
    const pool = await poolP
    // const q = getUserSearchQuery(offset, limit, search)
-   const q = getUserSearchQuery(0, 1000000, search) // hier darf kein Limit sein, offset=0
+   const q = await getUserSearchQuery(0, 1000000, search) // hier darf kein Limit sein, offset=0
    const q2 = `SELECT COUNT(*) AS count
                FROM (${q}) AS X`
    const [results, fields] = await pool.query(q2)
diff --git a/lib/libIlias.js b/lib/libIlias.js
index 1016beb..5dd90ab 100644
--- a/lib/libIlias.js
+++ b/lib/libIlias.js
@@ -1,4 +1,11 @@
 /* Lib for interacting with customized ILIAS php */
+const settings = require("../settings")
+const {getObjIdFromRefId} = require("./db")
+const db = require("./db")
+const {url, iliastoken} = settings.ilias
+const search = require("./search")
+
+/////////////////////////////////////////////////////////////////////////
 
 module.exports = {
    importIliasUser,
@@ -10,12 +17,6 @@
 
 /////////////////////////////////////////////////////////////////////////
 
-const settings = require("../settings")
-const {getObjIdFromRefId} = require("./db")
-const db = require("./db")
-const {url, iliastoken} = settings.ilias
-
-/////////////////////////////////////////////////////////////////////////
 
 /////// USER IMPORT ////////////////////////////////////////////////////////////////
 
diff --git a/lib/search.js b/lib/search.js
index 66b3521..11e1536 100644
--- a/lib/search.js
+++ b/lib/search.js
@@ -77,6 +77,7 @@
 
 /////////////////////////////////////////////////////////////////////////
 
+let indexed = false
 async function doIndex () {
    const start = Date.now()
    console.log("++ START indexing Users...")
@@ -100,10 +101,13 @@
       addUser(user)
       // addTags(user)
    }
+   indexed = true
    console.log(`++ END indexing Users in ${Date.now() - start}ms`)
 }
 
-function search (query) {
+async function search (query) {
+   // when called from a cli program the search index is not initalized
+   if(!indexed) await doIndex()
    const searchLimit = 10000
    return idxUser.search(query, searchLimit)
 }
@@ -126,8 +130,9 @@
 
 function getUserString (user) {
    const {usr_id, firstname, lastname, login, institution, department} = user
-   if(firstname.trim()==="Adolfo") console.log(user)
-   return `${usr_id} ${login} ${firstname} ${lastname} ${institution} ${department}`.trim()
+   // if(firstname.trim()==="Adolfo") console.log(user)
+   return `${login} ${firstname} ${lastname} ${institution} ${department}`.trim()
+   // return `${usr_id} ${login} ${firstname} ${lastname} ${institution} ${department}`.trim() // KEINE usr_id
    // return `${usr_id} ${firstname} ${lastname}`.trim()
 }
 
diff --git a/package-lock.json b/package-lock.json
index 9fddc76..e7e253c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,6 +15,7 @@
         "chai": "^5.2.0",
         "dayjs": "^1.11.13",
         "dotenv": "^16.5.0",
+        "enquirer": "^2.4.1",
         "fastify": "^5.3.3",
         "flexsearch": "^0.8.205",
         "lodash": "^4.17.21",
@@ -2007,6 +2008,15 @@
         }
       }
     },
+    "node_modules/ansi-colors": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+      "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/ansi-regex": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -2671,6 +2681,19 @@
         "once": "^1.4.0"
       }
     },
+    "node_modules/enquirer": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+      "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-colors": "^4.1.1",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
     "node_modules/entities": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
diff --git a/package.json b/package.json
index 1a44687..03a0780 100644
--- a/package.json
+++ b/package.json
@@ -19,6 +19,7 @@
     "chai": "^5.2.0",
     "dayjs": "^1.11.13",
     "dotenv": "^16.5.0",
+    "enquirer": "^2.4.1",
     "fastify": "^5.3.3",
     "flexsearch": "^0.8.205",
     "lodash": "^4.17.21",

--
Gitblit v1.8.0