From eb4be67c8985321d23abb822364f2152e1cb3166 Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 28 Mar 2025 23:06:21 +0100 Subject: [PATCH] feat: functional /mods endpoint (getAllMods) --- .gitignore | 6 +++++- src/models/modpacks.js => data/sqlite.db | 0 server.js | 1 + src/controllers/modpacks.js | 0 src/controllers/mods.js | 14 ++++++++++++++ src/database/sqlite.js | 6 ++++-- src/models/mod.js | 16 ++++++++++++---- src/models/modpack.js | 0 src/routes/mods.js | 13 +++++++++++-- src/services/modService.js | 8 ++++++++ 10 files changed, 55 insertions(+), 9 deletions(-) rename src/models/modpacks.js => data/sqlite.db (100%) create mode 100644 src/controllers/modpacks.js create mode 100644 src/controllers/mods.js create mode 100644 src/models/modpack.js diff --git a/.gitignore b/.gitignore index b9ed5c4..27c5a85 100644 --- a/.gitignore +++ b/.gitignore @@ -133,4 +133,8 @@ dist .yarn/unplugged .yarn/build-state.yml .yarn/install-state.gz -.pnp.* \ No newline at end of file +.pnp.* + + +# Temporary +tests/ \ No newline at end of file diff --git a/src/models/modpacks.js b/data/sqlite.db similarity index 100% rename from src/models/modpacks.js rename to data/sqlite.db diff --git a/server.js b/server.js index 518eef3..bfe5665 100644 --- a/server.js +++ b/server.js @@ -35,6 +35,7 @@ console.debug("Port: ", port); // Database connection db = getDatabase(config.database); +db.connect(); // --- Routing --- diff --git a/src/controllers/modpacks.js b/src/controllers/modpacks.js new file mode 100644 index 0000000..e69de29 diff --git a/src/controllers/mods.js b/src/controllers/mods.js new file mode 100644 index 0000000..e3ebec9 --- /dev/null +++ b/src/controllers/mods.js @@ -0,0 +1,14 @@ +const mod_service = require("../services/modService") + +async function getAllMods(req, res) { + try { + console.debug("Calling controller"); + const query_result = await mod_service.getAllMods(); + console.debug("Controller OK"); + return res.json(query_result); + } catch (error) { + return res.status(500).json({ error: error.message }); + } +} + +module.exports = {getAllMods}; \ No newline at end of file diff --git a/src/database/sqlite.js b/src/database/sqlite.js index 87db6d4..663a5d8 100644 --- a/src/database/sqlite.js +++ b/src/database/sqlite.js @@ -1,13 +1,15 @@ +// TODO promisify +const sqlite = require("better-sqlite3"); + class SQLiteDatabase { constructor(config) { - const sqlite = require("better-sqlite3"); this.config = config; this.db = null; } async connect() { try { - const db = new sqlite("./data/sqlite.db") + this.db = new sqlite("./data/sqlite.db") // db.pragma("journal_mode = WAL") console.log("Connected to SQLite"); } catch (err) { diff --git a/src/models/mod.js b/src/models/mod.js index 788f0fe..ae99115 100644 --- a/src/models/mod.js +++ b/src/models/mod.js @@ -1,11 +1,12 @@ // const db = require("..."); -async function getAllMods() { +async function getAllMods() { + console.debug("Calling model"); return db.query("SELECT * FROM mods"); } -async function getModsByName(name) { - return db.query("SELECT * FROM mods WHERE name = ?", [name]); +async function getModByName(name) { + return db.query("SELECT display_name FROM mods WHERE name = ?", [name]); } // --- WIP --- @@ -16,10 +17,17 @@ async function createMod(mod_data) { return db.query("INSERT INTO mods (name, description) VALUES (?, ?)", [name, description]); } +async function updateMod(mod_data) { + console.log("WARNING: using a WIP function : updateMod (models/mods.js)") + throw new Error("Not implemented"); + // const { name, description } = mod_data; + // return db.query("INSERT INTO mods (name, description) VALUES (?, ?)", [name, description]); +} + async function deleteMod(name) { console.log("WARNING: using a WIP function : deleteMod (models/mods.js)") return db.query("DELETE FROM mods WHERE name = ?", [name]); } -module.exports = { getAllMods, getModsByName } \ No newline at end of file +module.exports = { getAllMods, getModByName } \ No newline at end of file diff --git a/src/models/modpack.js b/src/models/modpack.js new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/mods.js b/src/routes/mods.js index 96ac770..9c98f86 100644 --- a/src/routes/mods.js +++ b/src/routes/mods.js @@ -1,11 +1,20 @@ const express = require("express"); +const controller = require("../controllers/mods"); const router = express.Router(); // List mods -router.get("/list", async (req,res) => { +router.get("/", async (req,res) => { console.debug("Accessing mods list"); - res.send("No list yet"); + res.send(controller.getAllMods()); + // res.send("No list yet"); }); +router.get("/:name", async (req,res) => { + const name = req.params.name; + console.debug("Accessing mod " + name) + res.send("Not implemented"); + // res.send(name + " is not there yet"); +}) + module.exports = router; \ No newline at end of file diff --git a/src/services/modService.js b/src/services/modService.js index e69de29..54f46f4 100644 --- a/src/services/modService.js +++ b/src/services/modService.js @@ -0,0 +1,8 @@ +const model = require("../models/mod"); + +async function getAllMods() { + console.debug("Calling service"); + return model.getAllMods(); +} + +module.exports = { getAllMods }; \ No newline at end of file