fixed sidebar and backend for sidebar
This commit is contained in:
@@ -7,7 +7,10 @@ const router = express.Router();
|
|||||||
router.post("/login", async (req, res) => {
|
router.post("/login", async (req, res) => {
|
||||||
const result = await loginFunc(req.body.username, req.body.password);
|
const result = await loginFunc(req.body.username, req.body.password);
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
const token = await generateToken({ username: req.body.username });
|
const token = await generateToken({
|
||||||
|
username: result.data.username,
|
||||||
|
role: result.data.role,
|
||||||
|
});
|
||||||
res.status(200).json({ message: "Login successful", token });
|
res.status(200).json({ message: "Login successful", token });
|
||||||
} else {
|
} else {
|
||||||
res.status(401).json({ message: "Invalid credentials" });
|
res.status(401).json({ message: "Invalid credentials" });
|
||||||
@@ -15,7 +18,8 @@ router.post("/login", async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
router.get("/items", authenticate, async (req, res) => {
|
router.get("/items", authenticate, async (req, res) => {
|
||||||
const result = await getItemsFromDatabase();
|
console.log(req);
|
||||||
|
const result = await getItemsFromDatabase(req.user.role);
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
res.status(200).json(result.data);
|
res.status(200).json(result.data);
|
||||||
} else {
|
} else {
|
||||||
|
@@ -17,14 +17,21 @@ export const loginFunc = async (username, password) => {
|
|||||||
"SELECT * FROM users WHERE username = ? AND password = ?",
|
"SELECT * FROM users WHERE username = ? AND password = ?",
|
||||||
[username, password]
|
[username, password]
|
||||||
);
|
);
|
||||||
if (result.length > 0) return { success: true };
|
if (result.length > 0) return { success: true, data: result[0] };
|
||||||
return { success: false };
|
return { success: false };
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getItemsFromDatabase = async () => {
|
export const getItemsFromDatabase = async (role) => {
|
||||||
const [result] = await pool.query("SELECT * FROM items");
|
const sql =
|
||||||
if (result.length > 0) {
|
role == 0
|
||||||
return { success: true, data: result };
|
? "SELECT * FROM items;"
|
||||||
|
: "SELECT * FROM items WHERE can_borrow_role >= ?";
|
||||||
|
const params = role == 0 ? [] : [role];
|
||||||
|
|
||||||
|
const [rows] = await pool.query(sql, params);
|
||||||
|
if (rows.length > 0) {
|
||||||
|
return { success: true, data: rows };
|
||||||
}
|
}
|
||||||
return { success: false };
|
return { success: false };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -13,6 +13,8 @@ const Header: React.FC = () => {
|
|||||||
<button
|
<button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
Cookies.remove("token");
|
Cookies.remove("token");
|
||||||
|
localStorage.removeItem("allItems");
|
||||||
|
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}}
|
}}
|
||||||
className="text-blue-500 hover:underline"
|
className="text-blue-500 hover:underline"
|
||||||
|
@@ -32,7 +32,12 @@ const Sidebar: React.FC = () => {
|
|||||||
key={item.item_name}
|
key={item.item_name}
|
||||||
className="bg-white/80 rounded-xl p-4 shadow hover:shadow-md transition"
|
className="bg-white/80 rounded-xl p-4 shadow hover:shadow-md transition"
|
||||||
>
|
>
|
||||||
<Object title={item.item_name} description={"test"} />
|
<Object
|
||||||
|
title={item.item_name}
|
||||||
|
description={
|
||||||
|
item.inSafe ? "Im Schließfach" : "Nicht im Schließfach"
|
||||||
|
}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
@@ -40,8 +45,8 @@ const Sidebar: React.FC = () => {
|
|||||||
<div className="mt-6 text-xs text-gray-400 flex items-center gap-4">
|
<div className="mt-6 text-xs text-gray-400 flex items-center gap-4">
|
||||||
<span className="inline-block w-3 h-3 bg-green-400 rounded-full"></span>
|
<span className="inline-block w-3 h-3 bg-green-400 rounded-full"></span>
|
||||||
Verfügbar
|
Verfügbar
|
||||||
<span className="inline-block w-3 h-3 bg-blue-400 rounded-full"></span>
|
<span className="inline-block w-3 h-3 bg-red-400 rounded-full"></span>
|
||||||
Verliehen
|
Außerhalb des Schließfachs
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user