diff --git a/backendV2/routes/admin/apiDataMgmt.route.js b/backendV2/routes/admin/apiDataMgmt.route.js index e69de29..804e8b7 100644 --- a/backendV2/routes/admin/apiDataMgmt.route.js +++ b/backendV2/routes/admin/apiDataMgmt.route.js @@ -0,0 +1,41 @@ +import express from "express"; +import { authenticateAdmin } from "../../services/authentication.js"; +const router = express.Router(); +import dotenv from "dotenv"; +dotenv.config(); + +// database funcs import +import { + getAllApiKeys, + createAPIentry, + deleteAPIKey, +} from "./database/apiDataMgmt.database.js"; + +router.get("/get-api-keys", authenticateAdmin, async (req, res) => { + const result = await getAllApiKeys(); + if (result.success) { + return res.status(200).json({ apiKeys: result.data }); + } + return res.status(500).json({ message: "Failed to retrieve API keys" }); +}); + +router.post("/create-api-key", authenticateAdmin, async (req, res) => { + const apiKey = req.body.apiKey; + const username = req.body.username; + const result = await createAPIentry(apiKey, username); + if (result.success) { + return res.status(201).json({ message: "API key created successfully" }); + } + return res.status(500).json({ message: "Failed to create API key" }); +}); + +router.delete("/delete-api-key/:id", authenticateAdmin, async (req, res) => { + const apiKeyId = req.params.id; + const result = await deleteAPIKey(apiKeyId); + if (result.success) { + return res.status(200).json({ message: "API key deleted successfully" }); + } + return res.status(500).json({ message: "Failed to delete API key" }); +}); + +export default router; diff --git a/backendV2/routes/admin/database/apiDataMgmt.database.js b/backendV2/routes/admin/database/apiDataMgmt.database.js index e69de29..b86790e 100644 --- a/backendV2/routes/admin/database/apiDataMgmt.database.js +++ b/backendV2/routes/admin/database/apiDataMgmt.database.js @@ -0,0 +1,37 @@ +import mysql from "mysql2"; +import dotenv from "dotenv"; +dotenv.config(); + +const pool = mysql + .createPool({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + }) + .promise(); + +export const getAllApiKeys = async () => { + const [rows] = await pool.query("SELECT * FROM apiKeys"); + if (rows.length > 0) { + return { success: true, data: rows }; + } + return { success: false }; +}; + +export const createAPIentry = async (apiKey, user) => { + const [result] = await pool.query( + "INSERT INTO apiKeys (api_key, username) VALUES (?, ?)", + [apiKey, user] + ); + if (result.affectedRows > 0) return { success: true }; + return { success: false }; +}; + +export const deleteAPKey = async (apiKeyId) => { + const [result] = await pool.query("DELETE FROM apiKeys WHERE id = ?", [ + apiKeyId, + ]); + if (result.affectedRows > 0) return { success: true }; + return { success: false }; +}; diff --git a/backendV2/server.js b/backendV2/server.js index 08fd7d7..9b337ff 100644 --- a/backendV2/server.js +++ b/backendV2/server.js @@ -10,6 +10,7 @@ import userMgmtRouter from "./routes/app/userMgmt.route.js"; import userDataMgmtRouter from "./routes/admin/userDataMgmt.route.js"; import loanDataMgmtRouter from "./routes/admin/loanDataMgmt.route.js"; import itemDataMgmtRouter from "./routes/admin/itemDataMgmt.route.js"; +import apiDataMgmtRouter from "./routes/admin/apiDataMgmt.route.js"; env.config(); const app = express(); @@ -24,6 +25,7 @@ app.use("/api/users", userMgmtRouter); app.use("/api/admin/loan-data", loanDataMgmtRouter); app.use("/api/admin/user-data", userDataMgmtRouter); app.use("/api/admin/item-data", itemDataMgmtRouter); +app.use("/api/admin/api-data", apiDataMgmtRouter); // Increase body size limits to support large CSV JSON payloads app.use(express.urlencoded({ extended: true, limit: "10mb" }));