Refactor code structure for improved readability and maintainability
This commit is contained in:
@@ -19,8 +19,8 @@ import {
|
||||
} from "./lib/licenseService.js";
|
||||
import { HOST, PATHS, PORT } from "./lib/config.js";
|
||||
import { ensureSchema } from "./lib/schema.js";
|
||||
import { authenticateUser, registerUser } from "./lib/userService.js";
|
||||
import { requireAuth } from "./middleware/auth.js";
|
||||
import { authenticateUser, registerUser, adminCreateUser, listUsers, getUserById } from "./lib/userService.js";
|
||||
import { requireAuth, requireAdmin } from "./middleware/auth.js";
|
||||
|
||||
const app = express();
|
||||
app.use(express.json());
|
||||
@@ -75,6 +75,41 @@ app.get("/api/auth/me", requireAuth, (req, res) => {
|
||||
res.json({ user: req.user });
|
||||
});
|
||||
|
||||
app.get("/api/admin/users", requireAuth, requireAdmin, async (_req, res) => {
|
||||
try {
|
||||
const users = await listUsers();
|
||||
res.json({ count: users.length, items: users });
|
||||
} catch (error) {
|
||||
res.status(500).json({ error: "Kon gebruikers niet laden." });
|
||||
}
|
||||
});
|
||||
|
||||
app.post("/api/admin/users", requireAuth, requireAdmin, async (req, res) => {
|
||||
try {
|
||||
const { username, name, email, password, isAdmin } = req.body || {};
|
||||
if (!username || !name || !email || !password) {
|
||||
return res.status(400).json({ error: "Alle velden zijn verplicht." });
|
||||
}
|
||||
if (String(password).length < 8) {
|
||||
return res.status(400).json({ error: "Wachtwoord moet minimaal 8 karakters zijn." });
|
||||
}
|
||||
const user = await adminCreateUser({
|
||||
username: String(username).trim(),
|
||||
name: String(name).trim(),
|
||||
email: String(email).trim().toLowerCase(),
|
||||
password: String(password),
|
||||
isAdmin: Boolean(isAdmin)
|
||||
});
|
||||
res.status(201).json({ user });
|
||||
} catch (error) {
|
||||
if (error?.code === "ER_DUP_ENTRY") {
|
||||
const field = error.meta === "EMAIL" ? "e-mailadres" : "gebruikersnaam";
|
||||
return res.status(409).json({ error: `Dit ${field} is al in gebruik.` });
|
||||
}
|
||||
res.status(500).json({ error: "Gebruiker aanmaken mislukt." });
|
||||
}
|
||||
});
|
||||
|
||||
app.get("/api/plugins", async (_req, res) => {
|
||||
try {
|
||||
const repos = await readRepos(PATHS.reposFile);
|
||||
@@ -145,7 +180,19 @@ app.get("/api/plugins/:owner/:repo", async (req, res) => {
|
||||
|
||||
app.get("/api/licenses", requireAuth, async (req, res) => {
|
||||
try {
|
||||
const payload = await listLicensesByUser(req.user.id);
|
||||
let targetUserId = req.user.id;
|
||||
if (req.user.isAdmin && req.query.userId) {
|
||||
const parsed = Number(req.query.userId);
|
||||
if (Number.isNaN(parsed)) {
|
||||
return res.status(400).json({ error: "Ongeldige userId." });
|
||||
}
|
||||
const targetUser = await getUserById(parsed);
|
||||
if (!targetUser) {
|
||||
return res.status(404).json({ error: "Gebruiker niet gevonden." });
|
||||
}
|
||||
targetUserId = parsed;
|
||||
}
|
||||
const payload = await listLicensesByUser(targetUserId);
|
||||
res.json({
|
||||
count: payload.length,
|
||||
updatedAt: new Date().toISOString(),
|
||||
@@ -182,7 +229,20 @@ app.post("/api/licenses", requireAuth, async (req, res) => {
|
||||
return res.status(400).json({ error: "Kon plugin gegevens niet ophalen." });
|
||||
}
|
||||
|
||||
const payload = await createLicense(req.user.id, {
|
||||
let ownerUserId = req.user.id;
|
||||
if (req.user.isAdmin && body.userId) {
|
||||
const parsed = Number(body.userId);
|
||||
if (Number.isNaN(parsed)) {
|
||||
return res.status(400).json({ error: "Ongeldige gebruiker." });
|
||||
}
|
||||
const target = await getUserById(parsed);
|
||||
if (!target) {
|
||||
return res.status(404).json({ error: "Gebruiker niet gevonden." });
|
||||
}
|
||||
ownerUserId = parsed;
|
||||
}
|
||||
|
||||
const payload = await createLicense(ownerUserId, {
|
||||
label: body.label?.trim(),
|
||||
note: body.note?.trim(),
|
||||
repo: repoEntry
|
||||
|
||||
Reference in New Issue
Block a user