Reworked database model from scratch
This commit is contained in:
parent
32a5c97c02
commit
0aa9e663ff
|
@ -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)
|
||||||
|
);`);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 }
|
Loading…
Reference in a new issue