const mysql = require("mysql2/promise") const {host, port, user, database, password} = require("./../settings").db ///////////////////////////////////////////////////////////////////////// let poolP = initPool() async function initPool () { return mysql.createPool({ host, port, database, user, password, }) } ///////////////////////////////////////////////////////////////////////// module.exports = { getUsers, getUserCount, getUserByLogin, getUserByUserId, getUserDefinedFields, getUserDefinedField, } ///////////////////////////////////////////////////////////////////////// async function getUsers (offset = 0, limit = 10) { 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 ilias.usr_data AS ud WHERE login REGEXP '^[0-9]+$' LIMIT ${limit} OFFSET ${offset} ` ) const count = await getUserCount() return { total: count, offset, limit, data: results, } } async function getUserCount () { const pool = await poolP const [results, fields] = await pool.query( `SELECT COUNT(*) FROM ilias.usr_data AS ud WHERE login REGEXP '^[0-9]+$'` ) return results[0]["COUNT(*)"] } async function getUserByLogin (login) { 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 ilias.usr_data AS ud WHERE login = '${login}' AND login REGEXP '^[0-9]+$'` ) return joinUDF(results[0]) } async function getUserByUserId (userId) { 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 ilias.usr_data AS ud WHERE usr_id = '${userId}' AND login REGEXP '^[0-9]+$'` ) return joinUDF(results[0]) } async function getUserDefinedFields () { const pool = await poolP const [results] = await pool.query( `SELECT ut.usr_id, ud.field_name, ut.value FROM ilias.udf_definition ud JOIN ilias.udf_text ut ON ut.field_id = ud.field_id` ) return results } async function getUserDefinedField (usr_id) { const pool = await poolP const [results] = await pool.query( `SELECT ut.usr_id, ud.field_name, ut.value FROM ilias.udf_definition ud JOIN ilias.udf_text ut ON ut.field_id = ud.field_id WHERE ut.usr_id = '${usr_id}' ` ) return results } ///////////////////////////////////////////////////////////////////////// async function promiseDelay (ms) { return new Promise(resolve => setTimeout(resolve, ms)) } async function joinUDF (user) { const fields = await getUserDefinedField(user.usr_id) for(const field of fields) { user[field.field_name] = field.value } return user }