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,
|
|
getObjIdFromRefId,
|
getRefIdFromObjId,
|
}
|
|
/////////////////////////////////////////////////////////////////////////
|
|
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 ${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,
|
}
|
}
|
|
async function getUserCount () {
|
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(*)"]
|
}
|
|
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 ${database}.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 ${database}.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 ${database}.udf_definition ud
|
JOIN ${database}.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 ${database}.udf_definition ud
|
JOIN ${database}.udf_text ut ON ut.field_id = ud.field_id
|
WHERE ut.usr_id = '${usr_id}'
|
`
|
)
|
return results
|
}
|
|
/////// obj_id / ref_id ////////////////////////////////////////////////////////////////
|
|
async function getObjIdFromRefId (refId) {
|
const pool = await poolP
|
const [results] = await pool.query(
|
`SELECT ref_id, obj_id
|
FROM ${database}.object_reference as obr
|
WHERE obr.ref_id = ${refId}
|
`
|
)
|
return results.length ? results[0] : undefined
|
}
|
|
async function getRefIdFromObjId (objId) {
|
const pool = await poolP
|
const [results] = await pool.query(
|
`SELECT ref_id, obj_id
|
FROM ${database}.object_reference as obr
|
WHERE obr.obj_id = ${objId}
|
`
|
)
|
return results.length ? results[0] : undefined
|
}
|
|
/////////////////////////////////////////////////////////////////////////
|
|
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
|
}
|