From eda54046a40c108e993cb8efd73a1a36bcbfd225 Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Fri, 20 Jun 2025 08:58:35 +0000
Subject: [PATCH] GS-2156
---
app.js | 34 +++++++++++------
vue/src/components/Header.vue | 7 +++
bin/deleteUser.js | 23 +++++++++++
test/testImportIliasUser.js | 22 +++++++++--
lib/search.js | 8 +++
vue/src/lib/api.js | 13 +++++-
6 files changed, 87 insertions(+), 20 deletions(-)
diff --git a/app.js b/app.js
index e31d23f..3928423 100644
--- a/app.js
+++ b/app.js
@@ -37,18 +37,28 @@
const searchLib = require("./lib/search")
searchLib.doIndex().catch(console.error)
-fastify.get("/api/search/user", async function (req, res) {
- console.log(req.query)
- const search = req.query?.search
- if (!search) {
- return res.code(422).send({status: "error", msg: "no search"})
- }
- else {
- console.log(search)
- const data = await searchLib.search(search)
- return res.send(data)
- }
-})
+fastify
+ .get("/api/search/user", async function (req, res) {
+ console.log(req.query)
+ const search = req.query?.search
+ if (!search) {
+ return res.code(422).send({status: "error", msg: "no search"})
+ }
+ else {
+ console.log(search)
+ const data = await searchLib.search(search)
+ return res.send(data)
+ }
+ })
+ .post("/api/search/reindex", async function (req, res) {
+ console.log("REINDEX ++++")
+ const start = Date.now()
+ await searchLib.doIndex().catch(console.error)
+ return res.send({
+ status: "ok",
+ msg: `reindexed in ${Date.now() - start} ms`,
+ })
+ })
fastify
/////// USER ////////////////////////////////////////////////////////////////
diff --git a/bin/deleteUser.js b/bin/deleteUser.js
new file mode 100644
index 0000000..bf1985a
--- /dev/null
+++ b/bin/deleteUser.js
@@ -0,0 +1,23 @@
+const db = require("../lib/db")
+const yargs = require("yargs")
+const libIlias = require("../lib/libIlias")
+
+/////////////////////////////////////////////////////////////////////////
+
+const argv = yargs
+ .usage("$0 <usr_id>", "delete user <usr_id>",)
+ .strict()
+ .parse()
+
+console.log(`argv.ref_id=${argv.ref_id}`)
+
+run(argv)
+ .then(console.log)
+ .catch(console.error)
+ .finally(process.exit)
+
+async function run ({usr_id}) {
+ return libIlias.deleteUser(usr_id)
+
+}
+
diff --git a/lib/search.js b/lib/search.js
index 1f08c51..66b3521 100644
--- a/lib/search.js
+++ b/lib/search.js
@@ -80,8 +80,8 @@
async function doIndex () {
const start = Date.now()
console.log("++ START indexing Users...")
-
const {readFromFile, file} = settings.search
+ clearIndex(idxUser)
let users
if (readFromFile) {
@@ -92,6 +92,7 @@
console.log("~~~ reading users from DB ... ~~~")
const db = require("./db")
const {data} = await db.getUsers(0, 100000)
+ console.log(`loaded ${data.length} users from DB...`)
users = data
}
@@ -125,6 +126,7 @@
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()
// return `${usr_id} ${firstname} ${lastname}`.trim()
}
@@ -141,6 +143,10 @@
remove(idxUser, usr_id)
}
+function clearIndex(index) {
+ index.clear()
+}
+
/////// idxTags FNS ////////////////////////////////////////////////////////////////
diff --git a/test/testImportIliasUser.js b/test/testImportIliasUser.js
index 074f1df..116b571 100644
--- a/test/testImportIliasUser.js
+++ b/test/testImportIliasUser.js
@@ -8,6 +8,7 @@
describe("the function importIliasUser", function () {
+ let lastUserId = null
const user = {
// Action: "Insert",
login: "affoReloaded",
@@ -28,6 +29,10 @@
},
}
+ afterEach(async function () {
+ await deleteUser(lastUserId)
+ })
+
it("should import a new user to ILIAS", async function () {
const res = await libIlias.importIliasUser(user)
console.dir(res, {depth:null})
@@ -36,15 +41,24 @@
expect(res.usr_id).to.be.a("number").above(0)
const {usr_id} = res
+ lastUserId = usr_id
const user2 = await db.getUserByUserId(usr_id)
console.log(user2)
expect(user2).to.have.property("login").and.to.equal("affoReloaded")
expect(user2).to.have.property("usr_id").and.to.equal(res.usr_id)
- const res2 = await libIlias.deleteUser(usr_id)
- console.log(res2)
- expect(res2).to.have.property("status").and.to.equal("ok")
- expect(res2).to.have.property("command").and.to.equal("deleteUser")
+ // const res2 = await libIlias.deleteUser(usr_id)
+ // console.log(res2)
+ // expect(res2).to.have.property("status").and.to.equal("ok")
+ // expect(res2).to.have.property("command").and.to.equal("deleteUser")
})
})
+
+
+async function deleteUser (usr_id) {
+ const res2 = await libIlias.deleteUser(usr_id)
+ console.log(res2)
+ expect(res2).to.have.property("status").and.to.equal("ok")
+ expect(res2).to.have.property("command").and.to.equal("deleteUser")
+}
diff --git a/vue/src/components/Header.vue b/vue/src/components/Header.vue
index 09d73a9..7a14fff 100644
--- a/vue/src/components/Header.vue
+++ b/vue/src/components/Header.vue
@@ -1,6 +1,8 @@
<script setup>
-import {apiTokenValid, deleteApiToken, routerBase} from "../lib/api"
+import {reindex, apiTokenValid, deleteApiToken, routerBase} from "../lib/api"
+
+
</script>
@@ -12,6 +14,9 @@
<RouterLink :to="`${routerBase}/ui/user`">Users</RouterLink>
<RouterLink :to="`${routerBase}/ui/kurs`">Courses</RouterLink>
<div style="flex-grow: 1" />
+ <div>
+ <button type="button" @click="reindex()">♻</button>
+ </div>
<div v-if="apiTokenValid">
<button type="button" @click="deleteApiToken()">logout</button>
</div>
diff --git a/vue/src/lib/api.js b/vue/src/lib/api.js
index 3ef461b..5290542 100644
--- a/vue/src/lib/api.js
+++ b/vue/src/lib/api.js
@@ -5,10 +5,12 @@
let apiToken = useSessionStorage("apiToken", "")
export const apiTokenValid = computed(() => apiToken.value !== null && apiToken.value !== "")
-export function setApiToken(token) {
+
+export function setApiToken (token) {
apiToken.value = token
}
-export function deleteApiToken() {
+
+export function deleteApiToken () {
apiToken.value = null
}
@@ -64,3 +66,10 @@
return await res.json()
}
+export async function reindex () {
+ let url = `${apiBase}/search/reindex?token=${apiToken.value}`
+ const res = await fetch(url, {method: "POST"})
+ const data = await res.json()
+ console.log(data)
+ return data
+}
--
Gitblit v1.8.0