feat: Added base for users support

This commit is contained in:
Gu://em_ 2025-03-31 09:42:30 +02:00
parent 480df977fb
commit 491f16b8f9
8 changed files with 190 additions and 5 deletions

View file

@ -1,10 +1,11 @@
const handleError = require("../middleware/errors");
async function helloWorld(req, res) { async function helloWorld(req, res) {
try { try {
const query_result = "Hello there!"; const query_result = "Unknown development version";
res.send(query_result); res.send(query_result);
} catch (error) { } catch (error) {
console.debug("Error at HelloWorld controller"); handleError(error);
res.status(500).json({ error: error.message });
} }
} }

47
src/controllers/users.js Normal file
View file

@ -0,0 +1,47 @@
const handleError = require("../middleware/errors");
const user_service = require("../services/userService")
async function getAllUsers(req, res) {
try {
console.debug("Calling controller");
const query_result = await user_service.getAllUsers();
res.json(query_result);
} catch (error) {
console.error("ERROR: Couldn't get users: ");
handleError(error, req, res, null);
}
}
async function getUserByName(req, res) {
try {
const query_result = await user_service.getUserByName(req.params.name);
res.json(query_result);
} catch (error) {
console.error("ERROR: Couldn't get user " + req.params.name + ": ");
handleError(error, req, res, null);
}
}
async function createUser(req, res) {
try {
await user_service.createUser(req.body);
res.sendStatus(200);
} catch (error) {
console.error("ERROR: Couldn't create user:", error.message);
handleError(error, req, res, null);
}
}
async function deleteUser(req, res) {
try {
await user_service.deleteUser(req.params.name);
return res.sendStatus(200);
} catch (error) {
console.error("ERROR: Couldn't delete user " + req.params.name + ":", error.message);
handleError(error, req, res, null);
}
}
module.exports = { getAllUsers, getUserByName, createUser, deleteUser };

55
src/models/user.js Normal file
View file

@ -0,0 +1,55 @@
const { getDatabase } = require('../database/index');
const AppError = require('../utils/appError');
const db = getDatabase();
async function getAllUsers() {
return db.query("SELECT * FROM users");
}
async function getUserByName(name) {
try {
console.debug("Searching for", name);
const res = await db.query("SELECT * FROM users WHERE Name = ?;", [name]);
if (res && res.length > 0) {
return res[0];
} else {
return null;
}
} catch (err) {
console.error("Error in getUserByName:", err);
throw err;
}
}
async function exists(name) {
return db.exists("users", "Name", name);
}
async function createUser(user_data) {
const { name, email, password, displayName, profilePicture, favorites, preferences } = user_data;
await db.prepare("INSERT INTO users (Name, Email, Password, DisplayName, ProfilePicture, Favorites, Preferences) \
VALUES (?, ?, ?, ?)", [name, email, password, displayName, profilePicture, favorites, preferences]);
return;
}
async function deleteUser(name) {
db.prepare("DELETE FROM users WHERE Name = ?", [name]);
return;
}
// --- WIP ---
async function updateUser(user_data) {
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]);
}
module.exports = { getAllUsers, getUserByName, createUser, deleteUser, exists }

View file

@ -8,4 +8,8 @@ router.get('/', (res, req) => {
controller.helloWorld(res, req); controller.helloWorld(res, req);
}); });
router.get('/version', (res, req) => {
controller.getVersion(res, req);
});
module.exports = router; module.exports = router;

View file

@ -15,14 +15,14 @@ router.post("/", async (req, res) => {
controller.createMod(req, res); controller.createMod(req, res);
}) })
// // Get mod infos
router.get("/:name", async (req,res) => { router.get("/:name", async (req,res) => {
const name = req.params.name; const name = req.params.name;
console.debug("Accessing mod " + name) console.debug("Accessing mod " + name)
controller.getModByName(req, res); controller.getModByName(req, res);
}); });
// // Delete mod
router.delete("/:name", async (req,res) => { router.delete("/:name", async (req,res) => {
const name = req.params.name; const name = req.params.name;
console.debug("Deleting mod " + name) console.debug("Deleting mod " + name)

View file

@ -0,0 +1,33 @@
const express = require("express");
const controller = require("../controllers/users");
const router = express.Router();
// List users
router.get("/", async (req,res) => {
console.debug("Accessing users list");
controller.getAllUsers(req,res);
});
// Create a user
router.post("/", async (req, res) => {
console.debug("Creating user ", req.body.name);
controller.createUser(req, res);
})
// Get user infos
router.get("/:name", async (req,res) => {
const name = req.params.name;
console.debug("Accessing user " + name)
controller.getUserByName(req, res);
});
// Delete user
router.delete("/:name", async (req,res) => {
const name = req.params.name;
console.debug("Deleting user " + name)
controller.deleteUser(req, res);
});
module.exports = router;

View file

@ -0,0 +1,45 @@
const model = require("../models/user");
const AppError = require("../utils/appError");
const { validateUserData } = require("../utils/validate");
const { sanitizeUserData } = require("../utils/sanitize");
async function getAllUsers() {
return model.getAllUsers();
}
async function getUserByName(name) {
return model.getUserByName(name);
}
async function createUser(user_data) {
// Check body validity
await validateUserData(user_data);
// Check authenticity
//TODO no auth provider
// Sanitize
await sanitizeUserData(user_data);
console.debug("Passed validity checks");
model.createUser(user_data);
return;
}
async function deleteUser(name) {
// Check existence
const exists = await model.exists(name);
if (!exists) {
throw new AppError(404, "Not found: Cannot find user with this name");
}
// Check authenticity
//TODO no auth provider
model.deleteUser(name);
return;
}
module.exports = { getAllUsers, getUserByName, createUser, deleteUser };

View file