Reworked database model from scratch

This commit is contained in:
Gu://em_ 2025-04-25 19:51:56 +02:00
parent 32a5c97c02
commit 0aa9e663ff
2 changed files with 68 additions and 30 deletions

View file

@ -31,38 +31,75 @@ async function initDatabase() {
throw new Error("Database is not connected"); throw new Error("Database is not connected");
} }
// Create mods table // --- Users ---
db.exec("CREATE TABLE IF NOT EXISTS Mods ( \
name tinytext PRIMARY KEY, \
display_name tinytext, \
author tinytext\
);");
// Insert example mod
// if (!(await db.exists("mods", "Name", "example"))) {
// console.debug("Creating default mod");
// db.exec(`INSERT INTO Mods (name, display_name, author, versions) \
// VALUES ('example', 'Example mod', '${config.users.admin.username}', '');`);
// }
// Uers table
// Create users 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, \
email tinytext,\ email TINYTEXT,\
password tinytext,\ password TINYTEXT,\
profile_picture longtext,\ profile_picture LONGTEXT,\
preferences longtext, \ settings LONGTEXT, \
favorites longtext \
);"); );");
// Insert default admin account // --- Mods ---
// if (!(await db.exists("users", "Username", config.users.admin.username))) {
// console.debug("Creating default admin user"); // Mods table
// db.exec(`INSERT INTO users (Username, DisplayName, Email, Password, ProfilePicture, Preferences, Favorites) \ db.exec(`CREATE TABLE IF NOT EXISTS Mods (
// VALUES ('${config.users.admin.username}', 'Admin', '', '${config.users.admin.password}', '', '', '' );`); name TINYTEXT PRIMARY KEY,
// } display_name TINYTEXT NOT NULL,
author TINYTEXT NOT NULL,
description TINYTEXT NOT NULL,
FOREIGN KEY author REFERENCES Users(username)
);`);
// Mods complementary infos
db.exec(`CREATE TABLE IF NOT EXISTS ModInfos (
mod TINYTEXT PRIMARY KEY,
full_description TEXT NOT NULL,
license TINYTEXT,
custom_license TEXT,
links TEXT,
creation_date TINYTEXT NOT NULL,
downloads_count INT NOT NULL,
FOREIGN KEY mod REFERENCES Users(username)
);`);
// Mods tags
db.exec(`CREATE TABLE IF NOT EXISTS ModTags (
mod TINYTEXT NOT NULL,
tag TINYTEXT NOT NULL,
FOREIGN KEY mod REFERENCES Mods(name)
);`);
// Mods versions
db.exec(`CREATE TABLE IF NOT EXISTS ModVersions (
mod TINYTEXT NOT NULL,
version_number TINYTEXT NOT NULL,
channel TINYTEXT NOT NULL,
changelog TEXT NOT NULL,
release_date TINYTEXT NOT NULL,
game_version TINYTEXT NOT NULL,
platform TINYTEXT NOT NULL,
environment TINYTEXT NOT NULL,
url TINYTEXT NOT NULL,
FOREGIN KEY mod REFERENCES Mods(name)
);`);
// User favorites (mods)
db.exec(`CREATE TABLE IF NOT EXISTS UserFavoriteMods (
username TINYTEXT NOT NULL,
mod TINYTEXT NOT NULL,
FOREIGN KEY username REFERENCES Users(username),
FOREGIN KEY mod REFERENCES Mods(name)
);`);
} }

View file

@ -22,13 +22,14 @@ async function createUser(user_data) {
const { name, email, password, displayName, profilePicture, favorites, preferences } = user_data; const { name, email, password, displayName, profilePicture, favorites, preferences } = user_data;
//TODO breakdown to handle partial updates
await db.prepare("INSERT INTO Users (username, email, password, display_name, profile_picture, favorites, preferences) \ await db.prepare("INSERT INTO Users (username, email, password, display_name, profile_picture, favorites, preferences) \
VALUES (?, ?, ?, ?)", [name, email, password, displayName, profilePicture, favorites, preferences]); VALUES (?, ?, ?, ?)", [name, email, password, displayName, profilePicture, favorites, preferences]);
return; return;
} }
async function deleteUser(name) { async function deleteUser(name) {
db.prepare("DELETE FROM Users WHERE username = ?", [name]); await db.prepare("DELETE FROM Users WHERE username = ?", [name]);
return; return;
} }
@ -44,4 +45,4 @@ async function updateUser(user_data) {
module.exports = { getAllUsers, getUserByName, createUser, deleteUser, exists } module.exports = { getAllUsers, getUserByName, getUserByEmail, createUser, deleteUser, exists }