| | |
| | | const mysql = require("mysql2/promise") |
| | | |
| | | const searchLib = require("./search") |
| | | const {host, port, user, database, password} = require("./../settings").db |
| | | |
| | | ///////////////////////////////////////////////////////////////////////// |
| | |
| | | |
| | | ///////////////////////////////////////////////////////////////////////// |
| | | |
| | | async function getUsers (offset = 0, limit = 10) { |
| | | limit = Number(limit) || 10 |
| | | offset = Number(offset) || 0 |
| | | async function getUserSearchQuery (offset, limit, search) { |
| | | const sel = `usr_id, login, firstname, lastname, gender, email, institution, street, city, zipcode, country, department, active` |
| | | // TODO user defined fields |
| | | // TODO check args for SQL Injection |
| | | |
| | | const pool = await poolP |
| | | const [results, fields] = await pool.query( |
| | | `SELECT ${sel} |
| | | FROM ${database}.usr_data AS ud |
| | | WHERE login REGEXP '^[0-9]+$' |
| | | LIMIT ${limit} |
| | | OFFSET ${offset} |
| | | if (!search || search === '') { |
| | | return `SELECT ${sel} |
| | | FROM ${database}.usr_data AS ud |
| | | WHERE login REGEXP '^[0-9]+$' |
| | | LIMIT ${limit} |
| | | OFFSET ${offset} |
| | | ` |
| | | ) |
| | | const count = await getUserCount() |
| | | return { |
| | | total: count, |
| | | offset, limit, |
| | | data: results, |
| | | } |
| | | else { |
| | | const ids = await searchLib.search(search) |
| | | if (!ids.length) { |
| | | throw "nothing found" |
| | | return await getUserSearchQuery(offset, limit) |
| | | } // nothing found |
| | | return `SELECT ${sel} |
| | | FROM ${database}.usr_data AS ud |
| | | WHERE login REGEXP '^[0-9]+$' |
| | | AND usr_id IN (${ids.join(",")}) |
| | | LIMIT ${limit} |
| | | OFFSET ${offset} |
| | | ` |
| | | } |
| | | } |
| | | |
| | | async function getUserCount () { |
| | | async function getUsers (offset = 0, limit = 10, search = null) { |
| | | console.log("++++++++++ get users", offset, limit, search) |
| | | limit = Number(limit) || 10 |
| | | offset = Number(offset) || 0 |
| | | // TODO check args for SQL Injection |
| | | |
| | | const pool = await poolP |
| | | const [results, fields] = await pool.query( |
| | | `SELECT COUNT(*) |
| | | FROM ${database}.usr_data AS ud |
| | | WHERE login REGEXP '^[0-9]+$'` |
| | | ) |
| | | return results[0]["COUNT(*)"] |
| | | |
| | | try { |
| | | let userSearchQuery = await getUserSearchQuery(offset, limit, search) |
| | | // console.log(userSearchQuery) |
| | | const [results, fields] = await pool.query(userSearchQuery) |
| | | const count = await getUserCount(offset, limit, search) |
| | | return { |
| | | total: count, |
| | | offset, limit, |
| | | data: results, |
| | | } |
| | | } catch (ex) { |
| | | return { |
| | | total: 0, |
| | | offset: 0, |
| | | limit: 0, |
| | | data: [], |
| | | } |
| | | } |
| | | } |
| | | |
| | | async function getUserCount (offset, limit, search) { |
| | | const pool = await poolP |
| | | // const q = getUserSearchQuery(offset, limit, search) |
| | | 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) |
| | | return results[0].count |
| | | |
| | | // const [results, fields] = await pool.query( |
| | | // `SELECT COUNT(*) |
| | | // FROM ${database}.usr_data AS ud |
| | | // WHERE login REGEXP '^[0-9]+$'` |
| | | // ) |
| | | // return results[0]["COUNT(*)"] |
| | | } |
| | | |
| | | async function getUserByLogin (login) { |
| | |
| | | async function getKursItems2 (ref_id) { |
| | | const pool = await poolP |
| | | const q = ` |
| | | WITH RECURSIVE tree (parent_id, obj_id, ref_id, title, type ) AS ( |
| | | SELECT ci.parent_id, or2.obj_id , ci.obj_id as ref_id, od.title, od.type |
| | | FROM ${database}.crs_items ci |
| | | INNER JOIN ${database}.object_reference or2 ON or2.ref_id = ci.obj_id |
| | | INNER JOIN ${database}.object_data od ON od.obj_id = or2.obj_id |
| | | WHERE ci.obj_id = ${ref_id} -- Kurs ref_id |
| | | AND or2.deleted is NULL |
| | | WITH RECURSIVE tree (parent_id, obj_id, ref_id, title, type) AS |
| | | (SELECT ci.parent_id, |
| | | or2.obj_id, |
| | | ci.obj_id as ref_id, |
| | | od.title, |
| | | od.type |
| | | FROM ${database}.crs_items ci |
| | | INNER JOIN ${database}.object_reference or2 ON or2.ref_id = ci.obj_id |
| | | INNER JOIN ${database}.object_data od ON od.obj_id = or2.obj_id |
| | | WHERE ci.obj_id = ${ref_id} -- Kurs ref_id |
| | | AND or2.deleted is NULL |
| | | |
| | | UNION ALL |
| | | UNION ALL |
| | | |
| | | SELECT child.parent_id, or2.obj_id , child.obj_id as ref_id, od.title, od.type |
| | | FROM ${database}.crs_items child |
| | | INNER JOIN ${database}.object_reference or2 ON or2.ref_id = child.obj_id |
| | | INNER JOIN ${database}.object_data od ON od.obj_id = or2.obj_id |
| | | JOIN tree ON child.parent_id = tree.ref_id |
| | | WHERE or2.deleted is NULL |
| | | ) |
| | | SELECT * FROM tree |
| | | ORDER BY tree.ref_id |
| | | ` |
| | | SELECT child.parent_id, |
| | | or2.obj_id, |
| | | child.obj_id as ref_id, |
| | | od.title, |
| | | od.type |
| | | FROM ${database}.crs_items child |
| | | INNER JOIN ${database}.object_reference or2 ON or2.ref_id = child.obj_id |
| | | INNER JOIN ${database}.object_data od ON od.obj_id = or2.obj_id |
| | | JOIN tree ON child.parent_id = tree.ref_id |
| | | WHERE or2.deleted is NULL) |
| | | SELECT * |
| | | FROM tree |
| | | ORDER BY tree.ref_id |
| | | ` |
| | | const [results] = await pool.query(q) |
| | | return results |
| | | } |
| | |
| | | |
| | | async function getUserTeilnahmen (usr_id) { |
| | | const pool = await poolP |
| | | const q = `SELECT om.obj_id, or2.ref_id , om.usr_id, od.title , ulm.status, om.passed, ulm.status_changed |
| | | const q = `SELECT om.obj_id, or2.ref_id, om.usr_id, od.title, ulm.status, om.passed, ulm.status_changed |
| | | FROM ${database}.obj_members om |
| | | INNER JOIN ${database}.object_reference or2 ON or2.obj_id = om.obj_id |
| | | INNER JOIN ${database}.usr_data ud ON ud.usr_id = om.usr_id |