REST Service for POPCORN - ILIAS
alex
2025-10-23 875be59deb262cee488565f5a8b1746bc4660571
lib/db.js
@@ -1,5 +1,6 @@
const mysql = require("mysql2/promise")
const dayjs = require("dayjs")
const _ = require("lodash")
const log = require("../logger")
const searchLib = require("./search")
@@ -405,17 +406,105 @@
    return results
}
async function getKursLp(obj_id) {
async function getKursLp(obj_id, raw = false) {
    const {ref_id} = await getRefIdFromObjId(obj_id)
    const tnUnter = await getKursUnterobjektLp(obj_id)
    if (raw) {
        return tnUnter
    } else { // LP aller Unterobjekte zusammenfassen
        const libLp = require("../lib/libLp")
        const data = libLp.alleAuswerten(tnUnter)
        return data
    }
    // const teilnehmer = await getKursTeilnehmer(ref_id)
    // const tnUnter = await getKursUnterobjektLp(obj_id)
    // console.table(teilnehmer)
    // console.table(tnUnter)
    //
    // /**
    //  * Die beiden Datensätze mergen
    //  * NEIN - es reicht der
    //  *
    //  */
    //
    // const idx = _.groupBy(tnUnter, "usr_id")
    // for (const tn of teilnehmer) {
    //     delete tn.parent_id
    //     delete tn.type
    //     delete tn.active
    //
    //     /** @type Array */
    //     const unter = idx[tn.usr_id]
    //     if (!unter) continue
    //
    //     /**
    //      * wenn unter.status_changed neuer, wird unter tn.status_changed vorgezogen
    //      * wenn unter.status neuer, überscheibt es tn.status
    //      * tn.passed muss zurückgesetzt werden wenn tn.status überschrieben wird
    //      */
    //     tn.status_overwrite = false
    //
    //     // max unter status_changed finden
    //     const unterStatusChanged = _.max(unter.map(u => u.status_changed))
    //
    //     // es muss nur überschrieben werden wenn das Unterdatum größer ist
    //     if (unterStatusChanged > tn.status_changed) {
    //         // unter Status auswerten
    //         // 0 = noch nicht bearbeitet
    //         // 1 = in Bearbeitung
    //         // 2 = bestanden
    //         // 3 = nicht bestanden
    //
    //         /** @type Array */
    //         const unterStatusse = unter.map(u => u.status)
    //         let newStatus = tn.status
    //         const allSame = function () {
    //             if (!unterStatusse.length) return false
    //             const first = unterStatusse[0]
    //             return unterStatusse.every(it => it === first)
    //         }()
    //         console.log({unterStatusse})
    //         // Fall 1: keine Unterstatussse vorhanden -> status vom Kurs
    //         if (!unterStatusse.length) {
    //             newStatus = tn.status
    //         }
    //         // Fall 2: eines nicht bestanden -> nicht bestanden // 0,1,2,3 -> 3
    //         if (unterStatusse.some(u => u === 3)) {
    //             newStatus = 3
    //         }
    //         // Fall 3: alle statusse gleich -> status // 0,0,0 1,1,1 2,2,2 3,3,3
    //         else if (allSame) {
    //             newStatus = unterStatusse[0]
    //         }
    //         // Fall 4: wenn eines in Bearbeitung -> in Bearbeitung // 0,1,0 2,1,2
    //         else if (unterStatusse.some(u => u === 1)) {
    //             newStatus = 1
    //         }
    //         // Fall 5: sonst in Bearbeitung
    //         else {
    //             // newStatus = Math.max.apply(this, unterStatusse)
    //             newStatus = 1
    //         }
    //         tn.status_changed = unterStatusChanged
    //         tn.status = newStatus
    //         tn.status_overwrite = true
    //     }
    // }
    // return teilnehmer
}
async function getKursUnterobjektLp(obj_id) {
    const pool = await poolP
    const q = `SELECT ulc.obj_id,
    const q = `SELECT ud.usr_id,
                      ud.login,
                      ud.firstname,
                      ud.lastname,
                      ulc.obj_id,
                      ulc.item_id,
                      ulc.lpmode,
                      t.obj_id as item_obj_id,
                      ulm.usr_id,
                      ulm.status,
                      ulm.status_changed,
                      ulm.percentage,
@@ -423,9 +512,11 @@
               FROM ${database}.ut_lp_collections ulc
                        INNER JOIN ${database}.object_reference t ON t.ref_id = ulc.item_id
                        INNER JOIN ${database}.ut_lp_marks ulm ON ulm.obj_id = t.obj_id
                        INNER JOIN ${database}.usr_data ud ON ud.usr_id = ulm.usr_id
               WHERE ulc.obj_id = ${obj_id} # obj_id Kurs
                    AND ulc.active = 1
                    AND ulc.lpmode = 5  # nur mode 5
               ORDER BY ud.usr_id
    `
    const [results] = await pool.query(q)
    return results