wf-radio/src/models/user.js

124 lines
3.3 KiB
JavaScript
Raw Normal View History

2025-03-31 09:42:30 +02:00
const { getDatabase } = require('../database/index');
const AppError = require('../utils/appError');
const db = getDatabase();
// --- Get ---
async function getAllUsers(name) {
return db.query("SELECT username, display_name, email, profile_picture FROM Users WHERE username = ?", [name]);
2025-03-31 09:42:30 +02:00
}
async function getUserByName(name) {
return await db.query("SELECT username, display_name, profile_picture, role FROM Users WHERE username = ?;", [name]);
}
async function getUserByEmail(email) {
return await db.query("SELECT email, username FROM Users WHERE email = ?;", [email]);
}
async function getFullUserInfos(name) {
return await db.query("SELECT username, display_name, email, profile_picture, role, settings FROM Users WHERE username = ?;", [name]);
}
async function getUserPassword(name) {
return await db.query("SELECT username, password FROM Users WHERE username = ?;", [name]);
2025-03-31 09:42:30 +02:00
}
async function exists(name) {
return await db.exists("Users", "username", name);
2025-03-31 09:42:30 +02:00
}
// --- Create ---
async function createUser( username, email, password, displayName, profilePicture, settings ) {
2025-03-31 09:42:30 +02:00
// Create user
await db.prepare("INSERT INTO Users (username, email, password, display_name, role) \
VALUES (?, ?, ?, ?, ?)", [username, email, password, displayName, "user"]);
// Handle nullable fields
if (profilePicture) {
await updateUserAttribute(username, "profile_picture", profilePicture);
}
if (settings) {
await updateUserAttribute(username, "settings", settings);
}
2025-03-31 09:42:30 +02:00
return;
}
async function addFavoriteMods(username, favs) {
const promises = favs.map(async (mod) => {
db.query(`INSERT INTO UserFavoriteMods
(username, mod) VALUES (?, ?);`,
[username, mod]);
});
await Promise.all(promises);
return;
}
// --- Update ---
async function updateUser(username, display_name, email, profile_picture, settings) {
if (display_name) {
await updateUserAttribute(username, "display_name", display_name);
}
if (email) {
await updateUserAttribute(username, "email", email);
}
if (profile_picture) {
await updateUserAttribute(username, "profile_picture", profile_picture)
}
if (settings) {
await updateUserAttribute(username, "settings", settings);
}
}
async function updateUserPassword(username, password) {
await db.prepare(`UPDATE Users SET password = ? WHERE username = ?`, [password, username]);
2025-03-31 09:42:30 +02:00
}
async function updateUserAttribute(username, attribute, value) {
await db.prepare(`UPDATE Users SET ${attribute} = ? WHERE username = ?`, [value, username]);
return;
2025-03-31 09:42:30 +02:00
}
// --- Delete ---
async function deleteUser(username) {
await db.prepare("DELETE FROM Users WHERE username = ?", [username]);
return;
}
async function deleteFavoriteMods(username, favs) {
const promises = favs.map(async (mod) => {
db.query(`DELETE FROM UserFavoriteMods
WHERE username = ? AND mod = ?;`, [username, mod]);
});
// Await
await Promise.all(promises);
return;
}
2025-03-31 09:42:30 +02:00
// --- Exports ---
2025-03-31 09:42:30 +02:00
module.exports = { getAllUsers, getUserByName, getUserByEmail, getFullUserInfos, getUserPassword,
createUser, addFavoriteMods,
updateUser,
deleteUser, deleteFavoriteMods,
exists }