Merge branch 'dev' into debian12
This commit is contained in:
@@ -11,7 +11,6 @@ import {
|
|||||||
import { authenticate, generateToken } from "../services/tokenService.js";
|
import { authenticate, generateToken } from "../services/tokenService.js";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
// Example endpoint
|
|
||||||
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) {
|
||||||
|
@@ -5,6 +5,7 @@ import {
|
|||||||
changeInSafeStateV2,
|
changeInSafeStateV2,
|
||||||
setReturnDateV2,
|
setReturnDateV2,
|
||||||
setTakeDateV2,
|
setTakeDateV2,
|
||||||
|
getLoanByCodeV2,
|
||||||
} from "../services/database.js";
|
} from "../services/database.js";
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
@@ -44,6 +45,19 @@ router.post("/controlInSafe/:key/:itemId/:state", async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.get("/getLoanByCode/:key/:loan_code", async (req, res) => {
|
||||||
|
if (req.params.key === process.env.ADMIN_ID) {
|
||||||
|
const loan_code = req.params.loan_code;
|
||||||
|
|
||||||
|
const result = await getLoanByCodeV2(loan_code);
|
||||||
|
if (result.success) {
|
||||||
|
res.status(200).json({ data: result.data });
|
||||||
|
} else {
|
||||||
|
res.status(404).json({ message: "Loan not found" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Route for API to set the return date
|
// Route for API to set the return date
|
||||||
router.post("/setReturnDate/:key/:loan_code", async (req, res) => {
|
router.post("/setReturnDate/:key/:loan_code", async (req, res) => {
|
||||||
if (req.params.key === process.env.ADMIN_ID) {
|
if (req.params.key === process.env.ADMIN_ID) {
|
||||||
|
@@ -29,6 +29,17 @@ export const getItemsFromDatabaseV2 = async () => {
|
|||||||
return { success: false };
|
return { success: false };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getLoanByCodeV2 = async (loan_code) => {
|
||||||
|
const [result] = await pool.query(
|
||||||
|
"SELECT * FROM loans WHERE loan_code = ?;",
|
||||||
|
[loan_code]
|
||||||
|
);
|
||||||
|
if (result.length > 0) {
|
||||||
|
return { success: true, data: result[0] };
|
||||||
|
}
|
||||||
|
return { success: false };
|
||||||
|
};
|
||||||
|
|
||||||
export const changeInSafeStateV2 = async (itemId, state) => {
|
export const changeInSafeStateV2 = async (itemId, state) => {
|
||||||
const [result] = await pool.query(
|
const [result] = await pool.query(
|
||||||
"UPDATE items SET inSafe = ? WHERE id = ?",
|
"UPDATE items SET inSafe = ? WHERE id = ?",
|
||||||
|
@@ -6,7 +6,11 @@ import Form2 from "./components/Form2";
|
|||||||
import Form4 from "./components/Form4";
|
import Form4 from "./components/Form4";
|
||||||
import LoginForm from "./components/LoginForm";
|
import LoginForm from "./components/LoginForm";
|
||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
import { fetchAllData, ALL_ITEMS_UPDATED_EVENT } from "./utils/fetchData";
|
import {
|
||||||
|
fetchAllData,
|
||||||
|
ALL_ITEMS_UPDATED_EVENT,
|
||||||
|
AUTH_LOGOUT_EVENT,
|
||||||
|
} from "./utils/fetchData";
|
||||||
import { myToast } from "./utils/toastify";
|
import { myToast } from "./utils/toastify";
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
@@ -18,10 +22,17 @@ function App() {
|
|||||||
setIsLoggedIn(true);
|
setIsLoggedIn(true);
|
||||||
fetchAllData(token);
|
fetchAllData(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
localStorage.setItem("borrowableItems", JSON.stringify([]));
|
localStorage.setItem("borrowableItems", JSON.stringify([]));
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const onAuthLogout = () => {
|
||||||
|
setIsLoggedIn(false);
|
||||||
|
};
|
||||||
|
window.addEventListener(AUTH_LOGOUT_EVENT, onAuthLogout);
|
||||||
|
return () => window.removeEventListener(AUTH_LOGOUT_EVENT, onAuthLogout);
|
||||||
|
}, []);
|
||||||
|
|
||||||
const handleLogout = () => {
|
const handleLogout = () => {
|
||||||
Cookies.remove("token");
|
Cookies.remove("token");
|
||||||
localStorage.removeItem("allItems");
|
localStorage.removeItem("allItems");
|
||||||
|
@@ -4,6 +4,22 @@ import { myToast } from "./toastify";
|
|||||||
// Event name used to notify the app when the list of items has been updated
|
// Event name used to notify the app when the list of items has been updated
|
||||||
export const ALL_ITEMS_UPDATED_EVENT = "allItemsUpdated";
|
export const ALL_ITEMS_UPDATED_EVENT = "allItemsUpdated";
|
||||||
export const BORROWABLE_ITEMS_UPDATED_EVENT = "borrowableItemsUpdated";
|
export const BORROWABLE_ITEMS_UPDATED_EVENT = "borrowableItemsUpdated";
|
||||||
|
export const AUTH_LOGOUT_EVENT = "authLogout";
|
||||||
|
|
||||||
|
let sendError = false;
|
||||||
|
|
||||||
|
function logout() {
|
||||||
|
Cookies.remove("token");
|
||||||
|
Cookies.remove("startDate");
|
||||||
|
Cookies.remove("endDate");
|
||||||
|
localStorage.removeItem("allItems");
|
||||||
|
localStorage.removeItem("allLoans");
|
||||||
|
localStorage.removeItem("userLoans");
|
||||||
|
localStorage.removeItem("borrowableItems");
|
||||||
|
window.dispatchEvent(new Event(ALL_ITEMS_UPDATED_EVENT));
|
||||||
|
window.dispatchEvent(new Event(BORROWABLE_ITEMS_UPDATED_EVENT));
|
||||||
|
window.dispatchEvent(new Event(AUTH_LOGOUT_EVENT));
|
||||||
|
}
|
||||||
|
|
||||||
export const fetchAllData = async (token: string | undefined) => {
|
export const fetchAllData = async (token: string | undefined) => {
|
||||||
if (!token) return;
|
if (!token) return;
|
||||||
@@ -16,6 +32,16 @@ export const fetchAllData = async (token: string | undefined) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (response.status === 500) {
|
||||||
|
if (!sendError) {
|
||||||
|
sendError = true;
|
||||||
|
myToast("Session expired. Please log in again.", "error");
|
||||||
|
logout();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
myToast("Failed to fetch items", "error");
|
myToast("Failed to fetch items", "error");
|
||||||
return;
|
return;
|
||||||
@@ -38,6 +64,16 @@ export const fetchAllData = async (token: string | undefined) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (response.status === 500) {
|
||||||
|
if (!sendError) {
|
||||||
|
sendError = true;
|
||||||
|
myToast("Session expired. Please log in again.", "error");
|
||||||
|
logout();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
myToast("Failed to fetch loans!", "error");
|
myToast("Failed to fetch loans!", "error");
|
||||||
return;
|
return;
|
||||||
@@ -60,6 +96,16 @@ export const fetchAllData = async (token: string | undefined) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (response.status === 500) {
|
||||||
|
if (!sendError) {
|
||||||
|
sendError = true;
|
||||||
|
myToast("Session expired. Please log in again.", "error");
|
||||||
|
logout();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
myToast("Failed to fetch user loans!", "error");
|
myToast("Failed to fetch user loans!", "error");
|
||||||
return;
|
return;
|
||||||
@@ -122,6 +168,16 @@ export const getBorrowableItems = async () => {
|
|||||||
body: JSON.stringify({ startDate, endDate }),
|
body: JSON.stringify({ startDate, endDate }),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (response.status === 500) {
|
||||||
|
if (!sendError) {
|
||||||
|
sendError = true;
|
||||||
|
myToast("Session expired. Please log in again.", "error");
|
||||||
|
logout();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
myToast("Failed to fetch borrowable items", "error");
|
myToast("Failed to fetch borrowable items", "error");
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user