94 lines
1.7 KiB
JavaScript
94 lines
1.7 KiB
JavaScript
const bcrypt = require("bcrypt");
|
|
|
|
async function createUser(
|
|
db,
|
|
title,
|
|
first_name,
|
|
last_name,
|
|
username,
|
|
password,
|
|
role,
|
|
fachrichtung,
|
|
arztnummer
|
|
) {
|
|
const hash = await bcrypt.hash(password, 10);
|
|
|
|
return new Promise((resolve, reject) => {
|
|
db.query(
|
|
`INSERT INTO users
|
|
(title, first_name, last_name, username, password, role, fachrichtung, arztnummer, active)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1)`,
|
|
[
|
|
title,
|
|
first_name,
|
|
last_name,
|
|
username,
|
|
hash,
|
|
role,
|
|
fachrichtung,
|
|
arztnummer,
|
|
],
|
|
(err) => {
|
|
if (err) {
|
|
if (err.code === "ER_DUP_ENTRY") {
|
|
return reject("Benutzername existiert bereits");
|
|
}
|
|
return reject("Datenbankfehler");
|
|
}
|
|
resolve();
|
|
}
|
|
);
|
|
});
|
|
}
|
|
|
|
async function getAllUsers(db, search = null) {
|
|
let sql = `
|
|
SELECT *
|
|
FROM users
|
|
WHERE 1=1
|
|
`;
|
|
const params = [];
|
|
|
|
if (search) {
|
|
sql += `
|
|
AND (
|
|
first_name LIKE ?
|
|
OR last_name LIKE ?
|
|
OR username LIKE ?
|
|
)
|
|
`;
|
|
const q = `%${search}%`;
|
|
params.push(q, q, q);
|
|
}
|
|
|
|
sql += " ORDER BY last_name, first_name";
|
|
|
|
const [rows] = await db.promise().query(sql, params);
|
|
return rows;
|
|
}
|
|
|
|
async function updateUserById(db, userId, data) {
|
|
const { title, first_name, last_name, username, role } = data;
|
|
|
|
const [result] = await db.promise().query(
|
|
`
|
|
UPDATE users
|
|
SET title = ?,
|
|
first_name = ?,
|
|
last_name = ?,
|
|
username = ?,
|
|
role = ?
|
|
WHERE id = ?
|
|
`,
|
|
[title, first_name, last_name, username, role, userId]
|
|
);
|
|
|
|
return result;
|
|
}
|
|
|
|
module.exports = {
|
|
createUser,
|
|
getAllUsers,
|
|
updateUserById,
|
|
};
|