From 0aa9e663ff416d286eef2bb2ab7da7985be1add3 Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 25 Apr 2025 19:51:56 +0200 Subject: [PATCH] Reworked database model from scratch --- src/database/index.js | 93 ++++++++++++++++++++++++++++++------------- src/models/user.js | 5 ++- 2 files changed, 68 insertions(+), 30 deletions(-) diff --git a/src/database/index.js b/src/database/index.js index 28dc108..0e7bed9 100644 --- a/src/database/index.js +++ b/src/database/index.js @@ -31,38 +31,75 @@ async function initDatabase() { throw new Error("Database is not connected"); } - // Create mods table - 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}', '');`); - // } + // --- Users --- - - // Create users table + // Uers table db.exec("CREATE TABLE IF NOT EXISTS Users ( \ - username tinytext PRIMARY KEY, \ - display_name tinytext, \ - email tinytext,\ - password tinytext,\ - profile_picture longtext,\ - preferences longtext, \ - favorites longtext \ + username TINYTEXT PRIMARY KEY, \ + display_name TINYTEXT, \ + email TINYTEXT,\ + password TINYTEXT,\ + profile_picture LONGTEXT,\ + settings LONGTEXT, \ );"); - // Insert default admin account - // if (!(await db.exists("users", "Username", config.users.admin.username))) { - // console.debug("Creating default admin user"); - // db.exec(`INSERT INTO users (Username, DisplayName, Email, Password, ProfilePicture, Preferences, Favorites) \ - // VALUES ('${config.users.admin.username}', 'Admin', '', '${config.users.admin.password}', '', '', '' );`); - // } + // --- Mods --- + + // Mods table + db.exec(`CREATE TABLE IF NOT EXISTS Mods ( + 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) + );`); + } diff --git a/src/models/user.js b/src/models/user.js index dc4c989..9be6cb9 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -22,13 +22,14 @@ async function createUser(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) \ VALUES (?, ?, ?, ?)", [name, email, password, displayName, profilePicture, favorites, preferences]); return; } async function deleteUser(name) { - db.prepare("DELETE FROM Users WHERE username = ?", [name]); + await db.prepare("DELETE FROM Users WHERE username = ?", [name]); return; } @@ -44,4 +45,4 @@ async function updateUser(user_data) { -module.exports = { getAllUsers, getUserByName, createUser, deleteUser, exists } \ No newline at end of file +module.exports = { getAllUsers, getUserByName, getUserByEmail, createUser, deleteUser, exists } \ No newline at end of file