Updated user model to work with the new database and implemented missing functions

This commit is contained in:
Gu://em_ 2025-04-26 17:43:49 +02:00
parent 0aa9e663ff
commit 4a10e0ff12
2 changed files with 98 additions and 27 deletions

View file

@ -34,14 +34,14 @@ async function initDatabase() {
// --- Users --- // --- Users ---
// Uers table // Uers table
db.exec("CREATE TABLE IF NOT EXISTS Users ( \ db.exec(`CREATE TABLE IF NOT EXISTS Users (
username TINYTEXT PRIMARY KEY, \ username TINYTEXT PRIMARY KEY,
display_name TINYTEXT, \ display_name TINYTEXT NOT NULL,
email TINYTEXT,\ email TINYTEXT NOT NULL,
password TINYTEXT,\ password TINYTEXT NOT NULL,
profile_picture LONGTEXT,\ profile_picture LONGTEXT,
settings LONGTEXT, \ settings LONGTEXT,
);"); );`);
// --- Mods --- // --- Mods ---

View file

@ -2,47 +2,118 @@ const { getDatabase } = require('../database/index');
const AppError = require('../utils/appError'); const AppError = require('../utils/appError');
const db = getDatabase(); const db = getDatabase();
async function getAllUsers() {
return db.query("SELECT * FROM users"); // --- Get ---
async function getAllUsers(name) {
return db.query("SELECT username, display_name, email, profile_picture FROM Users WHERE username = ?", [name]);
} }
async function getUserByName(name) { async function getUserByName(name) {
return await db.query("SELECT * FROM Users WHERE username = ?;", [name]); return await db.query("SELECT username, display_name, profile_picture FROM Users WHERE username = ?;", [name]);
} }
async function getUserByEmail(email) { async function getUserByEmail(email) {
return await db.query("SELECT * FROM Users WHERE email = ?;", [email]); return await db.query("SELECT email, username, display_name, FROM Users WHERE email = ?;", [email]);
}
async function getFullUserInfos(name) {
return await db.query("SELECT username, display_name, email, profile_picture, settings FROM Users WHERE username = ?;", [name]);
}
async function getUserPassword(name) {
return await db.query("SELECT username, password FROM Users WHERE username = ?;", [name]);
} }
async function exists(name) { async function exists(name) {
return db.exists("Users", "username", name); return db.exists("Users", "username", name);
} }
async function createUser(user_data) {
const { name, email, password, displayName, profilePicture, favorites, preferences } = user_data; // --- Create ---
//TODO breakdown to handle partial updates async function createUser( username, email, password, displayName, profilePicture, settings ) {
await db.prepare("INSERT INTO Users (username, email, password, display_name, profile_picture, favorites, preferences) \
VALUES (?, ?, ?, ?)", [name, email, password, displayName, profilePicture, favorites, preferences]); // Create user
await db.prepare("INSERT INTO Users (username, email, password, display_name) \
VALUES (?, ?, ?, ?)", [username, email, password, displayName]);
// Handle nullable fields
if (profilePicture) {
await updateUserAttribute(username, "profile_picture", profilePicture);
}
if (settings) {
await updateUserAttribute(username, "settings", settings);
}
return; return;
} }
async function deleteUser(name) {
await db.prepare("DELETE FROM Users WHERE username = ?", [name]); // --- 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]);
}
async function updateUserFavoriteMods(username, new_favs, deleted_favs) {
// Delete / Add asynchronously
const promises_new = new_favs.map(async (mod) => {
db.query(`INSERT INTO UserFavoriteMods
(username, mod) VALUES (?, ?);`,
[username, mod]);
});
const promises_deleted = deleted_favs.map(async (mod) => {
db.query(`DELETE FROM UserFavoriteMods
WHERE username = ? AND mod = ?;`, [username, mod]);
});
// Await
await Promise.all(promises_new);
await Promise.all(promises_deleted);
return; return;
} }
// --- WIP --- async function updateUserAttribute(username, attribute, value) {
await db.prepare(`UPDATE Users SET ${attribute} = ? WHERE username = ?`, [value, username]);
async function updateUser(user_data) { return;
console.log("WARNING: using a WIP function : updateUser (userels/users.js)");
throw new AppError(501, "Not implemented");
// const { name, description } = user_data;
// return db.query("INSERT INTO users (name, description) VALUES (?, ?)", [name, description]);
} }
// --- Delete ---
async function deleteUser(username) {
await db.prepare("DELETE FROM Users WHERE username = ?", [username]);
return;
}
module.exports = { getAllUsers, getUserByName, getUserByEmail, createUser, deleteUser, exists } // --- Exports ---
module.exports = { getAllUsers, getUserByName, getUserByEmail, getFullUserInfos, getUserPassword,
createUser,
updateUser, updateUserFavoriteMods,
deleteUser,
exists }