Implement item and loan management routes with CRUD operations
This commit is contained in:
@@ -0,0 +1,42 @@
|
|||||||
|
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 getAllItems = async () => {
|
||||||
|
const [result] = await pool.query("SELECT * FROM items");
|
||||||
|
if (result.length > 0) return { success: true, data: result };
|
||||||
|
return { success: false };
|
||||||
|
};
|
||||||
|
|
||||||
|
export const deleteItemById = async (itemId) => {
|
||||||
|
const [result] = await pool.query("DELETE FROM items WHERE id = ?", [itemId]);
|
||||||
|
if (result.affectedRows > 0) return { success: true };
|
||||||
|
return { success: false };
|
||||||
|
};
|
||||||
|
|
||||||
|
export const createItem = async (item_name, can_borrow_role, in_safe) => {
|
||||||
|
const [result] = await pool.query(
|
||||||
|
"INSERT INTO items (item_name, can_borrow_role, in_safe) VALUES (?, ?, ?)",
|
||||||
|
[item_name, can_borrow_role, in_safe]
|
||||||
|
);
|
||||||
|
if (result.affectedRows > 0) return { success: true };
|
||||||
|
return { success: false };
|
||||||
|
};
|
||||||
|
|
||||||
|
export const editItemById = async (itemId, item_name, can_borrow_role) => {
|
||||||
|
const [result] = await pool.query(
|
||||||
|
"UPDATE items SET item_name = ?, can_borrow_role = ? WHERE id = ?",
|
||||||
|
[item_name, can_borrow_role, itemId]
|
||||||
|
);
|
||||||
|
if (result.affectedRows > 0) return { success: true };
|
||||||
|
return { success: false };
|
||||||
|
};
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
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 getAllLoans = async () => {
|
||||||
|
const [rows] = await pool.query("SELECT * FROM loans");
|
||||||
|
return { success: true, data: rows };
|
||||||
|
};
|
||||||
|
|
||||||
|
export const deleteLoanById = async (loanId) => {
|
||||||
|
const [result] = await pool.query("DELETE FROM loans WHERE id = ?", [loanId]);
|
||||||
|
if (result.affectedRows > 0) return { success: true };
|
||||||
|
return { success: false };
|
||||||
|
};
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import express from "express";
|
||||||
|
import { authenticateAdmin } from "../../services/authentication.js";
|
||||||
|
const router = express.Router();
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
// database funcs import
|
||||||
|
import {
|
||||||
|
editItemById,
|
||||||
|
getAllItems,
|
||||||
|
deleteItemById,
|
||||||
|
createItem,
|
||||||
|
changeSafeState,
|
||||||
|
} from "./database/itemDataMgmt.database.js";
|
||||||
|
|
||||||
|
router.get("/all-items", authenticateAdmin, async (req, res) => {
|
||||||
|
const result = await getAllItems();
|
||||||
|
if (result.success) {
|
||||||
|
return res.status(200).json({ items: result.data });
|
||||||
|
}
|
||||||
|
return res.status(500).json({ message: "Failed to retrieve items" });
|
||||||
|
});
|
||||||
|
|
||||||
|
router.delete("/delete-item/:id", authenticateAdmin, async (req, res) => {
|
||||||
|
const itemId = req.params.id;
|
||||||
|
const result = await deleteItemById(itemId);
|
||||||
|
if (result.success) {
|
||||||
|
return res.status(200).json({ message: "Item deleted successfully" });
|
||||||
|
}
|
||||||
|
return res.status(500).json({ message: "Failed to delete item" });
|
||||||
|
});
|
||||||
|
|
||||||
|
router.post("/create-item", authenticateAdmin, async (req, res) => {
|
||||||
|
const { item_name, can_borrow_role, in_safe } = req.body;
|
||||||
|
const result = await createItem(item_name, can_borrow_role, in_safe);
|
||||||
|
if (result.success) {
|
||||||
|
return res.status(201).json({ message: "Item created successfully" });
|
||||||
|
}
|
||||||
|
return res.status(500).json({ message: "Failed to create item" });
|
||||||
|
});
|
||||||
|
|
||||||
|
router.post("/edit-item/:id", authenticateAdmin, async (req, res) => {
|
||||||
|
const itemId = req.params.id;
|
||||||
|
const { item_name, can_borrow_role } = req.body;
|
||||||
|
const result = await editItemById(
|
||||||
|
itemId,
|
||||||
|
item_name,
|
||||||
|
can_borrow_role
|
||||||
|
);
|
||||||
|
if (result.success) {
|
||||||
|
return res.status(200).json({ message: "Item edited successfully" });
|
||||||
|
}
|
||||||
|
return res.status(500).json({ message: "Failed to edit item" });
|
||||||
|
});
|
||||||
|
|
||||||
|
router.post("/change-safe-state/:id", authenticateAdmin, async (req, res) => {
|
||||||
|
const itemId = req.params.id;
|
||||||
|
const { in_safe } = req.body;
|
||||||
|
const result = await changeSafeState(itemId, in_safe);
|
||||||
|
if (result.success) {
|
||||||
|
return res.status(200).json({ message: "Safe state changed successfully" });
|
||||||
|
}
|
||||||
|
return res.status(500).json({ message: "Failed to change safe state" });
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import express from "express";
|
||||||
|
import { authenticateAdmin } from "../../services/authentication.js";
|
||||||
|
const router = express.Router();
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
// database funcs import
|
||||||
|
import {
|
||||||
|
deleteLoanById,
|
||||||
|
getAllLoans,
|
||||||
|
} from "./database/loanDataMgmt.database.js";
|
||||||
|
|
||||||
|
router.get("/all-loans", authenticateAdmin, async (req, res) => {
|
||||||
|
const result = await getAllLoans();
|
||||||
|
if (result.success) {
|
||||||
|
return res.status(200).json({ loans: result.data });
|
||||||
|
}
|
||||||
|
return res.status(500).json({ message: "Failed to retrieve loans" });
|
||||||
|
});
|
||||||
|
|
||||||
|
router.delete("/delete-loan/:id", authenticateAdmin, async (req, res) => {
|
||||||
|
const loanId = req.params.id;
|
||||||
|
const result = await deleteLoanById(loanId);
|
||||||
|
if (result.success) {
|
||||||
|
return res.status(200).json({ message: "Loan deleted successfully" });
|
||||||
|
}
|
||||||
|
return res.status(500).json({ message: "Failed to delete loan" });
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
import { authenticateAdmin } from "../../services/authentication.js";
|
import { authenticateAdmin } from "../../services/authentication.js";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
import nodemailer from "nodemailer";
|
|
||||||
import dotenv from "dotenv";
|
import dotenv from "dotenv";
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
import cors from "cors";
|
import cors from "cors";
|
||||||
import env from "dotenv";
|
import env from "dotenv";
|
||||||
|
|
||||||
|
// frontend routes
|
||||||
import loansMgmtRouter from "./routes/app/loanMgmt.route.js";
|
import loansMgmtRouter from "./routes/app/loanMgmt.route.js";
|
||||||
import userMgmtRouter from "./routes/app/userMgmt.route.js";
|
import userMgmtRouter from "./routes/app/userMgmt.route.js";
|
||||||
import userDataMgmtRouter from "./routes/admin/userDataMgmt.route.js"
|
|
||||||
|
// admin routes
|
||||||
|
import userDataMgmtRouter from "./routes/admin/userDataMgmt.route.js";
|
||||||
|
import loanDataMgmtRouter from "./routes/admin/loanDataMgmt.route.js";
|
||||||
|
import itemDataMgmtRouter from "./routes/admin/itemDataMgmt.route.js";
|
||||||
|
|
||||||
env.config();
|
env.config();
|
||||||
const app = express();
|
const app = express();
|
||||||
const port = 8002;
|
const port = 8002;
|
||||||
@@ -14,8 +21,9 @@ app.use("/api/loans", loansMgmtRouter);
|
|||||||
app.use("/api/users", userMgmtRouter);
|
app.use("/api/users", userMgmtRouter);
|
||||||
|
|
||||||
// admin routes
|
// admin routes
|
||||||
|
app.use("/api/admin/loan-data", loanDataMgmtRouter);
|
||||||
app.use("/api/admin/user-data", userDataMgmtRouter);
|
app.use("/api/admin/user-data", userDataMgmtRouter);
|
||||||
|
app.use("/api/admin/item-data", itemDataMgmtRouter);
|
||||||
|
|
||||||
// Increase body size limits to support large CSV JSON payloads
|
// Increase body size limits to support large CSV JSON payloads
|
||||||
app.use(express.urlencoded({ extended: true, limit: "10mb" }));
|
app.use(express.urlencoded({ extended: true, limit: "10mb" }));
|
||||||
|
|||||||
Reference in New Issue
Block a user