From aaff628985f2f56484394857babc14ff567bcf04 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:35:06 +0530 Subject: [PATCH 01/16] Update RoomInventory.jsx --- .../screens/RoomManaagemnt/RoomInventory.jsx | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Client/src/screens/RoomManaagemnt/RoomInventory.jsx b/Client/src/screens/RoomManaagemnt/RoomInventory.jsx index 016b833..6f6aa33 100644 --- a/Client/src/screens/RoomManaagemnt/RoomInventory.jsx +++ b/Client/src/screens/RoomManaagemnt/RoomInventory.jsx @@ -49,10 +49,10 @@ import { Wind, Sun, } from 'lucide-react'; -import { API_BASE_URL } from '../../apiconfig'; +import { API1_BASE_URL } from '../../apiconfig'; -const API_BASE_URL = `${API_BASE_URL}/rooms`; -const RATES_API_BASE_URL = `${API_BASE_URL}/room-Rates`; +const API1_BASE_URL = `${API1_BASE_URL}/rooms`; +const RATES_API1_BASE_URL = `${API1_BASE_URL}/room-Rates`; const RoomInventory = () => { const [rooms, setRooms] = useState([]); @@ -110,7 +110,7 @@ const RoomInventory = () => { // Fetch rooms const fetchRooms = async () => { try { - const response = await axios.get(API_BASE_URL); + const response = await axios.get(API1_BASE_URL); setRooms(response.data); setFilteredRooms(response.data); } catch (error) { @@ -120,7 +120,7 @@ const RoomInventory = () => { const fetchRates = async () => { try { - const response = await axios.get(RATES_API_BASE_URL); + const response = await axios.get(RATES_API1_BASE_URL); setRates(response.data); } catch (error) { console.error('Error fetching rates:', error); @@ -159,7 +159,7 @@ const RoomInventory = () => { const handleAddRoom = async (roomData) => { try { - const response = await axios.post(API_BASE_URL, roomData); + const response = await axios.post(API1_BASE_URL, roomData); if (response.status === 201) { const newRoom = response.data; // Sync to rate plan @@ -170,7 +170,7 @@ const RoomInventory = () => { basePrice: newRoom.basePrice, weekendPrice: newRoom.weekendPrice }; - await axios.put(`${RATES_API_BASE_URL}/${existingRate._id}`, updatedRate); + await axios.put(`${RATES_API1_BASE_URL}/${existingRate._id}`, updatedRate); } else { const newRate = { rateType: 'ratePlan', @@ -188,7 +188,7 @@ const RoomInventory = () => { validFrom: new Date().toISOString().split('T')[0], validTo: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString().split('T')[0], }; - await axios.post(RATES_API_BASE_URL, newRate); + await axios.post(RATES_API1_BASE_URL, newRate); } fetchRooms(); fetchRates(); @@ -201,7 +201,7 @@ const RoomInventory = () => { const handleEditRoom = async (roomData) => { try { - const response = await axios.put(`${API_BASE_URL}/${roomData.id}`, roomData); + const response = await axios.put(`${API1_BASE_URL}/${roomData.id}`, roomData); if (response.status === 200) { const updatedRoom = response.data; // Sync to rate plan @@ -212,7 +212,7 @@ const RoomInventory = () => { basePrice: updatedRoom.basePrice, weekendPrice: updatedRoom.weekendPrice }; - await axios.put(`${RATES_API_BASE_URL}/${existingRate._id}`, updatedRate); + await axios.put(`${RATES_API1_BASE_URL}/${existingRate._id}`, updatedRate); } else { const newRate = { rateType: 'ratePlan', @@ -230,7 +230,7 @@ const RoomInventory = () => { validFrom: new Date().toISOString().split('T')[0], validTo: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString().split('T')[0], }; - await axios.post(RATES_API_BASE_URL, newRate); + await axios.post(RATES_API1_BASE_URL, newRate); } fetchRooms(); fetchRates(); @@ -245,11 +245,11 @@ const RoomInventory = () => { const handleDeleteRoom = async (roomId) => { if (window.confirm('Are you sure you want to delete this room?')) { try { - const response = await axios.delete(`${API_BASE_URL}/${roomId}`); + const response = await axios.delete(`${API1_BASE_URL}/${roomId}`); if (response.status === 200) { const rateToDelete = rates.find(r => r.rateType === 'ratePlan' && r.roomId === roomId); if (rateToDelete) { - await axios.delete(`${RATES_API_BASE_URL}/${rateToDelete._id}`); + await axios.delete(`${RATES_API1_BASE_URL}/${rateToDelete._id}`); } fetchRooms(); fetchRates(); @@ -1054,4 +1054,4 @@ const RoomInventory = () => { ); }; -export default RoomInventory; \ No newline at end of file +export default RoomInventory; From 05e4616dc7a3fa7730b35b4fbdfa4fcb26ff6a4f Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:43:41 +0530 Subject: [PATCH 02/16] Update RoomInventory.jsx --- .../screens/RoomManaagemnt/RoomInventory.jsx | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Client/src/screens/RoomManaagemnt/RoomInventory.jsx b/Client/src/screens/RoomManaagemnt/RoomInventory.jsx index 6f6aa33..0e26fac 100644 --- a/Client/src/screens/RoomManaagemnt/RoomInventory.jsx +++ b/Client/src/screens/RoomManaagemnt/RoomInventory.jsx @@ -49,10 +49,10 @@ import { Wind, Sun, } from 'lucide-react'; -import { API1_BASE_URL } from '../../apiconfig'; +import { API_BASE_URL } from '../../apiconfig'; -const API1_BASE_URL = `${API1_BASE_URL}/rooms`; -const RATES_API1_BASE_URL = `${API1_BASE_URL}/room-Rates`; +const ROOMS_API_BASE_URL = `${API_BASE_URL}/rooms`; +const RATES_API_BASE_URL = `${API_BASE_URL}/room-Rates`; const RoomInventory = () => { const [rooms, setRooms] = useState([]); @@ -110,7 +110,7 @@ const RoomInventory = () => { // Fetch rooms const fetchRooms = async () => { try { - const response = await axios.get(API1_BASE_URL); + const response = await axios.get(ROOMS_API_BASE_URL); setRooms(response.data); setFilteredRooms(response.data); } catch (error) { @@ -118,9 +118,10 @@ const RoomInventory = () => { } }; + // Fetch rates const fetchRates = async () => { try { - const response = await axios.get(RATES_API1_BASE_URL); + const response = await axios.get(RATES_API_BASE_URL); setRates(response.data); } catch (error) { console.error('Error fetching rates:', error); @@ -159,7 +160,7 @@ const RoomInventory = () => { const handleAddRoom = async (roomData) => { try { - const response = await axios.post(API1_BASE_URL, roomData); + const response = await axios.post(ROOMS_API_BASE_URL, roomData); if (response.status === 201) { const newRoom = response.data; // Sync to rate plan @@ -170,7 +171,7 @@ const RoomInventory = () => { basePrice: newRoom.basePrice, weekendPrice: newRoom.weekendPrice }; - await axios.put(`${RATES_API1_BASE_URL}/${existingRate._id}`, updatedRate); + await axios.put(`${RATES_API_BASE_URL}/${existingRate._id}`, updatedRate); } else { const newRate = { rateType: 'ratePlan', @@ -188,7 +189,7 @@ const RoomInventory = () => { validFrom: new Date().toISOString().split('T')[0], validTo: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString().split('T')[0], }; - await axios.post(RATES_API1_BASE_URL, newRate); + await axios.post(RATES_API_BASE_URL, newRate); } fetchRooms(); fetchRates(); @@ -201,7 +202,7 @@ const RoomInventory = () => { const handleEditRoom = async (roomData) => { try { - const response = await axios.put(`${API1_BASE_URL}/${roomData.id}`, roomData); + const response = await axios.put(`${ROOMS_API_BASE_URL}/${roomData.id}`, roomData); if (response.status === 200) { const updatedRoom = response.data; // Sync to rate plan @@ -212,7 +213,7 @@ const RoomInventory = () => { basePrice: updatedRoom.basePrice, weekendPrice: updatedRoom.weekendPrice }; - await axios.put(`${RATES_API1_BASE_URL}/${existingRate._id}`, updatedRate); + await axios.put(`${RATES_API_BASE_URL}/${existingRate._id}`, updatedRate); } else { const newRate = { rateType: 'ratePlan', @@ -230,7 +231,7 @@ const RoomInventory = () => { validFrom: new Date().toISOString().split('T')[0], validTo: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString().split('T')[0], }; - await axios.post(RATES_API1_BASE_URL, newRate); + await axios.post(RATES_API_BASE_URL, newRate); } fetchRooms(); fetchRates(); @@ -245,11 +246,12 @@ const RoomInventory = () => { const handleDeleteRoom = async (roomId) => { if (window.confirm('Are you sure you want to delete this room?')) { try { - const response = await axios.delete(`${API1_BASE_URL}/${roomId}`); + const response = await axios.delete(`${ROOMS_API_BASE_URL}/${roomId}`); if (response.status === 200) { + // Delete associated rate plan const rateToDelete = rates.find(r => r.rateType === 'ratePlan' && r.roomId === roomId); if (rateToDelete) { - await axios.delete(`${RATES_API1_BASE_URL}/${rateToDelete._id}`); + await axios.delete(`${RATES_API_BASE_URL}/${rateToDelete._id}`); } fetchRooms(); fetchRates(); From abfd3a5240afd54314e1f57d1be27484951aa078 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:48:38 +0530 Subject: [PATCH 03/16] Update RoomStatus.jsx --- Client/src/screens/RoomManaagemnt/RoomStatus.jsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Client/src/screens/RoomManaagemnt/RoomStatus.jsx b/Client/src/screens/RoomManaagemnt/RoomStatus.jsx index 02cf3aa..e8fff0a 100644 --- a/Client/src/screens/RoomManaagemnt/RoomStatus.jsx +++ b/Client/src/screens/RoomManaagemnt/RoomStatus.jsx @@ -52,8 +52,6 @@ import { } from 'lucide-react'; import { API_BASE_URL } from '../../apiconfig'; -const API_BASE_URL = `${API_BASE_URL}/rooms`; - const RoomStatus = ({ sidebarOpen, setSidebarOpen, sidebarMinimized, setSidebarMinimized }) => { const [rooms, setRooms] = useState([]); const [searchQuery, setSearchQuery] = useState(''); @@ -788,4 +786,4 @@ const RoomStatus = ({ sidebarOpen, setSidebarOpen, sidebarMinimized, setSidebarM ); }; -export default RoomStatus; \ No newline at end of file +export default RoomStatus; From 10fb7d80287e5499817269e6b6329fa8a714a9e0 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:52:28 +0530 Subject: [PATCH 04/16] Update RoomRate.jsx --- Client/src/screens/RoomManaagemnt/RoomRate.jsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Client/src/screens/RoomManaagemnt/RoomRate.jsx b/Client/src/screens/RoomManaagemnt/RoomRate.jsx index d9c8900..743ac50 100644 --- a/Client/src/screens/RoomManaagemnt/RoomRate.jsx +++ b/Client/src/screens/RoomManaagemnt/RoomRate.jsx @@ -31,9 +31,9 @@ import { Coffee, Users, } from 'lucide-react'; -import { API_BASE_URL } from '../../apiconfig'; +import { API_BASE_URL } from '../utils/apiConfig'; -const API_BASE_URL = `${API_BASE_URL}/room-Rates`; +const RATES_API_BASE_URL = `${API_BASE_URL}/room-Rates`; const ROOMS_API_BASE_URL = `${API_BASE_URL}/rooms`; // Error Boundary @@ -98,7 +98,7 @@ const RoomRate = ({ sidebarOpen, setSidebarOpen, sidebarMinimized, setSidebarMin const fetchRates = async () => { setLoading(true); try { - const response = await axios.get(API_BASE_URL); + const response = await axios.get(RATES_API_BASE_URL); const data = Array.isArray(response.data) ? response.data : []; setRates(data); } catch (error) { @@ -181,7 +181,7 @@ const RoomRate = ({ sidebarOpen, setSidebarOpen, sidebarMinimized, setSidebarMin const handleAdd = async (data) => { try { - const response = await axios.post(API_BASE_URL, data); + const response = await axios.post(RATES_API_BASE_URL, data); setRates([...rates, response.data]); if (data.rateType === 'ratePlan' && data.roomId) { const roomRes = await axios.get(`${ROOMS_API_BASE_URL}/${data.roomId}`); @@ -202,7 +202,7 @@ const RoomRate = ({ sidebarOpen, setSidebarOpen, sidebarMinimized, setSidebarMin const handleEdit = async (data) => { try { - const response = await axios.put(`${API_BASE_URL}/${data.id}`, data); + const response = await axios.put(`${RATES_API_BASE_URL}/${data.id}`, data); setRates(rates.map(item => (item.id === data.id ? response.data : item))); if (data.rateType === 'ratePlan' && data.roomId) { const roomRes = await axios.get(`${ROOMS_API_BASE_URL}/${data.roomId}`); @@ -225,7 +225,7 @@ const RoomRate = ({ sidebarOpen, setSidebarOpen, sidebarMinimized, setSidebarMin const handleDelete = async (id) => { if (window.confirm('Are you sure you want to delete this item?')) { try { - await axios.delete(`${API_BASE_URL}/${id}`); + await axios.delete(`${RATES_API_BASE_URL}/${id}`); setRates(rates.filter(item => item._id !== id)); } catch (error) { console.error('Error deleting rate:', error); @@ -1574,4 +1574,4 @@ const RoomRate = ({ sidebarOpen, setSidebarOpen, sidebarMinimized, setSidebarMin ); }; -export default RoomRate; \ No newline at end of file +export default RoomRate; From f4271b09c76f84fdca1bbed10e61dfeac2138ba1 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:54:45 +0530 Subject: [PATCH 05/16] Update RoomRate.jsx --- Client/src/screens/RoomManaagemnt/RoomRate.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/src/screens/RoomManaagemnt/RoomRate.jsx b/Client/src/screens/RoomManaagemnt/RoomRate.jsx index 743ac50..98714e0 100644 --- a/Client/src/screens/RoomManaagemnt/RoomRate.jsx +++ b/Client/src/screens/RoomManaagemnt/RoomRate.jsx @@ -31,7 +31,7 @@ import { Coffee, Users, } from 'lucide-react'; -import { API_BASE_URL } from '../utils/apiConfig'; +import { API_BASE_URL } from '../../apiconfig'; const RATES_API_BASE_URL = `${API_BASE_URL}/room-Rates`; const ROOMS_API_BASE_URL = `${API_BASE_URL}/rooms`; From c7ffbab0dae9bbe56076cf1b78128a9bea4fd917 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:10:26 +0530 Subject: [PATCH 06/16] Update and rename Server/server.js to Server/api/index.js --- Server/api/index.js | 82 +++++++++++++++++++++++++++++++++++++++++++++ Server/server.js | 67 ------------------------------------ 2 files changed, 82 insertions(+), 67 deletions(-) create mode 100644 Server/api/index.js delete mode 100644 Server/server.js diff --git a/Server/api/index.js b/Server/api/index.js new file mode 100644 index 0000000..62723d3 --- /dev/null +++ b/Server/api/index.js @@ -0,0 +1,82 @@ +const express = require('express'); +const mongoose = require('mongoose'); +const cors = require('cors'); +require('dotenv').config(); + +// Import routes +const roomRoutes = require('../routes/RoomManaagemnt/roomRoutes'); +const roomRateRoutes = require('../routes/RoomManaagemnt/roomRateRoutes'); +const maintenanceRoutes = require('../routes/RoomManaagemnt/maintenanceRoutes'); +const roomAvailabilityRoutes = require('../routes/RoomManaagemnt/roomAvailabilityRoutes'); +const staffMember = require('../routes/RoomManaagemnt/staffMemberRoutess'); +const bookingRoutes = require('../routes/ReservationManagement/bookingRoutes'); +const guestRoutes = require('../routes/ReservationManagement/guestRoutes'); +const checkInOutRoutes = require('../routes/ReservationManagement/checkInOutRoutes'); +const Cancellation = require('../routes/ReservationManagement/cancelRoutes'); +const specialRequestRoutes = require('../routes/ReservationManagement/specialRequestRoutes'); +const billingRoutes = require('../routes/billingRoutes'); +const restaurantBarAnalyticsRoutes = require('../routes/Restaurant&BarManagement/analyticsRoutes'); + +const app = express(); + +// Middleware +app.use(cors({ + origin: [ + 'http://localhost:5173', + 'https://hotel-management-system-seven-woad.vercel.app' + ], + credentials: true, + methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], + allowedHeaders: ['Content-Type', 'Authorization', 'pragma', 'cache-control', 'expires', 'x-auth-token'], +})); + +app.use(express.json({ limit: '10mb' })); + +// --- ROUTES --- +app.use('/api/rooms', roomRoutes); +app.use('/api/room-rates', roomRateRoutes); +app.use('/api/roomMaintenance', maintenanceRoutes); +app.use('/api/roomAvailability', roomAvailabilityRoutes); +app.use('/api/staffMembers', staffMember); +app.use('/api/bookings', bookingRoutes); +app.use('/api/guests', guestRoutes); +app.use('/api/checkinout', checkInOutRoutes); +app.use('/api/cancellations', Cancellation); +app.use('/api/specialrequests', specialRequestRoutes); +app.use('/api/restaurant-bar/analytics', restaurantBarAnalyticsRoutes); +app.use('/api/billing', billingRoutes); + +// --- HEALTH CHECK ENDPOINT --- +app.get('/', async (req, res) => { + try { + const mongoStatus = mongoose.connection.readyState === 1 ? 'Connected' : 'Disconnected'; + res.status(200).json({ + status: '✅ API Health: OK', + mongoDB: mongoStatus, + environment: process.env.NODE_ENV || 'Development', + timestamp: new Date().toISOString() + }); + } catch (error) { + res.status(500).json({ + status: '❌ API Health: Failed', + error: error.message + }); + } +}); + +// --- GLOBAL ERROR HANDLER --- +app.use((err, req, res, next) => { + console.error('🔥 Server Error:', err.stack); + res.status(500).json({ message: 'Something went wrong!', error: err.message }); +}); + +// --- MONGODB CONNECTION --- +mongoose + .connect(process.env.MONGO_URI, { + dbName: 'hotel-management', + }) + .then(() => console.log('✅ MongoDB connected')) + .catch((err) => console.error('❌ MongoDB connection error:', err)); + +// --- EXPORT APP (no app.listen for Vercel) --- +module.exports = app; diff --git a/Server/server.js b/Server/server.js deleted file mode 100644 index 8f34190..0000000 --- a/Server/server.js +++ /dev/null @@ -1,67 +0,0 @@ -const express = require('express'); -const mongoose = require('mongoose'); -const cors = require('cors'); -const bodyParser = require('body-parser'); -require('dotenv').config(); - -const roomRoutes = require('./routes/RoomManaagemnt/roomRoutes'); -const roomRateRoutes = require('./routes/RoomManaagemnt/roomRateRoutes'); -const maintenanceRoutes = require('./routes/RoomManaagemnt/maintenanceRoutes'); -const roomAvailabilityRoutes = require('./routes/RoomManaagemnt/roomAvailabilityRoutes'); -const staffMember = require('./routes/RoomManaagemnt/staffMemberRoutess'); -const bookingRoutes = require('./routes/ReservationManagement/bookingRoutes'); -const guestRoutes = require('./routes/ReservationManagement/guestRoutes'); -const checkInOutRoutes = require('./routes/ReservationManagement/checkInOutRoutes'); -const Cancellation = require('./routes/ReservationManagement/cancelRoutes'); -const specialRequestRoutes = require('./routes/ReservationManagement/specialRequestRoutes'); -const billingRoutes = require('./routes/billingRoutes'); -const restaurantBarAnalyticsRoutes = require('./routes/Restaurant&BarManagement/analyticsRoutes'); - -const app = express(); - -// Middleware -app.use(cors({ - origin: ['http://localhost:5173'], - credentials: true, - methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], - allowedHeaders: ['Content-Type', 'Authorization', 'pragma', 'cache-control', 'expires', 'x-auth-token'], -})); -app.use(express.json({ limit: '10mb' })); - -// Routes -app.use('/api/rooms', roomRoutes); -app.use('/api/room-rates', roomRateRoutes); -app.use('/api/roomMaintenance', maintenanceRoutes); -app.use('/api/roomAvailability', roomAvailabilityRoutes); -app.use('/api/staffMembers', staffMember); -app.use('/api/bookings', bookingRoutes); -app.use('/api/guests', guestRoutes); -app.use('/api/checkinout', checkInOutRoutes); -app.use('/api/cancellations', Cancellation); -app.use('/api/specialrequests', specialRequestRoutes); -app.use('/api/restaurant-bar/analytics', restaurantBarAnalyticsRoutes); -app.use('/api/billing', billingRoutes); - - -// Error handling middleware -app.use((err, req, res, next) => { - console.error(err.stack); - res.status(500).json({ message: 'Something went wrong!', error: err.message }); -}); - -// Connect to MongoDB -mongoose - .connect(process.env.MONGO_URI, { - dbName: 'hotel-management', - }) - .then(() => console.log('DB connect successful')) - .catch((err) => { - console.error('DB connection error:', err); - process.exit(1); - }); - -// Start server -const PORT = process.env.PORT || 8000; -app.listen(PORT, () => { - console.log(`Server is running on port ${PORT}`); -}); \ No newline at end of file From b8cfaefe53ba91467104ecaddfa2e07183453c11 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:11:48 +0530 Subject: [PATCH 07/16] Create vercel.json --- Server/vercel.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Server/vercel.json diff --git a/Server/vercel.json b/Server/vercel.json new file mode 100644 index 0000000..0bb1af1 --- /dev/null +++ b/Server/vercel.json @@ -0,0 +1,9 @@ +{ + "version": 2, + "builds": [ + { "src": "api/index.js", "use": "@vercel/node" } + ], + "routes": [ + { "src": "/(.*)", "dest": "api/index.js" } + ] +} From 6b6c616c2d564c467fe33f63b2dd2a72306f4d18 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:14:04 +0530 Subject: [PATCH 08/16] Update package.json --- Server/package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Server/package.json b/Server/package.json index 937efc7..2d1f070 100644 --- a/Server/package.json +++ b/Server/package.json @@ -1,13 +1,14 @@ { "name": "server", "version": "1.0.0", - "main": "index.js", + "main": "api/index.js", "files": [ "rooms.json" ], "scripts": { + "dev": "nodemon api/index.js", "test": "echo \"Error: no test specified\" && exit 1", - "start": "nodemon server.js" + "start": "node api/index.js" }, "keywords": [], "author": "", From 0f08b1eaa35939077fa0c4671a2a2a1607ee058a Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:17:46 +0530 Subject: [PATCH 09/16] Update apiconfig.js --- Client/src/apiconfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/src/apiconfig.js b/Client/src/apiconfig.js index eeed964..406b5af 100644 --- a/Client/src/apiconfig.js +++ b/Client/src/apiconfig.js @@ -1 +1 @@ -export const API_BASE_URL = "http://localhost:8000/api"; \ No newline at end of file +export const API_BASE_URL = "hotel-management-system-q26a.vercel.app/api"; From 1241555a7c636bffd7a10cb6be3bbf2d03198fda Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:18:41 +0530 Subject: [PATCH 10/16] Update vite.config.js --- Client/vite.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/vite.config.js b/Client/vite.config.js index b64ec73..29da7cc 100644 --- a/Client/vite.config.js +++ b/Client/vite.config.js @@ -8,7 +8,7 @@ export default defineConfig({ port: 5173, open:true, proxy: { '/api': { - target: 'http://localhost:8000', + target: 'hotel-management-system-q26a.vercel.app', changeOrigin: true, }, }, From ba96d2285e0ceb918b0425b6c9aa8c5eb12935f5 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:29:22 +0530 Subject: [PATCH 11/16] Update index.js --- Server/api/index.js | 51 ++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/Server/api/index.js b/Server/api/index.js index 62723d3..788fcdd 100644 --- a/Server/api/index.js +++ b/Server/api/index.js @@ -3,7 +3,7 @@ const mongoose = require('mongoose'); const cors = require('cors'); require('dotenv').config(); -// Import routes +// --- IMPORT ROUTES --- const roomRoutes = require('../routes/RoomManaagemnt/roomRoutes'); const roomRateRoutes = require('../routes/RoomManaagemnt/roomRateRoutes'); const maintenanceRoutes = require('../routes/RoomManaagemnt/maintenanceRoutes'); @@ -19,21 +19,21 @@ const restaurantBarAnalyticsRoutes = require('../routes/Restaurant&BarManagement const app = express(); -// Middleware +// --- MIDDLEWARE --- app.use(cors({ origin: [ - 'http://localhost:5173', - 'https://hotel-management-system-seven-woad.vercel.app' + 'http://localhost:5173', + 'https://hotel-management-system-seven-woad.vercel.app' // Live frontend ], credentials: true, - methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], - allowedHeaders: ['Content-Type', 'Authorization', 'pragma', 'cache-control', 'expires', 'x-auth-token'], + methods: ['GET','POST','PUT','DELETE','PATCH','OPTIONS'], + allowedHeaders: ['Content-Type','Authorization','pragma','cache-control','expires','x-auth-token'], })); app.use(express.json({ limit: '10mb' })); // --- ROUTES --- -app.use('/api/rooms', roomRoutes); +app.use('/api/rooms', roomRoutes); app.use('/api/room-rates', roomRateRoutes); app.use('/api/roomMaintenance', maintenanceRoutes); app.use('/api/roomAvailability', roomAvailabilityRoutes); @@ -47,12 +47,13 @@ app.use('/api/restaurant-bar/analytics', restaurantBarAnalyticsRoutes); app.use('/api/billing', billingRoutes); // --- HEALTH CHECK ENDPOINT --- -app.get('/', async (req, res) => { +app.get(['/', '/api/health'], async (req, res) => { try { - const mongoStatus = mongoose.connection.readyState === 1 ? 'Connected' : 'Disconnected'; + const mongoStates = ['Disconnected','Connected','Connecting','Disconnecting']; + const state = mongoose.connection.readyState; res.status(200).json({ status: '✅ API Health: OK', - mongoDB: mongoStatus, + mongoDB: mongoStates[state], environment: process.env.NODE_ENV || 'Development', timestamp: new Date().toISOString() }); @@ -71,12 +72,28 @@ app.use((err, req, res, next) => { }); // --- MONGODB CONNECTION --- -mongoose - .connect(process.env.MONGO_URI, { - dbName: 'hotel-management', - }) - .then(() => console.log('✅ MongoDB connected')) - .catch((err) => console.error('❌ MongoDB connection error:', err)); +const connectDB = async () => { + try { + await mongoose.connect(process.env.MONGO_URI, { dbName: 'hotel-management' }); + console.log('✅ MongoDB connected successfully'); + } catch (err) { + console.error('❌ MongoDB connection error:', err); + } +}; + +// Initial connection +connectDB(); + +// Connection event logs +mongoose.connection.on('connected', () => console.log('🟢 MongoDB Connected')); +mongoose.connection.on('disconnected', () => console.log('🔴 MongoDB Disconnected')); +mongoose.connection.on('error', (err) => console.error('⚠️ MongoDB Error:', err)); + +setInterval(() => { + if (mongoose.connection.readyState !== 1) { + console.log('⏳ Reconnecting MongoDB...'); + connectDB(); + } +}, 5 * 60 * 1000); -// --- EXPORT APP (no app.listen for Vercel) --- module.exports = app; From bff737f730bc57f9a0321a263559c07700a6de17 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:32:36 +0530 Subject: [PATCH 12/16] Update index.js --- Server/api/index.js | 57 +++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/Server/api/index.js b/Server/api/index.js index 788fcdd..1873ec9 100644 --- a/Server/api/index.js +++ b/Server/api/index.js @@ -22,8 +22,8 @@ const app = express(); // --- MIDDLEWARE --- app.use(cors({ origin: [ - 'http://localhost:5173', - 'https://hotel-management-system-seven-woad.vercel.app' // Live frontend + 'http://localhost:5173', + 'https://hotel-management-system-seven-woad.vercel.app' ], credentials: true, methods: ['GET','POST','PUT','DELETE','PATCH','OPTIONS'], @@ -46,31 +46,6 @@ app.use('/api/specialrequests', specialRequestRoutes); app.use('/api/restaurant-bar/analytics', restaurantBarAnalyticsRoutes); app.use('/api/billing', billingRoutes); -// --- HEALTH CHECK ENDPOINT --- -app.get(['/', '/api/health'], async (req, res) => { - try { - const mongoStates = ['Disconnected','Connected','Connecting','Disconnecting']; - const state = mongoose.connection.readyState; - res.status(200).json({ - status: '✅ API Health: OK', - mongoDB: mongoStates[state], - environment: process.env.NODE_ENV || 'Development', - timestamp: new Date().toISOString() - }); - } catch (error) { - res.status(500).json({ - status: '❌ API Health: Failed', - error: error.message - }); - } -}); - -// --- GLOBAL ERROR HANDLER --- -app.use((err, req, res, next) => { - console.error('🔥 Server Error:', err.stack); - res.status(500).json({ message: 'Something went wrong!', error: err.message }); -}); - // --- MONGODB CONNECTION --- const connectDB = async () => { try { @@ -81,7 +56,6 @@ const connectDB = async () => { } }; -// Initial connection connectDB(); // Connection event logs @@ -89,6 +63,7 @@ mongoose.connection.on('connected', () => console.log('🟢 MongoDB Connected')) mongoose.connection.on('disconnected', () => console.log('🔴 MongoDB Disconnected')); mongoose.connection.on('error', (err) => console.error('⚠️ MongoDB Error:', err)); +// Keep-alive ping every 5 mins setInterval(() => { if (mongoose.connection.readyState !== 1) { console.log('⏳ Reconnecting MongoDB...'); @@ -96,4 +71,30 @@ setInterval(() => { } }, 5 * 60 * 1000); +// --- HEALTH CHECK ENDPOINT --- +app.get(['/', '/api/health'], async (req, res) => { + const mongoStates = ['Disconnected','Connected','Connecting','Disconnecting']; + + const waitForConnection = async () => { + let retries = 5; + while(mongoose.connection.readyState !== 1 && retries > 0){ + await new Promise(r => setTimeout(r, 1000)); // wait 1 sec + retries--; + } + }; + await waitForConnection(); + + res.status(200).json({ + status: '✅ API Health: OK', + mongoDB: mongoStates[mongoose.connection.readyState], + environment: process.env.NODE_ENV || 'Development', + timestamp: new Date().toISOString() + }); +}); + +app.use((err, req, res, next) => { + console.error('🔥 Server Error:', err.stack); + res.status(500).json({ message: 'Something went wrong!', error: err.message }); +}); + module.exports = app; From bb4bc1a21ea300de8e51fd72a10aa16f759213c5 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:43:00 +0530 Subject: [PATCH 13/16] Update apiconfig.js --- Client/src/apiconfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/src/apiconfig.js b/Client/src/apiconfig.js index 406b5af..07034be 100644 --- a/Client/src/apiconfig.js +++ b/Client/src/apiconfig.js @@ -1 +1 @@ -export const API_BASE_URL = "hotel-management-system-q26a.vercel.app/api"; +export const API_BASE_URL = "https://hotel-management-system-q26a.vercel.app/api"; From 30ff1a5bb81653d9421b656a841057bfeda10150 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:43:51 +0530 Subject: [PATCH 14/16] Update vite.config.js --- Client/vite.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/vite.config.js b/Client/vite.config.js index 29da7cc..03220aa 100644 --- a/Client/vite.config.js +++ b/Client/vite.config.js @@ -8,7 +8,7 @@ export default defineConfig({ port: 5173, open:true, proxy: { '/api': { - target: 'hotel-management-system-q26a.vercel.app', + target: 'https://hotel-management-system-q26a.vercel.app', changeOrigin: true, }, }, From efc4343e8932a8378dc06709368cbce631a543d7 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Thu, 16 Oct 2025 15:37:46 +0530 Subject: [PATCH 15/16] Create index.js --- Server/api/index.js | 106 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Server/api/index.js diff --git a/Server/api/index.js b/Server/api/index.js new file mode 100644 index 0000000..39f4823 --- /dev/null +++ b/Server/api/index.js @@ -0,0 +1,106 @@ +const express = require('express'); +const mongoose = require('mongoose'); +const cors = require('cors'); +require('dotenv').config(); + +// --- IMPORT ROUTES --- +const roomRoutes = require('./routes/RoomManaagemnt/roomRoutes'); +const roomRateRoutes = require('./routes/RoomManaagemnt/roomRateRoutes'); +const maintenanceRoutes = require('./routes/RoomManaagemnt/maintenanceRoutes'); +const roomAvailabilityRoutes = require('./routes/RoomManaagemnt/roomAvailabilityRoutes'); +const staffMember = require('./routes/RoomManaagemnt/staffMemberRoutess'); +const bookingRoutes = require('./routes/ReservationManagement/bookingRoutes'); +const guestRoutes = require('./routes/ReservationManagement/guestRoutes'); +const checkInOutRoutes = require('./routes/ReservationManagement/checkInOutRoutes'); +const Cancellation = require('./routes/ReservationManagement/cancelRoutes'); +const specialRequestRoutes = require('./routes/ReservationManagement/specialRequestRoutes'); +const billingRoutes = require('./routes/billingRoutes'); +const menuRoutes = require('./routes/Restaurant&BarManagement/menuRoutes'); +const orderRoutes = require('./routes/Restaurant&BarManagement/orderRoutes'); +const exportRoutes = require('./routes/exports'); +const settingsRoutes = require('./routes/settings'); +const authRoutes = require('./routes/auth'); +const usersRoutes = require('./routes/users'); + +const app = express(); +// Middleware +app.use(cors({ + origin: ['http://localhost:5173'], + credentials: true, + methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], + allowedHeaders: ['Content-Type', 'Authorization', 'pragma', 'cache-control', 'expires', 'x-auth-token'], +})); +app.use(express.json({ limit: '10mb' })); + +// --- ROUTES --- +app.use('/api/rooms', roomRoutes); +app.use('/api/room-rates', roomRateRoutes); +app.use('/api/roomMaintenance', maintenanceRoutes); +app.use('/api/roomAvailability', roomAvailabilityRoutes); +app.use('/api/staffMembers', staffMember); +app.use('/api/bookings', bookingRoutes); +app.use('/api/guests', guestRoutes); +app.use('/api/checkinout', checkInOutRoutes); +app.use('/api/cancellations', Cancellation); +app.use('/api/specialrequests', specialRequestRoutes); +app.use('/api/billing', billingRoutes); + +app.use('/api/menu', menuRoutes); +app.use('/api/orders', orderRoutes); +app.use('/api/exports', exportRoutes); +app.use('/api/settings', settingsRoutes); +app.use('/api/auth', authRoutes); +app.use('/api/users', usersRoutes); + +// --- MONGODB CONNECTION --- +const connectDB = async () => { + try { + await mongoose.connect(process.env.MONGO_URI, { dbName: 'hotel-management' }); + console.log('✅ MongoDB connected successfully'); + } catch (err) { + console.error('❌ MongoDB connection error:', err); + } +}; + +connectDB(); + +// Connection event logs +mongoose.connection.on('connected', () => console.log('🟢 MongoDB Connected')); +mongoose.connection.on('disconnected', () => console.log('🔴 MongoDB Disconnected')); +mongoose.connection.on('error', (err) => console.error('⚠️ MongoDB Error:', err)); + +// Keep-alive ping every 5 mins +setInterval(() => { + if (mongoose.connection.readyState !== 1) { + console.log('⏳ Reconnecting MongoDB...'); + connectDB(); + } +}, 5 * 60 * 1000); + +// --- HEALTH CHECK ENDPOINT --- +app.get(['/', '/api/health'], async (req, res) => { + const mongoStates = ['Disconnected','Connected','Connecting','Disconnecting']; + + const waitForConnection = async () => { + let retries = 5; + while(mongoose.connection.readyState !== 1 && retries > 0){ + await new Promise(r => setTimeout(r, 1000)); // wait 1 sec + retries--; + } + }; + await waitForConnection(); + + res.status(200).json({ + status: '✅ API Health: OK', + mongoDB: mongoStates[mongoose.connection.readyState], + environment: process.env.NODE_ENV || 'Development', + timestamp: new Date().toISOString() + }); +}); + +app.use((err, req, res, next) => { + console.error('🔥 Server Error:', err.stack); + res.status(500).json({ message: 'Something went wrong!', error: err.message }); +}); + +module.exports = app; From e4f57ad2d0faf28a84eec564c2c3550fc98fe5f4 Mon Sep 17 00:00:00 2001 From: ShaliniAvindya <132177735+ShaliniAvindya@users.noreply.github.com> Date: Thu, 16 Oct 2025 15:38:10 +0530 Subject: [PATCH 16/16] Delete Server/server.js --- Server/server.js | 77 ------------------------------------------------ 1 file changed, 77 deletions(-) delete mode 100644 Server/server.js diff --git a/Server/server.js b/Server/server.js deleted file mode 100644 index 9c0b390..0000000 --- a/Server/server.js +++ /dev/null @@ -1,77 +0,0 @@ -const express = require('express'); -const mongoose = require('mongoose'); -const cors = require('cors'); -const bodyParser = require('body-parser'); -require('dotenv').config(); - -const roomRoutes = require('./routes/RoomManaagemnt/roomRoutes'); -const roomRateRoutes = require('./routes/RoomManaagemnt/roomRateRoutes'); -const maintenanceRoutes = require('./routes/RoomManaagemnt/maintenanceRoutes'); -const roomAvailabilityRoutes = require('./routes/RoomManaagemnt/roomAvailabilityRoutes'); -const staffMember = require('./routes/RoomManaagemnt/staffMemberRoutess'); -const bookingRoutes = require('./routes/ReservationManagement/bookingRoutes'); -const guestRoutes = require('./routes/ReservationManagement/guestRoutes'); -const checkInOutRoutes = require('./routes/ReservationManagement/checkInOutRoutes'); -const Cancellation = require('./routes/ReservationManagement/cancelRoutes'); -const specialRequestRoutes = require('./routes/ReservationManagement/specialRequestRoutes'); -const billingRoutes = require('./routes/billingRoutes'); -const menuRoutes = require('./routes/Restaurant&BarManagement/menuRoutes'); -const orderRoutes = require('./routes/Restaurant&BarManagement/orderRoutes'); -const exportRoutes = require('./routes/exports'); -const settingsRoutes = require('./routes/settings'); -const authRoutes = require('./routes/auth'); -const usersRoutes = require('./routes/users'); - -const app = express(); - -// Middleware -app.use(cors({ - origin: ['http://localhost:5173'], - credentials: true, - methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], - allowedHeaders: ['Content-Type', 'Authorization', 'pragma', 'cache-control', 'expires', 'x-auth-token'], -})); -app.use(express.json({ limit: '10mb' })); - -// Routes -app.use('/api/rooms', roomRoutes); -app.use('/api/room-rates', roomRateRoutes); -app.use('/api/roomMaintenance', maintenanceRoutes); -app.use('/api/roomAvailability', roomAvailabilityRoutes); -app.use('/api/staffMembers', staffMember); -app.use('/api/bookings', bookingRoutes); -app.use('/api/guests', guestRoutes); -app.use('/api/checkinout', checkInOutRoutes); -app.use('/api/cancellations', Cancellation); -app.use('/api/specialrequests', specialRequestRoutes); -app.use('/api/billing', billingRoutes); - -app.use('/api/menu', menuRoutes); -app.use('/api/orders', orderRoutes); -app.use('/api/exports', exportRoutes); -app.use('/api/settings', settingsRoutes); -app.use('/api/auth', authRoutes); -app.use('/api/users', usersRoutes); - -// Error handling middleware -app.use((err, req, res, next) => { - console.error(err.stack); - res.status(500).json({ message: 'Something went wrong!', error: err.message }); -}); - -// Connect to MongoDB -mongoose - .connect(process.env.MONGO_URI, { - dbName: 'hotel-management', - }) - .then(() => console.log('DB connect successful')) - .catch((err) => { - console.error('DB connection error:', err); - process.exit(1); - }); - -// Start server -const PORT = process.env.PORT || 8000; -app.listen(PORT, () => { - console.log(`Server is running on port ${PORT}`); -}); \ No newline at end of file