implement admin panel with login functionality and dashboard layout
This commit is contained in:
@@ -8,6 +8,7 @@ import {
|
||||
getBorrowableItemsFromDatabase,
|
||||
createLoanInDatabase,
|
||||
onTake,
|
||||
loginAdmin,
|
||||
onReturn,
|
||||
} from "../services/database.js";
|
||||
import { authenticate, generateToken } from "../services/tokenService.js";
|
||||
@@ -166,4 +167,33 @@ router.post("/createLoan", authenticate, async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
// Admin panel functions
|
||||
|
||||
router.post("/loginAdmin", async (req, res) => {
|
||||
const { username, password } = req.body || {};
|
||||
if (!username || !password) {
|
||||
return res
|
||||
.status(400)
|
||||
.json({ message: "Username and password are required" });
|
||||
}
|
||||
|
||||
const result = await loginAdmin(username, password);
|
||||
if (result.success) {
|
||||
const token = await generateToken({
|
||||
username: result.data.username,
|
||||
role: result.data.role,
|
||||
});
|
||||
|
||||
return res.status(200).json({
|
||||
message: "Login successful",
|
||||
first_name: result.data.first_name,
|
||||
token,
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(401).json({ message: "Invalid credentials" });
|
||||
});
|
||||
|
||||
export default router;
|
||||
|
@@ -12,6 +12,17 @@ CREATE TABLE `users` (
|
||||
UNIQUE KEY `username` (`username`)
|
||||
);
|
||||
|
||||
CREATE TABLE `admins` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`username` varchar(100) NOT NULL,
|
||||
`password` varchar(255) NOT NULL,
|
||||
`first_name` varchar(255) NOT NULL,
|
||||
`last_name` varchar(255) NOT NULL,
|
||||
`entry_created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `username` (`username`)
|
||||
);
|
||||
|
||||
CREATE TABLE `loans` (
|
||||
`id` int NOT NULL AUTO_INCREMENT,
|
||||
`username` varchar(100) NOT NULL,
|
||||
|
@@ -319,3 +319,12 @@ export const onReturn = async (loanId) => {
|
||||
}
|
||||
return { success: false };
|
||||
};
|
||||
|
||||
export const loginAdmin = async (username, password) => {
|
||||
const [result] = await pool.query(
|
||||
"SELECT * FROM admins WHERE username = ? AND password = ?",
|
||||
[username, password]
|
||||
);
|
||||
if (result.length > 0) return { success: true, data: result[0] };
|
||||
return { success: false };
|
||||
};
|
||||
|
Reference in New Issue
Block a user