From a7371ed853ee53dd769a6fb28e44eb5c6dd6e6f0 Mon Sep 17 00:00:00 2001 From: llAlcatrazll Date: Tue, 21 May 2024 10:24:36 +0800 Subject: [PATCH 1/6] Refactor LocalHost Link --- client/keystone/src/App.jsx | 1 + .../keystone/src/Components/ActiveVenues.jsx | 6 +- client/keystone/src/Components/AdminList.jsx | 246 +++++++++++--- .../src/Components/ArchivedVenues.jsx | 6 +- .../src/Components/Archives/Admins.jsx | 9 +- .../src/Components/Archives/Bookings.jsx | 6 +- .../src/Components/Archives/Officers.jsx | 7 +- .../src/Components/Archives/Venues.jsx | 8 +- .../keystone/src/Components/BookingsAll.jsx | 8 +- .../src/Components/BookingsApproved.jsx | 9 +- .../src/Components/BookingsDenied.jsx | 10 +- .../src/Components/BookingsPending.jsx | 9 +- .../src/Components/CreateBookings.jsx | 79 +++-- .../src/Components/ReactBigCalendar.jsx | 6 +- .../src/Components/RegisteredClubs.jsx | 4 +- .../src/Components/RegisteredUsers.jsx | 248 +++++++++++--- .../keystone/src/Components/UserAnalytics.jsx | 40 ++- .../UserPageComponents/UserDetails.jsx | 82 ++--- .../Components/UserPageComponents/UserLog.jsx | 4 +- .../UserPendingBookings.jsx | 3 +- .../UserPageComponents/UserProfile.jsx | 3 +- client/keystone/src/Pages/LoginPage/Login.jsx | 167 ++++----- client/keystone/src/Pages/Sidebar/Sidebar.jsx | 14 +- .../src/Pages/SidebarPages/UserProfiles.jsx | 53 ++- .../src/Pages/SidebarPages/UserSelect.jsx | 9 + .../src/Pages/SidebarPages/Venues.jsx | 3 +- .../src/assets/Encode _Officers/login_bg.svg | 317 ++++++++++++++++++ client/keystone/src/assets/dark-logo.png | Bin 0 -> 28863 bytes client/keystone/src/reference.txt | 15 +- server/routes/UserProfiles/userFetchAll.js | 7 +- .../routes/UserProfiles/userFetchAllEmail.js | 18 + server/routes/allUsers.js | 20 ++ server/server.js | 4 + 33 files changed, 1086 insertions(+), 335 deletions(-) create mode 100644 client/keystone/src/Pages/SidebarPages/UserSelect.jsx create mode 100644 client/keystone/src/assets/Encode _Officers/login_bg.svg create mode 100644 client/keystone/src/assets/dark-logo.png create mode 100644 server/routes/UserProfiles/userFetchAllEmail.js create mode 100644 server/routes/allUsers.js diff --git a/client/keystone/src/App.jsx b/client/keystone/src/App.jsx index 22a1281..a3a1c98 100644 --- a/client/keystone/src/App.jsx +++ b/client/keystone/src/App.jsx @@ -3,6 +3,7 @@ import LoginPage from "./Pages/LoginPage/Login"; import Landing from "./Pages/LandingPage/Landing"; import { MantineProvider } from "@mantine/core"; import "@mantine/core/styles.css"; +export const UserLink = "http://localhost:5000"; function App() { return ( diff --git a/client/keystone/src/Components/ActiveVenues.jsx b/client/keystone/src/Components/ActiveVenues.jsx index eea30dc..b4dac11 100644 --- a/client/keystone/src/Components/ActiveVenues.jsx +++ b/client/keystone/src/Components/ActiveVenues.jsx @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; import axios from "axios"; - +import { UserLink } from "../App"; function ActiveVenues() { const [venueData, setVenueData] = useState([]); const [currentPage, setCurrentPage] = useState(1); @@ -20,7 +20,7 @@ function ActiveVenues() { const fetchVenues = () => { axios - .get("http://localhost:5000/venues") + .get(`${UserLink}/venues`) .then((res) => { if (Array.isArray(res.data)) { setVenueData(res.data); @@ -33,7 +33,7 @@ function ActiveVenues() { const handleDelete = (venue_id) => { axios - .post(`http://localhost:5000/delete_venu/${venue_id}`) + .post(`${UserLink}/delete_venu/${venue_id}`) .then((res) => { console.log(res.data); fetchVenues(); // Re-fetch the venues after deleting diff --git a/client/keystone/src/Components/AdminList.jsx b/client/keystone/src/Components/AdminList.jsx index 667d229..20256bf 100644 --- a/client/keystone/src/Components/AdminList.jsx +++ b/client/keystone/src/Components/AdminList.jsx @@ -1,13 +1,26 @@ import { useEffect, useState } from "react"; -import { Link } from "react-router-dom"; +import { Avatar } from "@mantine/core"; import axios from "axios"; -import UserFormControllerAdmin from "../utils/UserFormControllerAdmin"; +import "../Transition.css"; +import { UserLink } from "../App"; +// import UserFormControllerAdmin from "../utils/UserFormControllerAdmin"; function AdminList() { const [isApproved, setIsApproved] = useState([]); - const [deleted, setDeleted] = useState(true); + const [currentPage, setCurrentPage] = useState(1); + const itemsPerPage = 5; + // Logic to slice data based on current page + const indexOfLastItem = currentPage * itemsPerPage; + const indexOfFirstItem = indexOfLastItem - itemsPerPage; + const currentItems = isApproved.slice(indexOfFirstItem, indexOfLastItem); + const user_picture_base_url = + "https://raw.githubusercontent.com/mantinedev/mantine/master/.demo/avatars/"; + // Function to handle page change + const handlePageChange = (pageNumber) => { + setCurrentPage(pageNumber); + }; useEffect(() => { axios - .get("http://localhost:5000/admin_users") + .get(`${UserLink}/admin_users`) .then((res) => { if (Array.isArray(res.data)) { setIsApproved(res.data); @@ -16,60 +29,201 @@ function AdminList() { } }) .catch((err) => console.log(err)); - }, [deleted]); + }, []); function handleDelete(user_id) { axios - .post(`http://localhost:5000/delete_user/${user_id}`) + .post(`${UserLink}/delete_user/${user_id}`) .then((res) => { console.log(res.data); // Toggle the 'deleted' state to trigger a re-fetch of the data - setDeleted((prevDeleted) => !prevDeleted); + // setDeleted((prevDeleted) => !prevDeleted); window.location.reload(); }) .catch((err) => console.log(err)); } - + // ; return ( -
-
-

Admin List

- -
-
- {" "} - {isApproved.map((admin) => ( - -
- {admin.user_id} -
-
- {admin.email} -
-
- {admin.password} -
-
- {admin.username} -
-
- {admin.club} -
- {/* - - */} +
+ {" "} +
+
+ {/* MAIN WRAPPER TO DESGIN */} +

- Read - Edit - + alignContent: "center", + height: "60px", + width: "70%", + // position: "absolute", + // opacity: "20%", + }} + > + Admin Users +

+
+
+ {/*
Headers
*/} +
+
+
+ UserID +
+
+ Profile +
+
+ UserName +
+
+ Email +
+
+ College +
+
+ Club +
+
+
+
+ {/* + */} +
+
- - ))} + {/*
+
User
+
wew
+
wew
+
wew
+
wew
+
wew
+
*/} + {currentItems.map((venue, index) => ( +
+

+ +

+
+
+
+
+ Password: +
+
{venue.password}
+
+
+
+ Position: +
+
{venue.position}
+
+
+
+ Account Type: +
+
{venue.account_type}
+
+ +
+ {" "} + +
+
+ {" "} + {/* handleDelete(venue.booking_id)} + size={22} + className="me-3" + /> + */} +
+
+
+
+ ))} +
+
+ {/* Pagination */} +
+ +
); diff --git a/client/keystone/src/Components/ArchivedVenues.jsx b/client/keystone/src/Components/ArchivedVenues.jsx index e7bfb96..ad7bef8 100644 --- a/client/keystone/src/Components/ArchivedVenues.jsx +++ b/client/keystone/src/Components/ArchivedVenues.jsx @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; import axios from "axios"; - +import { UserLink } from "../App"; function ArchivedVenues() { const [archivedVenue, setArchivedVenue] = useState([]); const [currentPage, setCurrentPage] = useState(1); @@ -25,7 +25,7 @@ function ArchivedVenues() { const fetchVenues = () => { // ARCHIVED VENUES axios - .get("http://localhost:5000/booking_archived") + .get(`${UserLink}/booking_archived`) .then((res) => { if (Array.isArray(res.data)) { setArchivedVenue(res.data); @@ -37,7 +37,7 @@ function ArchivedVenues() { }; const handleRestore = (venue_id) => { axios - .post(`http://localhost:5000/restore_venue/${venue_id}`) + .post(`${UserLink}/restore_venue/${venue_id}`) .then((res) => { console.log(res.data); fetchVenues(); // Re-fetch the venues after deleting diff --git a/client/keystone/src/Components/Archives/Admins.jsx b/client/keystone/src/Components/Archives/Admins.jsx index 8b88ea8..6bc6942 100644 --- a/client/keystone/src/Components/Archives/Admins.jsx +++ b/client/keystone/src/Components/Archives/Admins.jsx @@ -1,14 +1,15 @@ import { useEffect, useState } from "react"; // import { Link } from "react-router-dom"; import axios from "axios"; - +import { UserLink } from "../../App"; function Admins() { const [isPending, setIsPending] = useState([]); const [restore, setRestored] = useState(true); const [dropped, setDropped] = useState([]); + useEffect(() => { axios - .get("http://localhost:5000/deleted_admins") + .get(`${UserLink}/deleted_admins`) .then((res) => { if (Array.isArray(res.data)) { setIsPending(res.data); @@ -20,7 +21,7 @@ function Admins() { }, [restore, dropped]); function handleRestore(user_id) { axios - .post(`http://localhost:5000/restore_user/${user_id}`) + .post(`${UserLink}/restore_user/${user_id}`) .then((res) => { console.log(res.data); // Toggle the 'deleted' state to trigger a re-fetch of the data @@ -31,7 +32,7 @@ function Admins() { } function handleDrop(user_id) { axios - .post(`http://localhost:5000/drop_users/${user_id}`) + .post(`${UserLink}/drop_users/${user_id}`) .then((res) => { console.log(res.data); setDropped((prevDropped) => !prevDropped); diff --git a/client/keystone/src/Components/Archives/Bookings.jsx b/client/keystone/src/Components/Archives/Bookings.jsx index bffb434..203667c 100644 --- a/client/keystone/src/Components/Archives/Bookings.jsx +++ b/client/keystone/src/Components/Archives/Bookings.jsx @@ -1,14 +1,14 @@ import { useEffect, useState } from "react"; // import { Link } from "react-router-dom"; import axios from "axios"; - +import { UserLink } from "../../App"; function Bookings() { const [isPending, setIsPending] = useState([]); const [restore, setRestored] = useState([]); useEffect(() => { axios - .get("http://localhost:5000/deleted_bookings") + .get(`${UserLink}/deleted_bookings`) .then((res) => { if (Array.isArray(res.data)) { setIsPending(res.data); @@ -20,7 +20,7 @@ function Bookings() { }, [restore]); function handleRestore(user_id) { axios - .post(`http://localhost:5000/restore_user/${user_id}`) + .post(`${UserLink}/restore_user/${user_id}`) .then((res) => { console.log(res.data); // Toggle the 'deleted' state to trigger a re-fetch of the data diff --git a/client/keystone/src/Components/Archives/Officers.jsx b/client/keystone/src/Components/Archives/Officers.jsx index b96660b..21a034d 100644 --- a/client/keystone/src/Components/Archives/Officers.jsx +++ b/client/keystone/src/Components/Archives/Officers.jsx @@ -1,13 +1,14 @@ import { useEffect, useState } from "react"; // import { Link } from "react-router-dom"; import axios from "axios"; - +import { UserLink } from "../../App"; function Officers() { const [isPending, setIsPending] = useState([]); const [restore, setRestored] = useState(true); + useEffect(() => { axios - .get("http://localhost:5000/deleted_admins") + .get(`${UserLink}/deleted_admins`) .then((res) => { if (Array.isArray(res.data)) { setIsPending(res.data); @@ -19,7 +20,7 @@ function Officers() { }, [restore]); function handleRestore(user_id) { axios - .post(`http://localhost:5000/restore_user/${user_id}`) + .post(`${UserLink}/restore_user/${user_id}`) .then((res) => { console.log(res.data); // Toggle the 'deleted' state to trigger a re-fetch of the data diff --git a/client/keystone/src/Components/Archives/Venues.jsx b/client/keystone/src/Components/Archives/Venues.jsx index 63b547a..a092788 100644 --- a/client/keystone/src/Components/Archives/Venues.jsx +++ b/client/keystone/src/Components/Archives/Venues.jsx @@ -1,14 +1,14 @@ import { useEffect, useState } from "react"; // import { Link } from "react-router-dom"; import axios from "axios"; - +import { UserLink } from "../../App"; function Venues() { const [isPending, setIsPending] = useState([]); const [restore, setRestored] = useState(true); const [dropped, setDropped] = useState([]); useEffect(() => { axios - .get("http://localhost:5000/deleted_venues") + .get(`${UserLink}/deleted_venues`) .then((res) => { if (Array.isArray(res.data)) { setIsPending(res.data); @@ -20,7 +20,7 @@ function Venues() { }, [restore, dropped]); function handleRestore(venue_id) { axios - .post(`http://localhost:5000/restore_venues/${venue_id}`) + .post(`${UserLink}/restore_venues/${venue_id}`) .then((res) => { console.log(res.data); // Toggle the 'deleted' state to trigger a re-fetch of the data @@ -31,7 +31,7 @@ function Venues() { } function handleDrop(venue_id) { axios - .post(`http://localhost:5000/drop_venues/${venue_id}`) + .post(`${UserLink}/drop_venues/${venue_id}`) .then((res) => { console.log(res.data); setDropped((prevDropped) => !prevDropped); diff --git a/client/keystone/src/Components/BookingsAll.jsx b/client/keystone/src/Components/BookingsAll.jsx index 350844b..61c527e 100644 --- a/client/keystone/src/Components/BookingsAll.jsx +++ b/client/keystone/src/Components/BookingsAll.jsx @@ -4,6 +4,7 @@ import { Avatar } from "@mantine/core"; import { useEffect } from "react"; import axios from "axios"; import "../../src/Transition.css"; +import { UserLink } from "../App"; // export function BookingsAll() { const [data, setData] = useState([]); @@ -15,7 +16,7 @@ export function BookingsAll() { useEffect(() => { axios - .get("http://localhost:5000/venue_bookings") + .get(`${UserLink}/venue_bookings`) .then((res) => { if (Array.isArray(res.data)) { setData(res.data); @@ -58,12 +59,12 @@ export function BookingsAll() { function handleDelete(booking_id) { axios - .post(`http://localhost:5000/delete_booking/${booking_id}`) + .post(`${UserLink}delete_booking/${booking_id}`) .then((res) => { console.log(res.data); // Refresh the data by fetching it again axios - .get("http://localhost:5000/venue_bookings") + .get(`${UserLink}/venue_bookings`) .then((res) => { if (Array.isArray(res.data)) { setData(res.data); @@ -105,7 +106,6 @@ export function BookingsAll() { className="bg-dark-subtle rounded p-3 d-flex flex-column" style={{ height: "85vh" }} > - gg {/*

Bookings All Component

*/}
{ axios - .get("http://localhost:5000/booking_approved") + .get(`${UserLink}/booking_approved`) .then((res) => { if (Array.isArray(res.data)) { setIsPending(res.data); @@ -56,7 +57,7 @@ function BookingsApproved() { }; function handleDelete(booking_id) { axios - .post(`http://localhost:5000/delete_booking/${booking_id}`) + .post(`${UserLink}/delete_booking/${booking_id}`) .then((res) => { console.log(res.data); // Toggle the 'deleted' state to trigger a re-fetch of the data @@ -67,7 +68,7 @@ function BookingsApproved() { } function handlePending(booking_id) { axios - .post(`http://localhost:5000/pending_booking/${booking_id}`) + .post(`${UserLink}/pending_booking/${booking_id}`) .then((res) => { console.log(res.data); fetchApproved(); @@ -76,7 +77,7 @@ function BookingsApproved() { } function handleDeny(booking_id) { axios - .post(`http://localhost:5000/booking_denied/${booking_id}`) + .post(`${UserLink}/booking_denied/${booking_id}`) .then((res) => { console.log(res.data); fetchApproved(); diff --git a/client/keystone/src/Components/BookingsDenied.jsx b/client/keystone/src/Components/BookingsDenied.jsx index e2d7b87..f4bec19 100644 --- a/client/keystone/src/Components/BookingsDenied.jsx +++ b/client/keystone/src/Components/BookingsDenied.jsx @@ -2,6 +2,7 @@ import { useEffect, useState } from "react"; import axios from "axios"; import { IconTrash, IconEdit } from "@tabler/icons-react"; import "../../src/Transition.css"; +import { UserLink } from "../App"; function BookingsPending() { const [isPending, setIsPending] = useState([]); const [currentPage, setCurrentPage] = useState(1); @@ -46,7 +47,7 @@ function BookingsPending() { }, []); const fetchDenied = () => { axios - .get("http://localhost:5000/booking_denied") + .get(`${UserLink}/booking_denied`) .then((res) => { if (Array.isArray(res.data)) { setIsPending(res.data); @@ -58,7 +59,7 @@ function BookingsPending() { }; function handleDelete(booking_id) { axios - .post(`http://localhost:5000/delete_booking/${booking_id}`) + .post(`${UserLink}/delete_booking/${booking_id}`) .then((res) => { console.log(res.data); fetchDenied(); @@ -70,16 +71,17 @@ function BookingsPending() { } function handleApprove(booking_id) { axios - .post(`http://localhost:5000/approve_booking/${booking_id}`) + .post(`${UserLink}/approve_booking/${booking_id}`) .then((res) => { console.log(res.data); fetchDenied(); }) .catch((err) => console.log(err)); } + function handlePending(booking_id) { axios - .post(`http://localhost:5000/pending_booking/${booking_id}`) + .post(`${UserLink}/pending_booking/${booking_id}`) .then((res) => { console.log(res.data); fetchDenied(); diff --git a/client/keystone/src/Components/BookingsPending.jsx b/client/keystone/src/Components/BookingsPending.jsx index b485f60..adeff27 100644 --- a/client/keystone/src/Components/BookingsPending.jsx +++ b/client/keystone/src/Components/BookingsPending.jsx @@ -2,6 +2,7 @@ import { useEffect, useState } from "react"; import axios from "axios"; import { IconTrash, IconEdit } from "@tabler/icons-react"; import "../../src/Transition.css"; +import { UserLink } from "../App"; function BookingsPending() { const [isPending, setIsPending] = useState([]); const [currentPage, setCurrentPage] = useState(1); @@ -46,7 +47,7 @@ function BookingsPending() { }, []); const fetchPending = () => { axios - .get("http://localhost:5000/booking_pending") + .get(`${UserLink}/booking_pending`) .then((res) => { if (Array.isArray(res.data)) { setIsPending(res.data); @@ -59,7 +60,7 @@ function BookingsPending() { function handleDelete(booking_id) { axios - .post(`http://localhost:5000/delete_booking/${booking_id}`) + .post(`${UserLink}/delete_booking/${booking_id}`) .then((res) => { console.log(res.data); fetchPending(); @@ -69,7 +70,7 @@ function BookingsPending() { function handleDeny(booking_id) { axios - .post(`http://localhost:5000/booking_denied/${booking_id}`) + .post(`${UserLink}/booking_denied/${booking_id}`) .then((res) => { console.log(res.data); fetchPending(); @@ -78,7 +79,7 @@ function BookingsPending() { } function handleApprove(booking_id) { axios - .post(`http://localhost:5000/approve_booking/${booking_id}`) + .post(`${UserLink}/approve_booking/${booking_id}`) .then((res) => { console.log(res.data); fetchPending(); diff --git a/client/keystone/src/Components/CreateBookings.jsx b/client/keystone/src/Components/CreateBookings.jsx index 455fbc1..c0eae0a 100644 --- a/client/keystone/src/Components/CreateBookings.jsx +++ b/client/keystone/src/Components/CreateBookings.jsx @@ -1,7 +1,7 @@ import { useState, useEffect } from "react"; import axios from "axios"; import { Avatar } from "@mantine/core"; - +import { UserLink } from "../App"; function CreateBookings() { const [venueData, setVenueData] = useState([]); const [isApproved, setIsApproved] = useState([]); @@ -12,7 +12,7 @@ function CreateBookings() { useEffect(() => { axios - .get("http://localhost:5000/admin_users") + .get(`${UserLink}/admin_users`) .then((res) => { if (Array.isArray(res.data)) { setIsApproved(res.data); @@ -22,7 +22,7 @@ function CreateBookings() { }) .catch((err) => console.log(err)); axios - .get("http://localhost:5000/registered_user") + .get(`${UserLink}/registered_user`) .then((res) => { if (Array.isArray(res.data)) { setisOfficer(res.data); @@ -37,9 +37,9 @@ function CreateBookings() { booker_id: "", eventname: "", event_purpose: "", - event_date: "", - starting_time: "", - ending_time: "", + event_date: "--:--:----", + starting_time: "-----", + ending_time: "-----", event_facility: "", username: "", email: "", @@ -54,7 +54,7 @@ function CreateBookings() { e.preventDefault(); axios - .post("http://localhost:5000/create_booking", values) + .post(`${UserLink}/create_booking`, values) .then((res) => { console.log(res); if ( @@ -75,7 +75,7 @@ function CreateBookings() { useEffect(() => { // ACTIVE VENUES axios - .get("http://localhost:5000/venues") + .get(`${UserLink}/venues`) .then((res) => { if (Array.isArray(res.data)) { setVenueData(res.data); @@ -93,11 +93,35 @@ function CreateBookings() { const hour12 = hourInt % 12 || 12; // Convert to 12-hour format and handle midnight (0) case return `${hour12}:${minute} ${period}`; } - - function formatTimeRange(startTime, endTime) { + function formatDate(dateString) { + const date = new Date(dateString); + if (dateString === "--:--:----") { + return dateString; + } + return date.toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + }); + } + // function formatTimeRange(startTime, endTime) { + // const start = convertTime24to12(startTime); + // const end = convertTime24to12(endTime); + // return `${start} - ${end}`; + // } CONCATENATED + function formatStartingTime(startTime) { + if (startTime === "-----" || startTime === "--:--") { + return startTime; // Return the default value as is + } const start = convertTime24to12(startTime); + return `${start}`; + } + function formatEndingTime(endTime) { + if (endTime === "-----" || endTime === "--:--") { + return endTime; // Return the default value as is + } const end = convertTime24to12(endTime); - return `${start} - ${end}`; + return `${end}`; } return ( @@ -105,7 +129,8 @@ function CreateBookings() { // const date = new Date(dateString); // return date.toLocaleDateString("en-US", { // year: "numeric", - // month: "long", + // month: "long" + // day: "numeric", // }); // } @@ -344,8 +369,8 @@ function CreateBookings() {
{values.username}
@@ -370,6 +395,10 @@ function CreateBookings() {
{values.eventname}
{/* END EVENT NAME AREA */} +
+
Date of Event:
+
{formatDate(values.event_date)}
+
{/* START OF EVENT PURPOSE */}
Event Description:
@@ -380,39 +409,31 @@ function CreateBookings() {
Starting Time:
-
+
{" "} - {formatTimeRange( - values.ending_time, - values.starting_time - )} + {formatStartingTime(values.starting_time)}
Ending Time:
-
- {formatTimeRange( - values.ending_time, - values.starting_time - )} -
+
{formatEndingTime(values.ending_time)}
{/* END OF TIME AREA */} {/* START OF VENUE */} -
+
Event Venue:
{values.event_facility}
{/* END OF VENUE */} +
{/* GROW GREEN WHEN ITS NOT EMPTY OR DEFAULT */} {/*
{values.event_facility}
*/} {/*
{values.username}
*/} -
diff --git a/client/keystone/src/Components/ReactBigCalendar.jsx b/client/keystone/src/Components/ReactBigCalendar.jsx index ee8338f..a984acd 100644 --- a/client/keystone/src/Components/ReactBigCalendar.jsx +++ b/client/keystone/src/Components/ReactBigCalendar.jsx @@ -3,7 +3,7 @@ import { Calendar, momentLocalizer } from "react-big-calendar"; import moment from "moment"; import { useEffect, useState } from "react"; import axios from "axios"; - +import { UserLink } from "../App"; function ReactBigCalendar() { const localizer = momentLocalizer(moment); const [events, setEvents] = useState([]); @@ -18,7 +18,7 @@ function ReactBigCalendar() { useEffect(() => { axios - .get("http://localhost:5000/venues") + .get(`${UserLink}/venues`) .then((res) => { if (Array.isArray(res.data)) { setVenueData(res.data); @@ -32,7 +32,7 @@ function ReactBigCalendar() { useEffect(() => { if (selectedVenue) { axios - .get(`http://localhost:5000/event_venues_booked?venue=${selectedVenue}`) + .get(`${UserLink}/event_venues_booked?venue=${selectedVenue}`) .then((res) => { if (Array.isArray(res.data)) { const mappedEvents = res.data.map((venue) => ({ diff --git a/client/keystone/src/Components/RegisteredClubs.jsx b/client/keystone/src/Components/RegisteredClubs.jsx index 3ae0189..82dbb86 100644 --- a/client/keystone/src/Components/RegisteredClubs.jsx +++ b/client/keystone/src/Components/RegisteredClubs.jsx @@ -1,11 +1,11 @@ import { useEffect, useState } from "react"; import axios from "axios"; - +import { UserLink } from "../App"; function RegisteredClubs() { const [isApproved, setIsApproved] = useState([]); useEffect(() => { axios - .get("http://localhost:5000/all_clubs") + .get(`${UserLink}/all_clubs`) .then((res) => { if (Array.isArray(res.data)) { setIsApproved(res.data); diff --git a/client/keystone/src/Components/RegisteredUsers.jsx b/client/keystone/src/Components/RegisteredUsers.jsx index 042ccec..7c59c06 100644 --- a/client/keystone/src/Components/RegisteredUsers.jsx +++ b/client/keystone/src/Components/RegisteredUsers.jsx @@ -1,13 +1,27 @@ import { useEffect, useState } from "react"; -import { Link } from "react-router-dom"; +// import { Link } from "react-router-dom"; import axios from "axios"; -import UserFormController from "../utils/UserFormController"; +// import UserFormController from "../utils/UserFormController"; +import { Avatar } from "@mantine/core"; +import { UserLink } from "../App"; function RegisteredUsers() { const [isApproved, setIsApproved] = useState([]); - const [deleted, setDeleted] = useState(true); + const [currentPage, setCurrentPage] = useState(1); + const itemsPerPage = 5; + + // Logic to slice data based on current page + const indexOfLastItem = currentPage * itemsPerPage; + const indexOfFirstItem = indexOfLastItem - itemsPerPage; + const currentItems = isApproved.slice(indexOfFirstItem, indexOfLastItem); + const user_picture_base_url = + "https://raw.githubusercontent.com/mantinedev/mantine/master/.demo/avatars/"; + // Function to handle page change + const handlePageChange = (pageNumber) => { + setCurrentPage(pageNumber); + }; useEffect(() => { axios - .get("http://localhost:5000/registered_user") + .get(`${UserLink}/registered_user`) .then((res) => { if (Array.isArray(res.data)) { setIsApproved(res.data); @@ -16,59 +30,201 @@ function RegisteredUsers() { } }) .catch((err) => console.log(err)); - }, [deleted]); + }, []); function handleDelete(user_id) { axios - .post(`http://localhost:5000/delete_user/${user_id}`) + .post(`${UserLink}/delete_user/${user_id}`) .then((res) => { console.log(res.data); // Toggle the 'deleted' state to trigger a re-fetch of the data - setDeleted((prevDeleted) => !prevDeleted); - // window.location.reload(); + // setDeleted((prevDeleted) => !prevDeleted); + window.location.reload(); }) .catch((err) => console.log(err)); } return ( -
-
-

Users List

- -
-
- {" "} - {isApproved.map((user) => ( - -
- {user.user_id} -
-
- {user.position} -
-
- {user.club} -
-
- {user.username} -
-
- {user.email} -
-
- Read - Edit - +
+ {" "} +
+
+ {/* MAIN WRAPPER TO DESGIN */} +

+ Officer Users +

+
+
+ {/*
Headers
*/} +
+
+
+ UserID +
+
+ Profile +
+
+ UserName +
+
+ Email +
+
+ College +
+
+ Club +
+
+
+
+ {/* + */} +
+
- - ))} - {/* - position - club - username - email */} + {/*
+
User
+
wew
+
wew
+
wew
+
wew
+
wew
+
*/} + {currentItems.map((venue, index) => ( +
+

+ +

+
+
+
+
+ Password: +
+
{venue.password}
+
+
+
+ Position: +
+
{venue.position}
+
+
+
+ Account Type: +
+
{venue.account_type}
+
+ +
+ {" "} + +
+
+ {" "} + {/* handleDelete(venue.booking_id)} + size={22} + className="me-3" + /> + */} +
+
+
+
+ ))} +
+
+ {/* Pagination */} +
+ +
); diff --git a/client/keystone/src/Components/UserAnalytics.jsx b/client/keystone/src/Components/UserAnalytics.jsx index c1a0f2c..ae60e64 100644 --- a/client/keystone/src/Components/UserAnalytics.jsx +++ b/client/keystone/src/Components/UserAnalytics.jsx @@ -18,19 +18,37 @@ function UserAnalytics() { return (
-

User Analytics

+ {/*

User Analytics

*/}
-
registered admins
-
{adminCount}
-
-
registered users
-
-
registered clubs
-
-
total users
+
+
+ {" "} +
Registered Admin
+
{adminCount}
+
+
Registered Officers
+
+
Registered Clubs
+
+
Total Users
+
+
+
6
+
{adminCount}
+
+
12
+
+
18
+
+
sdad
+
+
); diff --git a/client/keystone/src/Components/UserPageComponents/UserDetails.jsx b/client/keystone/src/Components/UserPageComponents/UserDetails.jsx index 4958f38..2aba75b 100644 --- a/client/keystone/src/Components/UserPageComponents/UserDetails.jsx +++ b/client/keystone/src/Components/UserPageComponents/UserDetails.jsx @@ -1,51 +1,51 @@ -import { useEffect, useState } from "react"; -import axios from "axios"; +// import { useEffect, useState } from "react"; +// import axios from "axios"; function UserDetails() { - const [userDetails, setUserDetails] = useState([]); - const userEmail = localStorage.getItem("userEmail"); + // const [userDetails, setUserDetails] = useState([]); + // const userEmail = localStorage.getItem("userEmail"); - useEffect(() => { - // Fetch user data based on userEmail - axios - .get(`http://localhost:5000/user_fetchall?email=${userEmail}`) - .then((res) => { - if (Array.isArray(res.data)) { - setUserDetails(res.data); - } else { - console.error("Expected an array but received:", res.data); - } - }) - .catch((err) => console.log(err)); - }, [userEmail]); + // useEffect(() => { + // // Fetch user data based on userEmail + // axios + // .get(`http://localhost:5000/user_fetchallEmail?email=${userEmail}`) + // .then((res) => { + // if (Array.isArray(res.data)) { + // setUserDetails(res.data); + // } else { + // console.error("Expected an array but received:", res.data); + // } + // }) + // .catch((err) => console.log(err)); + // }, [userEmail]); return (
- {userDetails.map((User) => ( -
-
-
-
- {" "} -
Email
-
-
{User.email}
-
-
-
-
User ID
-
{User.user_id}
-
-
-
- Password -
-
{User.password}
-
-
-
+ {/* {userDetails.map((User) => ( */} + {/*
*/} +
+
+
+ {" "} +
Email
+ {/*
{User.email}
*/}
- ))} +
+
+
User ID
+ {/*
{User.user_id}
*/} +
+
+
+ Password +
+ {/*
{User.password}
*/} +
+
+
+
+ {/*
*/} + {/* ))} */}
); } diff --git a/client/keystone/src/Components/UserPageComponents/UserLog.jsx b/client/keystone/src/Components/UserPageComponents/UserLog.jsx index 984e865..027ef3c 100644 --- a/client/keystone/src/Components/UserPageComponents/UserLog.jsx +++ b/client/keystone/src/Components/UserPageComponents/UserLog.jsx @@ -2,7 +2,7 @@ import { useEffect, useState } from "react"; import axios from "axios"; // import { IconTrash, IconEdit } from "@tabler/icons-react"; import "../../Transition.css"; - +import { UserLink } from "../../App"; function UserLog() { const [isPending, setIsPending] = useState([]); const [currentPage, setCurrentPage] = useState(1); @@ -42,7 +42,7 @@ function UserLog() { useEffect(() => { // Fetch user data based on userEmail axios - .get(`http://localhost:5000/user_bookingsall?email=${userEmail}`) + .get(`${UserLink}/user_bookingsall?email=${userEmail}`) .then((res) => { if (Array.isArray(res.data)) { setIsPending(res.data); diff --git a/client/keystone/src/Components/UserPageComponents/UserPendingBookings.jsx b/client/keystone/src/Components/UserPageComponents/UserPendingBookings.jsx index a5f39d6..29f18dd 100644 --- a/client/keystone/src/Components/UserPageComponents/UserPendingBookings.jsx +++ b/client/keystone/src/Components/UserPageComponents/UserPendingBookings.jsx @@ -2,6 +2,7 @@ import { useEffect, useState } from "react"; import axios from "axios"; // import { IconTrash, IconEdit } from "@tabler/icons-react"; import "../../Transition.css"; +import { UserLink } from "../../App"; function UserPendingBookings() { const [isPending, setIsPending] = useState([]); const [currentPage, setCurrentPage] = useState(1); @@ -43,7 +44,7 @@ function UserPendingBookings() { useEffect(() => { // Fetch user data based on userEmail axios - .get(`http://localhost:5000/user_bookingsall?email=${userEmail}`) + .get(`${UserLink}/user_bookingsall?email=${userEmail}`) .then((res) => { if (Array.isArray(res.data)) { setIsPending(res.data); diff --git a/client/keystone/src/Components/UserPageComponents/UserProfile.jsx b/client/keystone/src/Components/UserPageComponents/UserProfile.jsx index 17b4eea..03cd8d5 100644 --- a/client/keystone/src/Components/UserPageComponents/UserProfile.jsx +++ b/client/keystone/src/Components/UserPageComponents/UserProfile.jsx @@ -3,6 +3,7 @@ import { useEffect, useState } from "react"; import axios from "axios"; import { Avatar } from "@mantine/core"; import "../../Transition.css"; +import { UserLink } from "../../App"; function UserProfile() { const [userDetails, setUserDetails] = useState([]); const userEmail = localStorage.getItem("userEmail"); @@ -12,7 +13,7 @@ function UserProfile() { useEffect(() => { // Fetch user data based on userEmail axios - .get(`http://localhost:5000/user_fetchall?email=${userEmail}`) + .get(`${UserLink}/user_fetchall?email=${userEmail}`) .then((res) => { if (Array.isArray(res.data)) { setUserDetails(res.data); diff --git a/client/keystone/src/Pages/LoginPage/Login.jsx b/client/keystone/src/Pages/LoginPage/Login.jsx index f35413c..dcc4ac9 100644 --- a/client/keystone/src/Pages/LoginPage/Login.jsx +++ b/client/keystone/src/Pages/LoginPage/Login.jsx @@ -1,12 +1,11 @@ -// import loginpic from "/loginpic.svg"; import "../../../node_modules/bootstrap/dist/css/bootstrap.min.css"; -// import loginpic from "../../assets/loginpic.svg"; import "./login.css"; import { useState } from "react"; import axios from "axios"; import { useNavigate } from "react-router-dom"; -import { Box, Title, Text, Button } from "@mantine/core"; - +import Background from "../../assets/Encode _Officers/login_bg.svg"; // Make sure the path is correct +import Logo from "../../assets/dark-logo.png"; +import { UserLink } from "../../App"; function LoginPage() { const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); @@ -16,7 +15,7 @@ function LoginPage() { const handleSubmit = async (e) => { e.preventDefault(); try { - const response = await axios.post("http://localhost:5000/check_user", { + const response = await axios.post(`${UserLink}/check_user`, { email, password, }); @@ -34,106 +33,76 @@ function LoginPage() { setErrorMessage("An error occurred. Please try again."); } }; + return ( - <> -
-
-
- {/* */} - - Nice Title - Hellow world - - +
+
+
+
+
-
-
-
- wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +
+ {/* Email input */} +
+ setEmail(e.target.value)} + /> +
+ {/* Password input */} +
+ setPassword(e.target.value)} + /> +
+
+ {/* Checkbox */} +
+ +
- - {/* */} - CONVERT TO CENTER UI WITH LOGO BLACK BG -
- setEmail(e.target.value)} - /> -
- {/* */} -
- setPassword(e.target.value)} - /> -
-
- {/* */} - {/* TO BE CONFIGURED */} -
- - -
- Forgot password? -
- {/* */} - - {errorMessage &&

{errorMessage}

} - {/* Boundary */} -
-

OR

-
- - + Forgot password?
-
+ {/* Submit button */} + + {errorMessage &&

{errorMessage}

} +
- +
); } diff --git a/client/keystone/src/Pages/Sidebar/Sidebar.jsx b/client/keystone/src/Pages/Sidebar/Sidebar.jsx index 56a32c0..df4ce52 100644 --- a/client/keystone/src/Pages/Sidebar/Sidebar.jsx +++ b/client/keystone/src/Pages/Sidebar/Sidebar.jsx @@ -19,6 +19,7 @@ import AllBookings from "../SidebarPages/AllBookings"; import Calendar from "../SidebarPages/Calendar"; import Archive from "../SidebarPages/Archive"; import BigCalendar from "../SidebarPages/BigCalendar"; +import UserSelect from "../SidebarPages/UserSelect"; import "./customschollbar.css"; const Sidebar = () => { const [activePage, setActivePage] = useToggle("usermanagement"); @@ -91,6 +92,14 @@ const Sidebar = () => { User Profile + {/* setActivePage("userselect")} + > + + User Select + + */} { Manage Venues - setActivePage("archive")} > Archive - + */} {/* setActivePage("")} @@ -182,6 +191,7 @@ const Sidebar = () => { {activePage === "calendar" && } {activePage === "archive" && } {activePage === "calendar2" && } + {activePage === "userselect" && }
{/* Content End */}
diff --git a/client/keystone/src/Pages/SidebarPages/UserProfiles.jsx b/client/keystone/src/Pages/SidebarPages/UserProfiles.jsx index 8d5bea5..92e225c 100644 --- a/client/keystone/src/Pages/SidebarPages/UserProfiles.jsx +++ b/client/keystone/src/Pages/SidebarPages/UserProfiles.jsx @@ -1,16 +1,55 @@ -/*{ LEFT SIDE }*/ +import { useEffect, useState } from "react"; +import axios from "axios"; +/* LEFT SIDE COMPONENTS */ import UserProfile from "../../Components/UserPageComponents/UserProfile"; import UserDetails from "../../Components/UserPageComponents/UserDetails"; import UserNotes from "../../Components/UserPageComponents/UserNotes"; -/*{ RIGHT SIDE }*/ +/* RIGHT SIDE COMPONENTS */ import UserLog from "../../Components/UserPageComponents/UserLog"; import UserPendingBookings from "../../Components/UserPageComponents/UserPendingBookings"; +import { UserLink } from "../../App"; function UserProfiles() { + const [data, setData] = useState([]); + const [email, setEmail] = useState(localStorage.getItem("userEmail") || ""); // Initialize with localStorage value + localStorage.setItem("userEmail", email); + + const fetchUser = () => { + axios + .get(`${UserLink}/user_fetchall`) + .then((res) => { + if (Array.isArray(res.data)) { + setData(res.data); + } else { + console.error("Expected an array but received:", res.data); + } + }) + .catch((err) => console.log(err)); + }; + + useEffect(() => { + fetchUser(); + }, []); + return (
-
+
+ {/* LEFT SIDE */}
-
+ +
Email: {email}
+
@@ -20,8 +59,10 @@ function UserProfiles() {
-
-
+ + {/* RIGHT SIDE */} +
+
diff --git a/client/keystone/src/Pages/SidebarPages/UserSelect.jsx b/client/keystone/src/Pages/SidebarPages/UserSelect.jsx new file mode 100644 index 0000000..fac90b6 --- /dev/null +++ b/client/keystone/src/Pages/SidebarPages/UserSelect.jsx @@ -0,0 +1,9 @@ +function UserSelect() { + return ( +
+

User Select Find

+
+ ); +} + +export default UserSelect; diff --git a/client/keystone/src/Pages/SidebarPages/Venues.jsx b/client/keystone/src/Pages/SidebarPages/Venues.jsx index d33a55a..bcfc04d 100644 --- a/client/keystone/src/Pages/SidebarPages/Venues.jsx +++ b/client/keystone/src/Pages/SidebarPages/Venues.jsx @@ -2,6 +2,7 @@ import { useState } from "react"; import axios from "axios"; import ArchivedVenues from "../../Components/ArchivedVenues"; import ActiveVenues from "../../Components/ActiveVenues"; +import { UserLink } from "../../App"; function Venues() { // const [values, setValues] = useState({ @@ -12,7 +13,7 @@ function Venues() { console.log(values); axios - .post("http://localhost:5000/add_venue", values) + .post(`${UserLink}/add_venue`, values) .then((res) => { console.log(res); }) diff --git a/client/keystone/src/assets/Encode _Officers/login_bg.svg b/client/keystone/src/assets/Encode _Officers/login_bg.svg new file mode 100644 index 0000000..0c4afc9 --- /dev/null +++ b/client/keystone/src/assets/Encode _Officers/login_bg.svg @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/keystone/src/assets/dark-logo.png b/client/keystone/src/assets/dark-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d91db19cf4b9727760677d5d0cf58d4ef54b6a39 GIT binary patch literal 28863 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 { - const userEmail = req.query.email; // Get userEmail from query parameters - const sql = "SELECT * FROM user_login WHERE email = ? AND deleted = 'Active'"; + // const userEmail = req.query.email; // Get userEmail from query parameters + const sql = + "SELECT * FROM user_login WHERE deleted = 'Active' AND `account_type` = 'Admin'"; - db.query(sql, [userEmail], (err, result) => { + db.query(sql, (err, result) => { if (err) { console.error("Error fetching user data:", err); return res.status(500).json({ message: "Server error" }); diff --git a/server/routes/UserProfiles/userFetchAllEmail.js b/server/routes/UserProfiles/userFetchAllEmail.js new file mode 100644 index 0000000..9739c34 --- /dev/null +++ b/server/routes/UserProfiles/userFetchAllEmail.js @@ -0,0 +1,18 @@ +const express = require("express"); +const router = express.Router(); +const db = require("../../db"); + +router.get("/user_fetchallEmail`", (req, res) => { + const userEmail = req.query.email; // Get userEmail from query parameters + const sql = "SELECT * FROM user_login WHERE email = ? AND deleted = 'Active'"; + + db.query(sql, [userEmail], (err, result) => { + if (err) { + console.error("Error fetching user data:", err); + return res.status(500).json({ message: "Server error" }); + } + return res.json(result); + }); +}); + +module.exports = router; diff --git a/server/routes/allUsers.js b/server/routes/allUsers.js new file mode 100644 index 0000000..6a45900 --- /dev/null +++ b/server/routes/allUsers.js @@ -0,0 +1,20 @@ +const express = require("express"); +const router = express.Router(); + +// Import the database connection +const db = require("../db"); // Adjust the path as necessary + +// ADMIN USERS +router.get("/all_users", (req, res) => { + const sql = "SELECT * FROM user_login WHERE `deleted`='Active'"; + + db.query(sql, (err, result) => { + if (err) { + console.error("Error fetching venue data:", err); + return res.status(500).json({ message: "Server error" }); // Sending 500 status for internal server errors + } + return res.json(result); + }); +}); + +module.exports = router; diff --git a/server/server.js b/server/server.js index d8621fa..3811f68 100644 --- a/server/server.js +++ b/server/server.js @@ -38,6 +38,8 @@ const dropUserRoutes = require("./routes/Archives/dropUsers"); /*{ PROFILE PAGE }*/ const userFetchAllRoutes = require("./routes/UserProfiles/userFetchAll"); const userBookingsRoutes = require("./routes/UserProfiles/userBookingsAll"); +const fetchAllUsersRoutes = require("./routes/UserProfiles/userFetchAll"); +const fetchAllUserEmalRoutes = require("./routes/UserProfiles/userFetchAllEmail"); /*{ CALENDAR PAGE } */ const userBookingsAllFilterRoutes = require("./routes/bookingAllCalendar"); /*{ CHAGNGE BOOKING STATUS } */ @@ -86,6 +88,8 @@ app.use("/", dropUserRoutes); /*{ PROFILE PAGE }*/ app.use("/", userFetchAllRoutes); app.use("/", userBookingsRoutes); +app.use("/", fetchAllUsersRoutes); +app.use("/", fetchAllUserEmalRoutes); // /*{ CALENDAR PAGE } */ app.use("/api", userBookingsAllFilterRoutes); From 0ec0e45960f533ba33883485febbb0ef33a63f02 Mon Sep 17 00:00:00 2001 From: llAlcatrazll Date: Tue, 21 May 2024 12:51:10 +0800 Subject: [PATCH 2/6] Refreactor Backe --- client/keystone/src/Transition.css | 2 +- server/routes/Archives/deletedAdmins.js | 4 +-- server/routes/Archives/deletedBookings.js | 4 +-- server/routes/Archives/deletedOfficers.js | 4 +-- server/routes/Archives/deletedVenues.js | 4 +-- server/routes/Archives/dropUsers.js | 4 +-- server/routes/Archives/dropVenues.js | 4 +-- server/routes/Archives/restoreBookings.js | 4 +-- server/routes/Archives/restoreUser.js | 4 +-- server/routes/Archives/restoreVenues.js | 4 +-- server/routes/UserProfiles/userBookingsAll.js | 4 +-- server/routes/UserProfiles/userFetchAll.js | 4 +-- .../routes/UserProfiles/userFetchAllEmail.js | 4 +-- server/routes/activeVenues.js | 4 +-- server/routes/addVenue.js | 4 +-- server/routes/adminUsers.js | 4 +-- server/routes/allUsers.js | 4 +-- server/routes/allclubs.js | 4 +-- server/routes/archivedVenues.js | 4 +-- server/routes/bookingAll.js | 4 +-- server/routes/bookingAllCalendar.js | 29 ++++++++------- server/routes/bookingApproved.js | 4 +-- server/routes/bookingDelete.js | 4 +-- server/routes/bookingPending.js | 4 +-- .../routes/booking_status/approveBooking.js | 4 +-- server/routes/booking_status/denyBooking.js | 4 +-- .../routes/booking_status/pendingBooking.js | 4 +-- server/routes/booklingDenied.js | 4 +-- server/routes/deleteUser.js | 4 +-- server/routes/deleteVenues.js | 5 +-- server/routes/registeredUsers.js | 4 +-- server/routes/restoreVenues.js | 4 +-- server/server.js | 36 +++++++++---------- 33 files changed, 96 insertions(+), 92 deletions(-) diff --git a/client/keystone/src/Transition.css b/client/keystone/src/Transition.css index 68a4f9d..ccc8986 100644 --- a/client/keystone/src/Transition.css +++ b/client/keystone/src/Transition.css @@ -1,5 +1,5 @@ .accordion-collapse { - transition: height 0.3s ease-in-out; + transition: height 0.2s ease-in-out; } th { padding: auto; diff --git a/server/routes/Archives/deletedAdmins.js b/server/routes/Archives/deletedAdmins.js index dc39f25..70ebc3a 100644 --- a/server/routes/Archives/deletedAdmins.js +++ b/server/routes/Archives/deletedAdmins.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); // Adjust the path as necessary // Fetch approved bookings -router.get("/deleted_admins", (req, res) => { +router.get(`${BackendUserLink}/deleted_admins`, (req, res) => { const sql = "SELECT * FROM user_login WHERE `deleted`='Deleted' AND `account_type`='Admin'"; db.query(sql, (err, result) => { diff --git a/server/routes/Archives/deletedBookings.js b/server/routes/Archives/deletedBookings.js index 2f70c03..ecc8ec3 100644 --- a/server/routes/Archives/deletedBookings.js +++ b/server/routes/Archives/deletedBookings.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); // Adjust the path as necessary // Fetch approved bookings -router.get("/deleted_bookings", (req, res) => { +router.get(`${BackendUserLink}/deleted_bookings`, (req, res) => { const sql = "SELECT * FROM venue_bookings WHERE `deleted`='Deleted'"; db.query(sql, (err, result) => { if (err) res.json({ message: "Server error" }); diff --git a/server/routes/Archives/deletedOfficers.js b/server/routes/Archives/deletedOfficers.js index fcd0a6f..91fab26 100644 --- a/server/routes/Archives/deletedOfficers.js +++ b/server/routes/Archives/deletedOfficers.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); // Adjust the path as necessary // Fetch approved bookings -router.get("/deleted_officers", (req, res) => { +router.get(`${BackendUserLink}/deleted_officers`, (req, res) => { const sql = "SELECT * FROM user_login WHERE `deleted`='Deleted' AND `account_type`='Officer'"; db.query(sql, (err, result) => { diff --git a/server/routes/Archives/deletedVenues.js b/server/routes/Archives/deletedVenues.js index 1723ca7..5da41cf 100644 --- a/server/routes/Archives/deletedVenues.js +++ b/server/routes/Archives/deletedVenues.js @@ -1,12 +1,12 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); //const db = require("../../db"); // Adjust the path as necessary // Fetch approved bookings -router.get("/deleted_venues", (req, res) => { +router.get(`${BackendUserLink}/deleted_venues`, (req, res) => { const sql = "SELECT * FROM event_venues WHERE `deleted`='Deleted'"; db.query(sql, (err, result) => { if (err) res.json({ message: "Server error" }); diff --git a/server/routes/Archives/dropUsers.js b/server/routes/Archives/dropUsers.js index 8107492..960feee 100644 --- a/server/routes/Archives/dropUsers.js +++ b/server/routes/Archives/dropUsers.js @@ -1,9 +1,9 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); // Adjust the path as necessary - +import { BackendUserLink } from "../../server"; // DELETE VENUE -router.post("/drop_users/:user_id", (req, res) => { +router.post(`${BackendUserLink}/drop_users/:user_id`, (req, res) => { const user_id = req.params.user_id; const sql = "DELETE FROM user_login WHERE user_id=?"; db.query(sql, [user_id], (err, result) => { diff --git a/server/routes/Archives/dropVenues.js b/server/routes/Archives/dropVenues.js index 2a10a37..62dc335 100644 --- a/server/routes/Archives/dropVenues.js +++ b/server/routes/Archives/dropVenues.js @@ -1,9 +1,9 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); // Adjust the path as necessary - +import { BackendUserLink } from "../../server"; // DELETE VENUE -router.post("/drop_venues/:venue_id", (req, res) => { +router.post(`${BackendUserLink}/drop_venues/:venue_id`, (req, res) => { const venue_id = req.params.venue_id; const sql = "DELETE FROM event_venues WHERE venue_id=?"; db.query(sql, [venue_id], (err, result) => { diff --git a/server/routes/Archives/restoreBookings.js b/server/routes/Archives/restoreBookings.js index a821265..6bc4255 100644 --- a/server/routes/Archives/restoreBookings.js +++ b/server/routes/Archives/restoreBookings.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post("/restore_booking/:booking_id", (req, res) => { +router.post(`${BackendUserLink}/restore_booking/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `deleted`='Active' WHERE booking_id=?"; db.query(sql, [booking_id], (err, result) => { diff --git a/server/routes/Archives/restoreUser.js b/server/routes/Archives/restoreUser.js index 154d008..713c4d5 100644 --- a/server/routes/Archives/restoreUser.js +++ b/server/routes/Archives/restoreUser.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post("/restore_user/:user_id", (req, res) => { +router.post(`${BackendUserLink}/restore_user/:user_id`, (req, res) => { const user_id = req.params.user_id; const sql = "UPDATE user_login SET `deleted`='Active' WHERE user_id=?"; db.query(sql, [user_id], (err, result) => { diff --git a/server/routes/Archives/restoreVenues.js b/server/routes/Archives/restoreVenues.js index a67de4b..b20367b 100644 --- a/server/routes/Archives/restoreVenues.js +++ b/server/routes/Archives/restoreVenues.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post("/restore_venues/:venue_id", (req, res) => { +router.post(`${BackendUserLink}/restore_venues/:venue_id`, (req, res) => { const venue_id = req.params.venue_id; const sql = "UPDATE event_venues SET `deleted`='Active' WHERE venue_id=?"; db.query(sql, [venue_id], (err, result) => { diff --git a/server/routes/UserProfiles/userBookingsAll.js b/server/routes/UserProfiles/userBookingsAll.js index 38f63ad..d0bb58a 100644 --- a/server/routes/UserProfiles/userBookingsAll.js +++ b/server/routes/UserProfiles/userBookingsAll.js @@ -1,8 +1,8 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); - -router.get("/user_bookingsall", (req, res) => { +import { BackendUserLink } from "../../server"; +router.get(`${BackendUserLink}/user_bookingsall`, (req, res) => { const userEmail = req.query.email; // Get userEmail from query parameters const sql = "SELECT * FROM venue_bookings WHERE email = ? AND deleted = 'Active'"; diff --git a/server/routes/UserProfiles/userFetchAll.js b/server/routes/UserProfiles/userFetchAll.js index 51df472..c35e6d6 100644 --- a/server/routes/UserProfiles/userFetchAll.js +++ b/server/routes/UserProfiles/userFetchAll.js @@ -1,8 +1,8 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); - -router.get("/user_fetchall", (req, res) => { +import { BackendUserLink } from "../../server"; +router.get(`${BackendUserLink}/user_fetchall`, (req, res) => { // const userEmail = req.query.email; // Get userEmail from query parameters const sql = "SELECT * FROM user_login WHERE deleted = 'Active' AND `account_type` = 'Admin'"; diff --git a/server/routes/UserProfiles/userFetchAllEmail.js b/server/routes/UserProfiles/userFetchAllEmail.js index 9739c34..20191df 100644 --- a/server/routes/UserProfiles/userFetchAllEmail.js +++ b/server/routes/UserProfiles/userFetchAllEmail.js @@ -1,8 +1,8 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); - -router.get("/user_fetchallEmail`", (req, res) => { +import { BackendUserLink } from "../../server"; +router.get(`${BackendUserLink}/user_fetchallEmail`, (req, res) => { const userEmail = req.query.email; // Get userEmail from query parameters const sql = "SELECT * FROM user_login WHERE email = ? AND deleted = 'Active'"; diff --git a/server/routes/activeVenues.js b/server/routes/activeVenues.js index df84c06..7d879e8 100644 --- a/server/routes/activeVenues.js +++ b/server/routes/activeVenues.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch active venues -router.get("/venues", (req, res) => { +router.get(`${BackendUserLink}/venues`, (req, res) => { const sql = "SELECT * FROM event_venues WHERE `deleted`='Active'"; db.query(sql, (err, result) => { if (err) { diff --git a/server/routes/addVenue.js b/server/routes/addVenue.js index 3273a51..ea79b91 100644 --- a/server/routes/addVenue.js +++ b/server/routes/addVenue.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // ADD EVENT VENUES -router.post("/add_venue", (req, res) => { +router.post(`${BackendUserLink}/add_venue`, (req, res) => { const sql = "INSERT INTO event_venues (`venue_name`) VALUES (?)"; const values = [req.body.venue_name]; console.log(req.body); diff --git a/server/routes/adminUsers.js b/server/routes/adminUsers.js index 2e2ced0..7ccbe09 100644 --- a/server/routes/adminUsers.js +++ b/server/routes/adminUsers.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // ADMIN USERS -router.get("/admin_users", (req, res) => { +router.get(`${BackendUserLink}/admin_users`, (req, res) => { const sql = "SELECT * FROM user_login WHERE `account_type`='Admin' AND `deleted`='Active'"; diff --git a/server/routes/allUsers.js b/server/routes/allUsers.js index 6a45900..5501a0a 100644 --- a/server/routes/allUsers.js +++ b/server/routes/allUsers.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // ADMIN USERS -router.get("/all_users", (req, res) => { +router.get(`${BackendUserLink}/all_users`, (req, res) => { const sql = "SELECT * FROM user_login WHERE `deleted`='Active'"; db.query(sql, (err, result) => { diff --git a/server/routes/allclubs.js b/server/routes/allclubs.js index 70d84e5..d550539 100644 --- a/server/routes/allclubs.js +++ b/server/routes/allclubs.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch active venues -router.get("/all_clubs", (req, res) => { +router.get(`${BackendUserLink}/all_clubs`, (req, res) => { const sql = "SELECT DISTINCT `club` FROM user_login "; db.query(sql, (err, result) => { if (err) { diff --git a/server/routes/archivedVenues.js b/server/routes/archivedVenues.js index 3bd1de7..ff0385c 100644 --- a/server/routes/archivedVenues.js +++ b/server/routes/archivedVenues.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch active venues -router.get("/booking_archived", (req, res) => { +router.get(`${BackendUserLink}/booking_archived`, (req, res) => { const sql = "SELECT * FROM event_venues WHERE `deleted`='Deleted'"; db.query(sql, (err, result) => { if (err) { diff --git a/server/routes/bookingAll.js b/server/routes/bookingAll.js index dca6380..e953080 100644 --- a/server/routes/bookingAll.js +++ b/server/routes/bookingAll.js @@ -1,10 +1,10 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary -router.get("/venue_bookings", (req, res) => { +router.get(`${BackendUserLink}/venue_bookings`, (req, res) => { const sql = "SELECT * FROM venue_bookings WHERE `deleted`='Active'"; db.query(sql, (err, result) => { if (err) res.json({ message: "Server error" }); diff --git a/server/routes/bookingAllCalendar.js b/server/routes/bookingAllCalendar.js index 682b335..3fd13d2 100644 --- a/server/routes/bookingAllCalendar.js +++ b/server/routes/bookingAllCalendar.js @@ -2,23 +2,26 @@ const express = require("express"); const bodyParser = require("body-parser"); // Required for parsing JSON bodies const router = express.Router(); const db = require("../db"); // Adjust the path as necessary - +import { BackendUserLink } from "../server"; // Middleware to parse JSON bodies router.use(bodyParser.json()); // Route to fetch venue bookings -router.get("/api/venue_bookings_calendar/:event_facility", (req, res) => { - const eventFacility = req.params.event_facility; - const sql = - "SELECT * FROM venue_bookings WHERE deleted='Active' AND event_facility=?"; - db.query(sql, [eventFacility], (err, result) => { - if (err) { - console.error("Database query error:", err); - return res.status(500).json({ message: "Server error" }); - } - return res.json(result); - }); -}); +router.get( + `${BackendUserLink}/api/venue_bookings_calendar/:event_facility`, + (req, res) => { + const eventFacility = req.params.event_facility; + const sql = + "SELECT * FROM venue_bookings WHERE deleted='Active' AND event_facility=?"; + db.query(sql, [eventFacility], (err, result) => { + if (err) { + console.error("Database query error:", err); + return res.status(500).json({ message: "Server error" }); + } + return res.json(result); + }); + } +); // Export the router so it can be used in the main app file module.exports = router; diff --git a/server/routes/bookingApproved.js b/server/routes/bookingApproved.js index 6ba6110..4867b67 100644 --- a/server/routes/bookingApproved.js +++ b/server/routes/bookingApproved.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch approved bookings -router.get("/booking_approved", (req, res) => { +router.get(`${BackendUserLink}/booking_approved`, (req, res) => { const sql = "SELECT * FROM venue_bookings WHERE `deleted`='Active' AND `status`='Approved'"; db.query(sql, (err, result) => { diff --git a/server/routes/bookingDelete.js b/server/routes/bookingDelete.js index b12fa23..0cfac34 100644 --- a/server/routes/bookingDelete.js +++ b/server/routes/bookingDelete.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // DELETE VENUE -router.post("/delete_booking/:booking_id", (req, res) => { +router.post(`${BackendUserLink}/delete_booking/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `deleted`='Deleted' WHERE booking_id=?"; diff --git a/server/routes/bookingPending.js b/server/routes/bookingPending.js index 9b29fb9..665bdfd 100644 --- a/server/routes/bookingPending.js +++ b/server/routes/bookingPending.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch approved bookings -router.get("/booking_pending", (req, res) => { +router.get(`${BackendUserLink}/booking_pending`, (req, res) => { const sql = "SELECT * FROM venue_bookings WHERE `deleted`='Active' AND `status`='Pending'"; db.query(sql, (err, result) => { diff --git a/server/routes/booking_status/approveBooking.js b/server/routes/booking_status/approveBooking.js index 0e3151a..b7cc43a 100644 --- a/server/routes/booking_status/approveBooking.js +++ b/server/routes/booking_status/approveBooking.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post("/approve_booking/:booking_id", (req, res) => { +router.post(`${BackendUserLink}/approve_booking/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `status`='Approved' WHERE booking_id=?"; diff --git a/server/routes/booking_status/denyBooking.js b/server/routes/booking_status/denyBooking.js index 2777012..d2001d9 100644 --- a/server/routes/booking_status/denyBooking.js +++ b/server/routes/booking_status/denyBooking.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post("/booking_denied/:booking_id", (req, res) => { +router.post(`${BackendUserLink}/booking_denied/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `status`='Denied' WHERE booking_id=?"; db.query(sql, [booking_id], (err, result) => { diff --git a/server/routes/booking_status/pendingBooking.js b/server/routes/booking_status/pendingBooking.js index 6317149..a6fda24 100644 --- a/server/routes/booking_status/pendingBooking.js +++ b/server/routes/booking_status/pendingBooking.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../../server"; // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post("/pending_booking/:booking_id", (req, res) => { +router.post(`${BackendUserLink}/pending_booking/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `status`='Pending' WHERE booking_id=?"; db.query(sql, [booking_id], (err, result) => { diff --git a/server/routes/booklingDenied.js b/server/routes/booklingDenied.js index 5906e97..a02abc7 100644 --- a/server/routes/booklingDenied.js +++ b/server/routes/booklingDenied.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch approved bookings -router.get("/booking_denied", (req, res) => { +router.get(`${BackendUserLink}/booking_denied`, (req, res) => { const sql = "SELECT * FROM venue_bookings WHERE `deleted`='Active' AND `status`='Denied'"; db.query(sql, (err, result) => { diff --git a/server/routes/deleteUser.js b/server/routes/deleteUser.js index 50eb5b9..38a037b 100644 --- a/server/routes/deleteUser.js +++ b/server/routes/deleteUser.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // DELETE VENUE -router.post("/delete_user/:user_id", (req, res) => { +router.post(`${BackendUserLink}/delete_user/:user_id`, (req, res) => { const user_id = req.params.user_id; const sql = "UPDATE user_login SET `deleted`='Deleted' WHERE user_id=?"; db.query(sql, [user_id], (err, result) => { diff --git a/server/routes/deleteVenues.js b/server/routes/deleteVenues.js index 41d3f91..56047c6 100644 --- a/server/routes/deleteVenues.js +++ b/server/routes/deleteVenues.js @@ -1,11 +1,12 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary +const { BackendUserLink } = require("../server"); // DELETE VENUE -router.post("/delete_venu/:venue_id", (req, res) => { +router.post(`${BackendUserLink}/delete_venu/:venue_id`, (req, res) => { const venue_id = req.params.venue_id; const sql = "UPDATE event_venues SET `deleted`='Deleted' WHERE venue_id=?"; db.query(sql, [venue_id], (err, result) => { diff --git a/server/routes/registeredUsers.js b/server/routes/registeredUsers.js index 616de0c..0ce693a 100644 --- a/server/routes/registeredUsers.js +++ b/server/routes/registeredUsers.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // ADMIN USERS -router.get("/registered_user", (req, res) => { +router.get(`${BackendUserLink}/registered_user`, (req, res) => { const sql = "SELECT * FROM user_login WHERE `account_type`='Officer' AND `deleted`='Active'"; diff --git a/server/routes/restoreVenues.js b/server/routes/restoreVenues.js index 70f5f14..1d02ad1 100644 --- a/server/routes/restoreVenues.js +++ b/server/routes/restoreVenues.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); - +import { BackendUserLink } from "../server"; // Import the database connection const db = require("../db"); // Adjust the path as necessary // RESTORE VENUE -router.post("/restore_venue/:venue_id", (req, res) => { +router.post(`${BackendUserLink}/restore_venue/:venue_id`, (req, res) => { const venue_id = req.params.venue_id; const sql = "UPDATE event_venues SET `deleted`='Active' WHERE venue_id=?"; db.query(sql, [venue_id], (err, result) => { diff --git a/server/server.js b/server/server.js index 3811f68..263f4ba 100644 --- a/server/server.js +++ b/server/server.js @@ -3,7 +3,7 @@ const cors = require("cors"); const path = require("path"); const app = express(); const jwt = require("jsonwebtoken"); - +export const BackendUserLink = "http//localhost:5000"; // database connection const db = require("./db"); @@ -26,26 +26,26 @@ const deleteUsersRoutes = require("./routes/deleteUser"); const adminUserRoutes = require("./routes/adminUsers"); const allClubsRoutes = require("./routes/allclubs"); /*{ ARCHIVE } */ -const deletedAdminsRoutes = require("./routes/Archives/deletedAdmins"); +const restoreBookingRoutes = require("./routes/Archives/restoreBookings"); const deletedBookingRoutes = require("./routes/Archives/deletedBookings"); const deletedOfficerRoutes = require("./routes/Archives/deletedOfficers"); +const restoreVenuesRoutes = require("./routes/Archives/restoreVenues"); +const deletedAdminsRoutes = require("./routes/Archives/deletedAdmins"); const deletedVenuesRoutes = require("./routes/Archives/deletedVenues"); const restoreUserRoutes = require("./routes/Archives/restoreUser"); -const restoreVenuesRoutes = require("./routes/Archives/restoreVenues"); -const restoreBookingRoutes = require("./routes/Archives/restoreBookings"); const dropVenuesRoutes = require("./routes/Archives/dropVenues"); const dropUserRoutes = require("./routes/Archives/dropUsers"); /*{ PROFILE PAGE }*/ -const userFetchAllRoutes = require("./routes/UserProfiles/userFetchAll"); +const fetchAllUserEmalRoutes = require("./routes/UserProfiles/userFetchAllEmail"); const userBookingsRoutes = require("./routes/UserProfiles/userBookingsAll"); const fetchAllUsersRoutes = require("./routes/UserProfiles/userFetchAll"); -const fetchAllUserEmalRoutes = require("./routes/UserProfiles/userFetchAllEmail"); +const userFetchAllRoutes = require("./routes/UserProfiles/userFetchAll"); /*{ CALENDAR PAGE } */ const userBookingsAllFilterRoutes = require("./routes/bookingAllCalendar"); /*{ CHAGNGE BOOKING STATUS } */ +const updatetoApprovedRoutes = require("./routes/booking_status/approveBooking"); const updatetoPendingRoutes = require("./routes/booking_status/pendingBooking"); const updatetoDeniedRoutes = require("./routes/booking_status/denyBooking"); -const updatetoApprovedRoutes = require("./routes/booking_status/approveBooking"); // const { verify } = require("crypto"); // @@ -108,7 +108,7 @@ app.use("/", updatetoApprovedRoutes); // CALENDAR // CALENDAR // CALENDAR -app.get("/event_venues_booked", (req, res) => { +app.get("http//localhost:5000/event_venues_booked", (req, res) => { const venue = req.query.venue || ""; // Default to empty string if not provided const sql = "SELECT * FROM venue_bookings WHERE `event_facility`=?"; db.query(sql, [venue], (err, result) => { @@ -159,7 +159,7 @@ const verifyJwt = (req, res, next) => { } }; // JWT AUTH -app.get("/checkauth", verifyJwt, (req, res) => { +app.get("http//localhost:5000/checkauth", verifyJwt, (req, res) => { return res.json("Authenticated"); }); // @@ -168,7 +168,7 @@ app.get("/checkauth", verifyJwt, (req, res) => { // // LOG IN USER -app.post("/check_user", (req, res) => { +app.post("http//localhost:5000/check_user", (req, res) => { const { email, password } = req.body; const sql = "SELECT * FROM user_login WHERE email = ? AND password = ?"; // JWT token passed @@ -191,7 +191,7 @@ app.post("/check_user", (req, res) => { // TRANSER TO INDIVIDUAL // ADD NEW USER -app.post("/add_newuser", (req, res) => { +app.post("http//localhost:5000/add_newuser", (req, res) => { const sql = "INSERT INTO user_login (`email`,`password`,`username`,`college_affiliation`,`club`,`position`,`account_type`)VALUES (?, ?, ?, ?, ?, ?, ?)"; const values = [ @@ -255,7 +255,7 @@ app.listen(port, () => { // // // -app.post("/create_booking", (req, res) => { +app.post("http//localhost:5000/create_booking", (req, res) => { const { booker_id, eventname, @@ -305,7 +305,7 @@ app.post("/create_booking", (req, res) => { // No overlapping bookings, proceed with the insertion const insertSql = ` INSERT INTO venue_bookings (booker_id, eventname, event_purpose, event_date, starting_time, ending_time, event_facility, username, email) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + VALUES (?, ?, ?, ?, ?, ?, ?, ?,x1 ?) `; const insertValues = [ booker_id, @@ -347,7 +347,7 @@ app.post("/create_booking", (req, res) => { // // // -app.get("/all_admins", (req, res) => { +app.get("http//localhost:5000/all_admins", (req, res) => { const sql = "SELECT COUNT(*) AS admin_count FROM user_login WHERE `account_type` = 'Admin';"; db.query(sql, (err, result) => { @@ -362,7 +362,7 @@ app.get("/all_admins", (req, res) => { // /students // DISPLAY ALL BOOKINGS -app.get("/booking", (req, res) => { +app.get("http//localhost:5000/booking", (req, res) => { const sql = "SELECT * FROM user_details WHERE `Deleted`='Active'"; db.query(sql, (err, result) => { if (err) res.json({ message: "Server error" }); @@ -374,7 +374,7 @@ app.get("/booking", (req, res) => { // // /get_student // DISPLAY BOOKING DETAILS -app.get("/get_booking/:id", (req, res) => { +app.get("http//localhost:5000/get_booking/:id", (req, res) => { const id = req.params.id; const sql = "SELECT * FROM user_details WHERE `id`= ?"; db.query(sql, [id], (err, result) => { @@ -386,7 +386,7 @@ app.get("/get_booking/:id", (req, res) => { // // // EDIT BOOKING DETAILS - ADMIN ONLY -app.post("/edit_user/:id", (req, res) => { +app.post("http//localhost:5000/edit_user/:id", (req, res) => { const id = req.params.id; const sql = "UPDATE user_details SET `name`=?, `email`=?, `age`=?, `gender`=? WHERE id=?"; @@ -414,7 +414,7 @@ app.post("/edit_user/:id", (req, res) => { // // // DISPLAY LISTED USERS -app.get("/users", (req, res) => { +app.get("http//localhost:5000/users", (req, res) => { const sql = "SELECT * FROM user_login WHERE `Deleted`='Active'"; db.query(sql, (err, result) => { if (err) res.json({ message: "Server error" }); From e481b2cb431dfd4cc1f5e967f275f6d6acbfe2d3 Mon Sep 17 00:00:00 2001 From: llAlcatrazll Date: Sun, 2 Jun 2024 16:51:49 +0800 Subject: [PATCH 3/6] fixing the issue --- client/keystone/src/App.jsx | 4 +++- .../src/Components/RegisteredClubs.jsx | 11 +++++---- .../keystone/src/Components/UserAnalytics.jsx | 2 +- server/routes/archivedVenues.js | 2 +- server/server.js | 23 +++++++++++-------- 5 files changed, 26 insertions(+), 16 deletions(-) diff --git a/client/keystone/src/App.jsx b/client/keystone/src/App.jsx index a3a1c98..274d36f 100644 --- a/client/keystone/src/App.jsx +++ b/client/keystone/src/App.jsx @@ -3,7 +3,9 @@ import LoginPage from "./Pages/LoginPage/Login"; import Landing from "./Pages/LandingPage/Landing"; import { MantineProvider } from "@mantine/core"; import "@mantine/core/styles.css"; -export const UserLink = "http://localhost:5000"; +// export const UserLink = " :5000"; +export const UserLink = " http://localhost:5000"; +// function App() { return ( diff --git a/client/keystone/src/Components/RegisteredClubs.jsx b/client/keystone/src/Components/RegisteredClubs.jsx index 82dbb86..41e5af5 100644 --- a/client/keystone/src/Components/RegisteredClubs.jsx +++ b/client/keystone/src/Components/RegisteredClubs.jsx @@ -16,13 +16,16 @@ function RegisteredClubs() { .catch((err) => console.log(err)); }, []); return ( -

-

Registered Clubs

-
+
+

Registered Clubs

+
{" "} {isApproved.map((club) => (
-
+
{club.club}
diff --git a/client/keystone/src/Components/UserAnalytics.jsx b/client/keystone/src/Components/UserAnalytics.jsx index ae60e64..fdf0773 100644 --- a/client/keystone/src/Components/UserAnalytics.jsx +++ b/client/keystone/src/Components/UserAnalytics.jsx @@ -46,7 +46,7 @@ function UserAnalytics() {
18
-
sdad
+
36
diff --git a/server/routes/archivedVenues.js b/server/routes/archivedVenues.js index 3bd1de7..1ec4950 100644 --- a/server/routes/archivedVenues.js +++ b/server/routes/archivedVenues.js @@ -5,7 +5,7 @@ const router = express.Router(); const db = require("../db"); // Adjust the path as necessary // Fetch active venues -router.get("/booking_archived", (req, res) => { +router.get(`/booking_archived`, (req, res) => { const sql = "SELECT * FROM event_venues WHERE `deleted`='Deleted'"; db.query(sql, (err, result) => { if (err) { diff --git a/server/server.js b/server/server.js index 3811f68..557e7db 100644 --- a/server/server.js +++ b/server/server.js @@ -26,33 +26,34 @@ const deleteUsersRoutes = require("./routes/deleteUser"); const adminUserRoutes = require("./routes/adminUsers"); const allClubsRoutes = require("./routes/allclubs"); /*{ ARCHIVE } */ -const deletedAdminsRoutes = require("./routes/Archives/deletedAdmins"); + const deletedBookingRoutes = require("./routes/Archives/deletedBookings"); const deletedOfficerRoutes = require("./routes/Archives/deletedOfficers"); +const restoreBookingRoutes = require("./routes/Archives/restoreBookings"); const deletedVenuesRoutes = require("./routes/Archives/deletedVenues"); -const restoreUserRoutes = require("./routes/Archives/restoreUser"); const restoreVenuesRoutes = require("./routes/Archives/restoreVenues"); -const restoreBookingRoutes = require("./routes/Archives/restoreBookings"); +const deletedAdminsRoutes = require("./routes/Archives/deletedAdmins"); +const restoreUserRoutes = require("./routes/Archives/restoreUser"); const dropVenuesRoutes = require("./routes/Archives/dropVenues"); const dropUserRoutes = require("./routes/Archives/dropUsers"); /*{ PROFILE PAGE }*/ -const userFetchAllRoutes = require("./routes/UserProfiles/userFetchAll"); const userBookingsRoutes = require("./routes/UserProfiles/userBookingsAll"); const fetchAllUsersRoutes = require("./routes/UserProfiles/userFetchAll"); +const userFetchAllRoutes = require("./routes/UserProfiles/userFetchAll"); const fetchAllUserEmalRoutes = require("./routes/UserProfiles/userFetchAllEmail"); /*{ CALENDAR PAGE } */ const userBookingsAllFilterRoutes = require("./routes/bookingAllCalendar"); /*{ CHAGNGE BOOKING STATUS } */ +const updatetoApprovedRoutes = require("./routes/booking_status/approveBooking"); const updatetoPendingRoutes = require("./routes/booking_status/pendingBooking"); const updatetoDeniedRoutes = require("./routes/booking_status/denyBooking"); -const updatetoApprovedRoutes = require("./routes/booking_status/approveBooking"); // const { verify } = require("crypto"); // // // handle middleware app.use(express.static(path.join(__dirname, "public"))); -app.use(cors()); +app.use(cors({ origin: "*" })); app.use(express.json()); // Use the route handlers /*{ VENUE PAGE}*/ @@ -245,9 +246,9 @@ app.post("/add_newuser", (req, res) => { // }); // // // CONNECT TO PORT NUMBER -app.listen(port, () => { - console.log("listening"); -}); +// app.listen(port, "0.0.0.0", () => { +// console.log("listening"); +// }); // // // @@ -421,3 +422,7 @@ app.get("/users", (req, res) => { return res.json(result); }); }); + +app.listen(port, "0.0.0.0", () => { + console.log("listening"); +}); From a262e52cb49d9dcd8af4722749da546b9da7be8c Mon Sep 17 00:00:00 2001 From: llAlcatrazll Date: Sun, 2 Jun 2024 17:51:09 +0800 Subject: [PATCH 4/6] Merge branch 'JWT-and-or-sessions' of https://github.com/llAlcatrazll/KeyStone_Clean into JWT-and-or-sessions --- client/keystone/src/reference.txt | 2 +- server/routes/Archives/deletedAdmins.js | 2 +- server/routes/Archives/deletedBookings.js | 2 +- server/routes/Archives/deletedOfficers.js | 2 +- server/routes/Archives/deletedVenues.js | 2 +- server/routes/Archives/dropUsers.js | 2 +- server/routes/Archives/dropVenues.js | 2 +- server/routes/Archives/restoreBookings.js | 2 +- server/routes/Archives/restoreUser.js | 2 +- server/routes/Archives/restoreVenues.js | 3 +- server/routes/UserProfiles/userBookingsAll.js | 2 +- server/routes/UserProfiles/userFetchAll.js | 2 +- .../routes/UserProfiles/userFetchAllEmail.js | 2 +- server/routes/activeVenues.js | 2 +- server/routes/addVenue.js | 2 +- server/routes/adminUsers.js | 2 +- server/routes/allUsers.js | 2 +- server/routes/allclubs.js | 2 +- server/routes/archivedVenues.js | 3 +- server/routes/bookingAll.js | 2 +- server/routes/bookingAllCalendar.js | 2 +- server/routes/bookingApproved.js | 2 +- server/routes/bookingDelete.js | 2 +- server/routes/bookingPending.js | 2 +- .../routes/booking_status/approveBooking.js | 2 +- server/routes/booking_status/denyBooking.js | 2 +- .../routes/booking_status/pendingBooking.js | 2 +- server/routes/booklingDenied.js | 2 +- server/routes/deleteUser.js | 2 +- server/routes/deleteVenues.js | 3 +- server/routes/registeredUsers.js | 2 +- server/routes/restoreVenues.js | 2 +- server/server.js | 43 ++++++------------- 33 files changed, 46 insertions(+), 64 deletions(-) diff --git a/client/keystone/src/reference.txt b/client/keystone/src/reference.txt index c2f29f3..35d4015 100644 --- a/client/keystone/src/reference.txt +++ b/client/keystone/src/reference.txt @@ -152,5 +152,5 @@ https://raw.githubusercontent.com/mantinedev/mantine/master/.demo/avatars/avatar .text-dark .text-muted .text-white - +//hello diff --git a/server/routes/Archives/deletedAdmins.js b/server/routes/Archives/deletedAdmins.js index 70ebc3a..14133b0 100644 --- a/server/routes/Archives/deletedAdmins.js +++ b/server/routes/Archives/deletedAdmins.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary diff --git a/server/routes/Archives/deletedBookings.js b/server/routes/Archives/deletedBookings.js index ecc8ec3..9d5a3ac 100644 --- a/server/routes/Archives/deletedBookings.js +++ b/server/routes/Archives/deletedBookings.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary diff --git a/server/routes/Archives/deletedOfficers.js b/server/routes/Archives/deletedOfficers.js index 91fab26..6b6d43d 100644 --- a/server/routes/Archives/deletedOfficers.js +++ b/server/routes/Archives/deletedOfficers.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary diff --git a/server/routes/Archives/deletedVenues.js b/server/routes/Archives/deletedVenues.js index 5da41cf..03c737e 100644 --- a/server/routes/Archives/deletedVenues.js +++ b/server/routes/Archives/deletedVenues.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); //const db = require("../../db"); // Adjust the path as necessary diff --git a/server/routes/Archives/dropUsers.js b/server/routes/Archives/dropUsers.js index 960feee..ff2cb3c 100644 --- a/server/routes/Archives/dropUsers.js +++ b/server/routes/Archives/dropUsers.js @@ -1,7 +1,7 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); // Adjust the path as necessary -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // DELETE VENUE router.post(`${BackendUserLink}/drop_users/:user_id`, (req, res) => { const user_id = req.params.user_id; diff --git a/server/routes/Archives/dropVenues.js b/server/routes/Archives/dropVenues.js index 62dc335..bcdf307 100644 --- a/server/routes/Archives/dropVenues.js +++ b/server/routes/Archives/dropVenues.js @@ -1,7 +1,7 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); // Adjust the path as necessary -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // DELETE VENUE router.post(`${BackendUserLink}/drop_venues/:venue_id`, (req, res) => { const venue_id = req.params.venue_id; diff --git a/server/routes/Archives/restoreBookings.js b/server/routes/Archives/restoreBookings.js index 6bc4255..988b777 100644 --- a/server/routes/Archives/restoreBookings.js +++ b/server/routes/Archives/restoreBookings.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary diff --git a/server/routes/Archives/restoreUser.js b/server/routes/Archives/restoreUser.js index 713c4d5..9e50abf 100644 --- a/server/routes/Archives/restoreUser.js +++ b/server/routes/Archives/restoreUser.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary diff --git a/server/routes/Archives/restoreVenues.js b/server/routes/Archives/restoreVenues.js index b20367b..f67dd92 100644 --- a/server/routes/Archives/restoreVenues.js +++ b/server/routes/Archives/restoreVenues.js @@ -1,7 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; -// Import the database connection +const { BackendUserLink } = require("../../server"); const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE diff --git a/server/routes/UserProfiles/userBookingsAll.js b/server/routes/UserProfiles/userBookingsAll.js index d0bb58a..8c6d090 100644 --- a/server/routes/UserProfiles/userBookingsAll.js +++ b/server/routes/UserProfiles/userBookingsAll.js @@ -1,7 +1,7 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); router.get(`${BackendUserLink}/user_bookingsall`, (req, res) => { const userEmail = req.query.email; // Get userEmail from query parameters const sql = diff --git a/server/routes/UserProfiles/userFetchAll.js b/server/routes/UserProfiles/userFetchAll.js index c35e6d6..8d8b15f 100644 --- a/server/routes/UserProfiles/userFetchAll.js +++ b/server/routes/UserProfiles/userFetchAll.js @@ -1,7 +1,7 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); router.get(`${BackendUserLink}/user_fetchall`, (req, res) => { // const userEmail = req.query.email; // Get userEmail from query parameters const sql = diff --git a/server/routes/UserProfiles/userFetchAllEmail.js b/server/routes/UserProfiles/userFetchAllEmail.js index 20191df..d7d40ff 100644 --- a/server/routes/UserProfiles/userFetchAllEmail.js +++ b/server/routes/UserProfiles/userFetchAllEmail.js @@ -1,7 +1,7 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); router.get(`${BackendUserLink}/user_fetchallEmail`, (req, res) => { const userEmail = req.query.email; // Get userEmail from query parameters const sql = "SELECT * FROM user_login WHERE email = ? AND deleted = 'Active'"; diff --git a/server/routes/activeVenues.js b/server/routes/activeVenues.js index 7d879e8..cbd262b 100644 --- a/server/routes/activeVenues.js +++ b/server/routes/activeVenues.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/addVenue.js b/server/routes/addVenue.js index ea79b91..4cbc3a8 100644 --- a/server/routes/addVenue.js +++ b/server/routes/addVenue.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); diff --git a/server/routes/adminUsers.js b/server/routes/adminUsers.js index 7ccbe09..4115ec5 100644 --- a/server/routes/adminUsers.js +++ b/server/routes/adminUsers.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/allUsers.js b/server/routes/allUsers.js index 5501a0a..009e7b1 100644 --- a/server/routes/allUsers.js +++ b/server/routes/allUsers.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/allclubs.js b/server/routes/allclubs.js index d550539..7b06a06 100644 --- a/server/routes/allclubs.js +++ b/server/routes/allclubs.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/archivedVenues.js b/server/routes/archivedVenues.js index 416c212..a2a3c55 100644 --- a/server/routes/archivedVenues.js +++ b/server/routes/archivedVenues.js @@ -1,11 +1,10 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch active venues - router.get(`${BackendUserLink}/booking_archived`, (req, res) => { const sql = "SELECT * FROM event_venues WHERE `deleted`='Deleted'"; db.query(sql, (err, result) => { diff --git a/server/routes/bookingAll.js b/server/routes/bookingAll.js index e953080..7f46aea 100644 --- a/server/routes/bookingAll.js +++ b/server/routes/bookingAll.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/bookingAllCalendar.js b/server/routes/bookingAllCalendar.js index 3fd13d2..715dffd 100644 --- a/server/routes/bookingAllCalendar.js +++ b/server/routes/bookingAllCalendar.js @@ -2,7 +2,7 @@ const express = require("express"); const bodyParser = require("body-parser"); // Required for parsing JSON bodies const router = express.Router(); const db = require("../db"); // Adjust the path as necessary -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Middleware to parse JSON bodies router.use(bodyParser.json()); diff --git a/server/routes/bookingApproved.js b/server/routes/bookingApproved.js index 4867b67..0a4fa3d 100644 --- a/server/routes/bookingApproved.js +++ b/server/routes/bookingApproved.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/bookingDelete.js b/server/routes/bookingDelete.js index 0cfac34..0d031b0 100644 --- a/server/routes/bookingDelete.js +++ b/server/routes/bookingDelete.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/bookingPending.js b/server/routes/bookingPending.js index 665bdfd..955346a 100644 --- a/server/routes/bookingPending.js +++ b/server/routes/bookingPending.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/booking_status/approveBooking.js b/server/routes/booking_status/approveBooking.js index b7cc43a..7340313 100644 --- a/server/routes/booking_status/approveBooking.js +++ b/server/routes/booking_status/approveBooking.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary diff --git a/server/routes/booking_status/denyBooking.js b/server/routes/booking_status/denyBooking.js index d2001d9..81a15ad 100644 --- a/server/routes/booking_status/denyBooking.js +++ b/server/routes/booking_status/denyBooking.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary diff --git a/server/routes/booking_status/pendingBooking.js b/server/routes/booking_status/pendingBooking.js index a6fda24..479ba73 100644 --- a/server/routes/booking_status/pendingBooking.js +++ b/server/routes/booking_status/pendingBooking.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../../server"; +const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary diff --git a/server/routes/booklingDenied.js b/server/routes/booklingDenied.js index a02abc7..57ef3f1 100644 --- a/server/routes/booklingDenied.js +++ b/server/routes/booklingDenied.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/deleteUser.js b/server/routes/deleteUser.js index 38a037b..3f73767 100644 --- a/server/routes/deleteUser.js +++ b/server/routes/deleteUser.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/deleteVenues.js b/server/routes/deleteVenues.js index 56047c6..a1471da 100644 --- a/server/routes/deleteVenues.js +++ b/server/routes/deleteVenues.js @@ -1,9 +1,8 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary -const { BackendUserLink } = require("../server"); // DELETE VENUE router.post(`${BackendUserLink}/delete_venu/:venue_id`, (req, res) => { diff --git a/server/routes/registeredUsers.js b/server/routes/registeredUsers.js index 0ce693a..97359c9 100644 --- a/server/routes/registeredUsers.js +++ b/server/routes/registeredUsers.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/routes/restoreVenues.js b/server/routes/restoreVenues.js index 1d02ad1..f7033b4 100644 --- a/server/routes/restoreVenues.js +++ b/server/routes/restoreVenues.js @@ -1,6 +1,6 @@ const express = require("express"); const router = express.Router(); -import { BackendUserLink } from "../server"; +const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary diff --git a/server/server.js b/server/server.js index cdee2bf..9406c2f 100644 --- a/server/server.js +++ b/server/server.js @@ -3,10 +3,11 @@ const cors = require("cors"); const path = require("path"); const app = express(); const jwt = require("jsonwebtoken"); -export const BackendUserLink = "http//localhost:5000"; +const BackendUserLink = "http://localhost:5000"; // Note the correction of URL + +module.exports = { BackendUserLink }; // database connection const db = require("./db"); - // route handlers /*{ VENUE PAGE}*/ const archiveVenueRoutes = require("./routes/archivedVenues"); @@ -26,7 +27,6 @@ const deleteUsersRoutes = require("./routes/deleteUser"); const adminUserRoutes = require("./routes/adminUsers"); const allClubsRoutes = require("./routes/allclubs"); /*{ ARCHIVE } */ -// <<<<<<< HEAD const deletedBookingRoutes = require("./routes/Archives/deletedBookings"); const deletedOfficerRoutes = require("./routes/Archives/deletedOfficers"); @@ -34,29 +34,14 @@ const restoreBookingRoutes = require("./routes/Archives/restoreBookings"); const deletedVenuesRoutes = require("./routes/Archives/deletedVenues"); const restoreVenuesRoutes = require("./routes/Archives/restoreVenues"); const deletedAdminsRoutes = require("./routes/Archives/deletedAdmins"); -// ======= -const restoreBookingRoutes = require("./routes/Archives/restoreBookings"); -const deletedBookingRoutes = require("./routes/Archives/deletedBookings"); -const deletedOfficerRoutes = require("./routes/Archives/deletedOfficers"); -const restoreVenuesRoutes = require("./routes/Archives/restoreVenues"); -const deletedAdminsRoutes = require("./routes/Archives/deletedAdmins"); -const deletedVenuesRoutes = require("./routes/Archives/deletedVenues"); -// >>>>>>> 0ec0e45960f533ba33883485febbb0ef33a63f02 const restoreUserRoutes = require("./routes/Archives/restoreUser"); const dropVenuesRoutes = require("./routes/Archives/dropVenues"); const dropUserRoutes = require("./routes/Archives/dropUsers"); /*{ PROFILE PAGE }*/ -// <<<<<<< HEAD const userBookingsRoutes = require("./routes/UserProfiles/userBookingsAll"); const fetchAllUsersRoutes = require("./routes/UserProfiles/userFetchAll"); const userFetchAllRoutes = require("./routes/UserProfiles/userFetchAll"); const fetchAllUserEmalRoutes = require("./routes/UserProfiles/userFetchAllEmail"); -// ======= -const fetchAllUserEmalRoutes = require("./routes/UserProfiles/userFetchAllEmail"); -const userBookingsRoutes = require("./routes/UserProfiles/userBookingsAll"); -const fetchAllUsersRoutes = require("./routes/UserProfiles/userFetchAll"); -const userFetchAllRoutes = require("./routes/UserProfiles/userFetchAll"); -// >>>>>>> 0ec0e45960f533ba33883485febbb0ef33a63f02 /*{ CALENDAR PAGE } */ const userBookingsAllFilterRoutes = require("./routes/bookingAllCalendar"); /*{ CHAGNGE BOOKING STATUS } */ @@ -125,7 +110,7 @@ app.use("/", updatetoApprovedRoutes); // CALENDAR // CALENDAR // CALENDAR -app.get("http//localhost:5000/event_venues_booked", (req, res) => { +app.get("/event_venues_booked", (req, res) => { const venue = req.query.venue || ""; // Default to empty string if not provided const sql = "SELECT * FROM venue_bookings WHERE `event_facility`=?"; db.query(sql, [venue], (err, result) => { @@ -176,7 +161,7 @@ const verifyJwt = (req, res, next) => { } }; // JWT AUTH -app.get("http//localhost:5000/checkauth", verifyJwt, (req, res) => { +app.get("/checkauth", verifyJwt, (req, res) => { return res.json("Authenticated"); }); // @@ -185,7 +170,7 @@ app.get("http//localhost:5000/checkauth", verifyJwt, (req, res) => { // // LOG IN USER -app.post("http//localhost:5000/check_user", (req, res) => { +app.post("/check_user", (req, res) => { const { email, password } = req.body; const sql = "SELECT * FROM user_login WHERE email = ? AND password = ?"; // JWT token passed @@ -208,7 +193,7 @@ app.post("http//localhost:5000/check_user", (req, res) => { // TRANSER TO INDIVIDUAL // ADD NEW USER -app.post("http//localhost:5000/add_newuser", (req, res) => { +app.post("/add_newuser", (req, res) => { const sql = "INSERT INTO user_login (`email`,`password`,`username`,`college_affiliation`,`club`,`position`,`account_type`)VALUES (?, ?, ?, ?, ?, ?, ?)"; const values = [ @@ -272,7 +257,7 @@ app.post("http//localhost:5000/add_newuser", (req, res) => { // // // -app.post("http//localhost:5000/create_booking", (req, res) => { +app.post("/create_booking", (req, res) => { const { booker_id, eventname, @@ -322,7 +307,7 @@ app.post("http//localhost:5000/create_booking", (req, res) => { // No overlapping bookings, proceed with the insertion const insertSql = ` INSERT INTO venue_bookings (booker_id, eventname, event_purpose, event_date, starting_time, ending_time, event_facility, username, email) - VALUES (?, ?, ?, ?, ?, ?, ?, ?,x1 ?) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) `; const insertValues = [ booker_id, @@ -364,7 +349,7 @@ app.post("http//localhost:5000/create_booking", (req, res) => { // // // -app.get("http//localhost:5000/all_admins", (req, res) => { +app.get("/all_admins", (req, res) => { const sql = "SELECT COUNT(*) AS admin_count FROM user_login WHERE `account_type` = 'Admin';"; db.query(sql, (err, result) => { @@ -379,7 +364,7 @@ app.get("http//localhost:5000/all_admins", (req, res) => { // /students // DISPLAY ALL BOOKINGS -app.get("http//localhost:5000/booking", (req, res) => { +app.get("/booking", (req, res) => { const sql = "SELECT * FROM user_details WHERE `Deleted`='Active'"; db.query(sql, (err, result) => { if (err) res.json({ message: "Server error" }); @@ -391,7 +376,7 @@ app.get("http//localhost:5000/booking", (req, res) => { // // /get_student // DISPLAY BOOKING DETAILS -app.get("http//localhost:5000/get_booking/:id", (req, res) => { +app.get("/get_booking/:id", (req, res) => { const id = req.params.id; const sql = "SELECT * FROM user_details WHERE `id`= ?"; db.query(sql, [id], (err, result) => { @@ -403,7 +388,7 @@ app.get("http//localhost:5000/get_booking/:id", (req, res) => { // // // EDIT BOOKING DETAILS - ADMIN ONLY -app.post("http//localhost:5000/edit_user/:id", (req, res) => { +app.post("/edit_user/:id", (req, res) => { const id = req.params.id; const sql = "UPDATE user_details SET `name`=?, `email`=?, `age`=?, `gender`=? WHERE id=?"; @@ -431,7 +416,7 @@ app.post("http//localhost:5000/edit_user/:id", (req, res) => { // // // DISPLAY LISTED USERS -app.get("http//localhost:5000/users", (req, res) => { +app.get("/users", (req, res) => { const sql = "SELECT * FROM user_login WHERE `Deleted`='Active'"; db.query(sql, (err, result) => { if (err) res.json({ message: "Server error" }); From ad4f2b9c13b367b8db4ca5247aba276b3d97ce83 Mon Sep 17 00:00:00 2001 From: llAlcatrazll Date: Mon, 3 Jun 2024 12:58:55 +0800 Subject: [PATCH 5/6] Nicki Fixed --- server/routes/Archives/restoreBookings.js | 4 +-- server/routes/Archives/restoreUser.js | 4 +-- server/routes/Archives/restoreVenues.js | 4 +-- server/routes/UserProfiles/userBookingsAll.js | 4 +-- server/routes/UserProfiles/userFetchAll.js | 4 +-- .../routes/UserProfiles/userFetchAllEmail.js | 4 +-- server/routes/activeVenues.js | 4 +-- server/routes/addVenue.js | 4 +-- server/routes/adminUsers.js | 4 +-- server/routes/allUsers.js | 4 +-- server/routes/allclubs.js | 4 +-- server/routes/archivedVenues.js | 4 +-- server/routes/bookingAll.js | 4 +-- server/routes/bookingAllCalendar.js | 29 +++++++++---------- server/routes/bookingApproved.js | 4 +-- server/routes/bookingDelete.js | 4 +-- server/routes/bookingPending.js | 4 +-- .../routes/booking_status/approveBooking.js | 4 +-- server/routes/booking_status/denyBooking.js | 4 +-- .../routes/booking_status/pendingBooking.js | 4 +-- server/routes/booklingDenied.js | 4 +-- server/routes/deleteUser.js | 4 +-- server/routes/deleteVenues.js | 4 +-- server/routes/registeredUsers.js | 4 +-- server/routes/restoreVenues.js | 4 +-- 25 files changed, 61 insertions(+), 64 deletions(-) diff --git a/server/routes/Archives/restoreBookings.js b/server/routes/Archives/restoreBookings.js index 988b777..9b4b8ec 100644 --- a/server/routes/Archives/restoreBookings.js +++ b/server/routes/Archives/restoreBookings.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../../server"); +// const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post(`${BackendUserLink}/restore_booking/:booking_id`, (req, res) => { +router.post(`/restore_booking/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `deleted`='Active' WHERE booking_id=?"; db.query(sql, [booking_id], (err, result) => { diff --git a/server/routes/Archives/restoreUser.js b/server/routes/Archives/restoreUser.js index 9e50abf..4772545 100644 --- a/server/routes/Archives/restoreUser.js +++ b/server/routes/Archives/restoreUser.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../../server"); +// const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post(`${BackendUserLink}/restore_user/:user_id`, (req, res) => { +router.post(`/restore_user/:user_id`, (req, res) => { const user_id = req.params.user_id; const sql = "UPDATE user_login SET `deleted`='Active' WHERE user_id=?"; db.query(sql, [user_id], (err, result) => { diff --git a/server/routes/Archives/restoreVenues.js b/server/routes/Archives/restoreVenues.js index f67dd92..a344ef6 100644 --- a/server/routes/Archives/restoreVenues.js +++ b/server/routes/Archives/restoreVenues.js @@ -1,10 +1,10 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../../server"); +// const { BackendUserLink } = require("../../server"); const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post(`${BackendUserLink}/restore_venues/:venue_id`, (req, res) => { +router.post(`/restore_venues/:venue_id`, (req, res) => { const venue_id = req.params.venue_id; const sql = "UPDATE event_venues SET `deleted`='Active' WHERE venue_id=?"; db.query(sql, [venue_id], (err, result) => { diff --git a/server/routes/UserProfiles/userBookingsAll.js b/server/routes/UserProfiles/userBookingsAll.js index 8c6d090..f3d9c13 100644 --- a/server/routes/UserProfiles/userBookingsAll.js +++ b/server/routes/UserProfiles/userBookingsAll.js @@ -1,8 +1,8 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); -const { BackendUserLink } = require("../../server"); -router.get(`${BackendUserLink}/user_bookingsall`, (req, res) => { + +router.get(`/user_bookingsall`, (req, res) => { const userEmail = req.query.email; // Get userEmail from query parameters const sql = "SELECT * FROM venue_bookings WHERE email = ? AND deleted = 'Active'"; diff --git a/server/routes/UserProfiles/userFetchAll.js b/server/routes/UserProfiles/userFetchAll.js index 8d8b15f..43aabbf 100644 --- a/server/routes/UserProfiles/userFetchAll.js +++ b/server/routes/UserProfiles/userFetchAll.js @@ -1,8 +1,8 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); -const { BackendUserLink } = require("../../server"); -router.get(`${BackendUserLink}/user_fetchall`, (req, res) => { +// const { BackendUserLink } = require("../../server"); +router.get(`/user_fetchall`, (req, res) => { // const userEmail = req.query.email; // Get userEmail from query parameters const sql = "SELECT * FROM user_login WHERE deleted = 'Active' AND `account_type` = 'Admin'"; diff --git a/server/routes/UserProfiles/userFetchAllEmail.js b/server/routes/UserProfiles/userFetchAllEmail.js index d7d40ff..c01cb2b 100644 --- a/server/routes/UserProfiles/userFetchAllEmail.js +++ b/server/routes/UserProfiles/userFetchAllEmail.js @@ -1,8 +1,8 @@ const express = require("express"); const router = express.Router(); const db = require("../../db"); -const { BackendUserLink } = require("../../server"); -router.get(`${BackendUserLink}/user_fetchallEmail`, (req, res) => { +// const { BackendUserLink } = require("../../server"); +router.get(`/user_fetchallEmail`, (req, res) => { const userEmail = req.query.email; // Get userEmail from query parameters const sql = "SELECT * FROM user_login WHERE email = ? AND deleted = 'Active'"; diff --git a/server/routes/activeVenues.js b/server/routes/activeVenues.js index cbd262b..b5d8c81 100644 --- a/server/routes/activeVenues.js +++ b/server/routes/activeVenues.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch active venues -router.get(`${BackendUserLink}/venues`, (req, res) => { +router.get(`/venues`, (req, res) => { const sql = "SELECT * FROM event_venues WHERE `deleted`='Active'"; db.query(sql, (err, result) => { if (err) { diff --git a/server/routes/addVenue.js b/server/routes/addVenue.js index 4cbc3a8..ea46eee 100644 --- a/server/routes/addVenue.js +++ b/server/routes/addVenue.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // ADD EVENT VENUES -router.post(`${BackendUserLink}/add_venue`, (req, res) => { +router.post(`/add_venue`, (req, res) => { const sql = "INSERT INTO event_venues (`venue_name`) VALUES (?)"; const values = [req.body.venue_name]; console.log(req.body); diff --git a/server/routes/adminUsers.js b/server/routes/adminUsers.js index 4115ec5..4b02585 100644 --- a/server/routes/adminUsers.js +++ b/server/routes/adminUsers.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // ADMIN USERS -router.get(`${BackendUserLink}/admin_users`, (req, res) => { +router.get(`/admin_users`, (req, res) => { const sql = "SELECT * FROM user_login WHERE `account_type`='Admin' AND `deleted`='Active'"; diff --git a/server/routes/allUsers.js b/server/routes/allUsers.js index 009e7b1..eb82073 100644 --- a/server/routes/allUsers.js +++ b/server/routes/allUsers.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // ADMIN USERS -router.get(`${BackendUserLink}/all_users`, (req, res) => { +router.get(`/all_users`, (req, res) => { const sql = "SELECT * FROM user_login WHERE `deleted`='Active'"; db.query(sql, (err, result) => { diff --git a/server/routes/allclubs.js b/server/routes/allclubs.js index 7b06a06..23b9252 100644 --- a/server/routes/allclubs.js +++ b/server/routes/allclubs.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch active venues -router.get(`${BackendUserLink}/all_clubs`, (req, res) => { +router.get(`/all_clubs`, (req, res) => { const sql = "SELECT DISTINCT `club` FROM user_login "; db.query(sql, (err, result) => { if (err) { diff --git a/server/routes/archivedVenues.js b/server/routes/archivedVenues.js index a2a3c55..66e9177 100644 --- a/server/routes/archivedVenues.js +++ b/server/routes/archivedVenues.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch active venues -router.get(`${BackendUserLink}/booking_archived`, (req, res) => { +router.get(`/booking_archived`, (req, res) => { const sql = "SELECT * FROM event_venues WHERE `deleted`='Deleted'"; db.query(sql, (err, result) => { if (err) { diff --git a/server/routes/bookingAll.js b/server/routes/bookingAll.js index 7f46aea..e23b29a 100644 --- a/server/routes/bookingAll.js +++ b/server/routes/bookingAll.js @@ -1,10 +1,10 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary -router.get(`${BackendUserLink}/venue_bookings`, (req, res) => { +router.get(`/venue_bookings`, (req, res) => { const sql = "SELECT * FROM venue_bookings WHERE `deleted`='Active'"; db.query(sql, (err, result) => { if (err) res.json({ message: "Server error" }); diff --git a/server/routes/bookingAllCalendar.js b/server/routes/bookingAllCalendar.js index 715dffd..531240c 100644 --- a/server/routes/bookingAllCalendar.js +++ b/server/routes/bookingAllCalendar.js @@ -2,26 +2,23 @@ const express = require("express"); const bodyParser = require("body-parser"); // Required for parsing JSON bodies const router = express.Router(); const db = require("../db"); // Adjust the path as necessary -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Middleware to parse JSON bodies router.use(bodyParser.json()); // Route to fetch venue bookings -router.get( - `${BackendUserLink}/api/venue_bookings_calendar/:event_facility`, - (req, res) => { - const eventFacility = req.params.event_facility; - const sql = - "SELECT * FROM venue_bookings WHERE deleted='Active' AND event_facility=?"; - db.query(sql, [eventFacility], (err, result) => { - if (err) { - console.error("Database query error:", err); - return res.status(500).json({ message: "Server error" }); - } - return res.json(result); - }); - } -); +router.get(`/api/venue_bookings_calendar/:event_facility`, (req, res) => { + const eventFacility = req.params.event_facility; + const sql = + "SELECT * FROM venue_bookings WHERE deleted='Active' AND event_facility=?"; + db.query(sql, [eventFacility], (err, result) => { + if (err) { + console.error("Database query error:", err); + return res.status(500).json({ message: "Server error" }); + } + return res.json(result); + }); +}); // Export the router so it can be used in the main app file module.exports = router; diff --git a/server/routes/bookingApproved.js b/server/routes/bookingApproved.js index 0a4fa3d..0d82201 100644 --- a/server/routes/bookingApproved.js +++ b/server/routes/bookingApproved.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch approved bookings -router.get(`${BackendUserLink}/booking_approved`, (req, res) => { +router.get(`/booking_approved`, (req, res) => { const sql = "SELECT * FROM venue_bookings WHERE `deleted`='Active' AND `status`='Approved'"; db.query(sql, (err, result) => { diff --git a/server/routes/bookingDelete.js b/server/routes/bookingDelete.js index 0d031b0..b403621 100644 --- a/server/routes/bookingDelete.js +++ b/server/routes/bookingDelete.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // DELETE VENUE -router.post(`${BackendUserLink}/delete_booking/:booking_id`, (req, res) => { +router.post(`/delete_booking/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `deleted`='Deleted' WHERE booking_id=?"; diff --git a/server/routes/bookingPending.js b/server/routes/bookingPending.js index 955346a..a8701ab 100644 --- a/server/routes/bookingPending.js +++ b/server/routes/bookingPending.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch approved bookings -router.get(`${BackendUserLink}/booking_pending`, (req, res) => { +router.get(`/booking_pending`, (req, res) => { const sql = "SELECT * FROM venue_bookings WHERE `deleted`='Active' AND `status`='Pending'"; db.query(sql, (err, result) => { diff --git a/server/routes/booking_status/approveBooking.js b/server/routes/booking_status/approveBooking.js index 7340313..844ba65 100644 --- a/server/routes/booking_status/approveBooking.js +++ b/server/routes/booking_status/approveBooking.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../../server"); +// const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post(`${BackendUserLink}/approve_booking/:booking_id`, (req, res) => { +router.post(`/approve_booking/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `status`='Approved' WHERE booking_id=?"; diff --git a/server/routes/booking_status/denyBooking.js b/server/routes/booking_status/denyBooking.js index 81a15ad..e840eaf 100644 --- a/server/routes/booking_status/denyBooking.js +++ b/server/routes/booking_status/denyBooking.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../../server"); +// const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post(`${BackendUserLink}/booking_denied/:booking_id`, (req, res) => { +router.post(`/booking_denied/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `status`='Denied' WHERE booking_id=?"; db.query(sql, [booking_id], (err, result) => { diff --git a/server/routes/booking_status/pendingBooking.js b/server/routes/booking_status/pendingBooking.js index 479ba73..02c1086 100644 --- a/server/routes/booking_status/pendingBooking.js +++ b/server/routes/booking_status/pendingBooking.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../../server"); +// const { BackendUserLink } = require("../../server"); // Import the database connection const db = require("../../db"); // Adjust the path as necessary // DELETE VENUE -router.post(`${BackendUserLink}/pending_booking/:booking_id`, (req, res) => { +router.post(`/pending_booking/:booking_id`, (req, res) => { const booking_id = req.params.booking_id; const sql = "UPDATE venue_bookings SET `status`='Pending' WHERE booking_id=?"; db.query(sql, [booking_id], (err, result) => { diff --git a/server/routes/booklingDenied.js b/server/routes/booklingDenied.js index 57ef3f1..edb1d42 100644 --- a/server/routes/booklingDenied.js +++ b/server/routes/booklingDenied.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // Fetch approved bookings -router.get(`${BackendUserLink}/booking_denied`, (req, res) => { +router.get(`/booking_denied`, (req, res) => { const sql = "SELECT * FROM venue_bookings WHERE `deleted`='Active' AND `status`='Denied'"; db.query(sql, (err, result) => { diff --git a/server/routes/deleteUser.js b/server/routes/deleteUser.js index 3f73767..d6bed5c 100644 --- a/server/routes/deleteUser.js +++ b/server/routes/deleteUser.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // DELETE VENUE -router.post(`${BackendUserLink}/delete_user/:user_id`, (req, res) => { +router.post(`/delete_user/:user_id`, (req, res) => { const user_id = req.params.user_id; const sql = "UPDATE user_login SET `deleted`='Deleted' WHERE user_id=?"; db.query(sql, [user_id], (err, result) => { diff --git a/server/routes/deleteVenues.js b/server/routes/deleteVenues.js index a1471da..512e48e 100644 --- a/server/routes/deleteVenues.js +++ b/server/routes/deleteVenues.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // DELETE VENUE -router.post(`${BackendUserLink}/delete_venu/:venue_id`, (req, res) => { +router.post(`/delete_venu/:venue_id`, (req, res) => { const venue_id = req.params.venue_id; const sql = "UPDATE event_venues SET `deleted`='Deleted' WHERE venue_id=?"; db.query(sql, [venue_id], (err, result) => { diff --git a/server/routes/registeredUsers.js b/server/routes/registeredUsers.js index 97359c9..8a83090 100644 --- a/server/routes/registeredUsers.js +++ b/server/routes/registeredUsers.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // ADMIN USERS -router.get(`${BackendUserLink}/registered_user`, (req, res) => { +router.get(`/registered_user`, (req, res) => { const sql = "SELECT * FROM user_login WHERE `account_type`='Officer' AND `deleted`='Active'"; diff --git a/server/routes/restoreVenues.js b/server/routes/restoreVenues.js index f7033b4..6195070 100644 --- a/server/routes/restoreVenues.js +++ b/server/routes/restoreVenues.js @@ -1,11 +1,11 @@ const express = require("express"); const router = express.Router(); -const { BackendUserLink } = require("../server"); +// const { BackendUserLink } = require("../server"); // Import the database connection const db = require("../db"); // Adjust the path as necessary // RESTORE VENUE -router.post(`${BackendUserLink}/restore_venue/:venue_id`, (req, res) => { +router.post(`/restore_venue/:venue_id`, (req, res) => { const venue_id = req.params.venue_id; const sql = "UPDATE event_venues SET `deleted`='Active' WHERE venue_id=?"; db.query(sql, [venue_id], (err, result) => { From 286081e20f0ca653b22b838b4c19626ea1de7861 Mon Sep 17 00:00:00 2001 From: llAlcatrazll Date: Wed, 19 Jun 2024 17:11:38 +0800 Subject: [PATCH 6/6] FINAL SUBMISSION --- client/keystone/src/reference.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/client/keystone/src/reference.txt b/client/keystone/src/reference.txt index 35d4015..aa6b896 100644 --- a/client/keystone/src/reference.txt +++ b/client/keystone/src/reference.txt @@ -154,3 +154,4 @@ https://raw.githubusercontent.com/mantinedev/mantine/master/.demo/avatars/avatar .text-white //hello +TEST FOR GITHUB \ No newline at end of file