From e19f1dc6c1f262d01e3806f95563a072ead6e512 Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Sun, 06 Jul 2025 16:24:45 +0000
Subject: [PATCH] GS-2199
---
lib/db.js | 69 +++++++++++++++++++++++
lib/libIlias.js | 2
app.js | 19 ++++++
test/testSetStatus.js | 41 +++++++++++++
4 files changed, 131 insertions(+), 0 deletions(-)
diff --git a/app.js b/app.js
index d4cc17b..2ddf06d 100644
--- a/app.js
+++ b/app.js
@@ -206,6 +206,25 @@
// }
// })
+ .post("/api/kurs/:refId/status/:usrId", async function (req, res) {
+ const {refId, usrId} = req.params
+ if (!refId || !usrId) throw {status: "error", msg: "refId and usrId requried"}
+ try {
+ const {obj_id: course_id} = await db.getObjIdFromRefId(refId)
+ // let data = await libIlias.abmelden(usrId, course_id)
+ // let data = await libIlias.deleteTeilnahme(refId, usrId)
+ if (!data) throw {statusCode: 404, message: "Teilnahme not found"}
+ return res.send(data)
+ } catch (ex) {
+ console.error(ex)
+ const msg = ex.msg ?? ex.message ?? ex.toString()
+ if (ex.statusCode) {
+ return res.code(ex.statusCode).send({status: "error", msg})
+ }
+ return res.code(500).send({status: "error", msg})
+ }
+ })
+
.delete("/api/kurs/:refId/teilnehmer/:usrId", async function (req, res) {
const {refId, usrId} = req.params
if (!refId || !usrId) throw {status: "error", msg: "refId and usrId requried"}
diff --git a/lib/db.js b/lib/db.js
index 48215e6..76e3064 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -43,6 +43,8 @@
getUdf,
getMemberRoleForCourse,
+
+ setStatus,
}
/////////////////////////////////////////////////////////////////////////
@@ -384,3 +386,70 @@
return null
}
}
+
+/////// STATUS ////////////////////////////////////////////////////////////////
+
+/**
+ * Zwei Möglichkeiten:
+ * 1. es gibt schon einen Eintrag in ut_lp_marks, dann muss man diesen updaten
+ * 2. es gibt noch keinen Eintrag in ut_lp_marks, dann muss erst einer erstellt werden (NEIN! Für neuen TN sind bereits beide Einträge vorhanden, kann also wegfallen)
+ *
+ * Weiterhin haben wir es mit zwei Tabellen zu tun:
+ * - obj_members (passed)
+ * - ut_lp_marks (status)
+ *
+ * UPDATE: Wir nehmen an, dass beide Einträge schon vorhanden sind!
+ *
+ * @param courseId
+ * @param userId
+ * @param passed
+ * @param status
+ * @returns {Promise<void>}
+ */
+async function setStatus (courseId, userId, passed = null, status = null) {
+ const pool = await poolP
+
+ // ACHTUNG Transactions funktioneren so nicht, erst mal ohne machen...
+ const q = `
+START TRANSACTION;
+
+UPDATE ${database}.ut_lp_marks ulm
+SET status = ${status}
+WHERE ulm.usr_id = 31793 AND ulm.obj_id = 32212;
+
+UPDATE ${database}.obj_members om
+SET passed = ${passed}
+WHERE om.usr_id = ${userId} AND om.obj_id = ${courseId};
+
+COMMIT;
+`
+
+ const q1 = `
+ UPDATE ${database}.ut_lp_marks ulm
+ SET status = ${status}
+ WHERE ulm.usr_id = 31793
+ AND ulm.obj_id = 32212;
+ `
+ const q2 = `
+ UPDATE ${database}.obj_members om
+ SET passed = ${passed}
+ WHERE om.usr_id = ${userId}
+ AND om.obj_id = ${courseId};
+ `
+ const [results1] = await pool.query(q1)
+ const [results2] = await pool.query(q2)
+ const {affectedRows: affectedRows1} = results1
+ const {affectedRows: affectedRows2} = results2
+ if (affectedRows1 && affectedRows2) {
+ return {
+ status: "ok",
+ }
+ }
+ else {
+ throw {
+ status: "error",
+ reason: {affectedRows1, affectedRows2}
+ }
+ }
+ // return {results1, results2}
+}
diff --git a/lib/libIlias.js b/lib/libIlias.js
index 489d1da..bed78e0 100644
--- a/lib/libIlias.js
+++ b/lib/libIlias.js
@@ -175,3 +175,5 @@
const res = await fetch(url2, {method: "DELETE"})
return await res.json()
}
+
+
diff --git a/test/testSetStatus.js b/test/testSetStatus.js
new file mode 100644
index 0000000..86394cf
--- /dev/null
+++ b/test/testSetStatus.js
@@ -0,0 +1,41 @@
+const expect = require("chai").expect
+
+const settings = require("../settings")
+const libIlias = require("../lib/libIlias")
+const db = require("../lib/db")
+const testData = require("./data")
+
+/////////////////////////////////////////////////////////////////////////
+
+describe("the function setStatus", function () {
+
+ const kurs = testData.kurs // TODO
+ const user = testData.user
+
+ let kursId = 32212
+ let userId = 31793
+ const status = 2
+ const passed = 1
+
+ beforeEach(async function () {
+ // TODO add kurs, add User
+ })
+
+ afterEach(async function () {
+ // TODO delete kurs, delete user
+ })
+
+ it("should set status and passed for a kurs TN", async function () {
+ const res = await db.setStatus(kursId, userId, 4, 4)
+
+ console.dir(res, {depth: null})
+ return
+ expect(res).to.have.property("status").and.to.equal("ok")
+ expect(res.command).to.equal("anmelden")
+ expect(res.method).to.equal("POST")
+ })
+
+})
+
+/////////////////////////////////////////////////////////////////////////
+
--
Gitblit v1.8.0