REST Service for POPCORN - ILIAS
alex
2025-07-06 e19f1dc6c1f262d01e3806f95563a072ead6e512
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}
}