Files
Hotel-Booking/client/ROUTING_GUIDE.md
Iliyan Angelov 93d4c1df80 update
2025-11-16 15:12:43 +02:00

161 lines
4.6 KiB
Markdown

# Routing Configuration - Testing Guide
## ✅ Function 2 Completed
### Components Created:
1. **ProtectedRoute** - `src/components/auth/ProtectedRoute.tsx`
- Protects routes requiring authentication
- Redirects to `/login` if not logged in
- Saves location to return after login
2. **AdminRoute** - `src/components/auth/AdminRoute.tsx`
- Protects routes for Admin only
- Redirects to `/` if not admin
- Checks `userInfo.role === 'admin'`
3. **Page Components**:
- `RoomListPage` - Room list (public)
- `BookingListPage` - Booking history (protected)
- `DashboardPage` - Personal dashboard (protected)
### Route Structure:
#### Public Routes (No login required):
```
/ → HomePage
/rooms → RoomListPage
/about → About Page
/login → Login Page (not yet)
/register → Register Page (not yet)
/forgot-password → Forgot Password Page (not yet)
/reset-password/:token → Reset Password Page (not yet)
```
#### Protected Routes (Login required):
```
/dashboard → DashboardPage (ProtectedRoute)
/bookings → BookingListPage (ProtectedRoute)
/profile → Profile Page (ProtectedRoute)
```
#### Admin Routes (Admin only):
```
/admin → AdminLayout (AdminRoute)
/admin/dashboard → Admin Dashboard
/admin/users → User Management
/admin/rooms → Room Management
/admin/bookings → Booking Management
/admin/payments → Payment Management
/admin/services → Service Management
/admin/promotions → Promotion Management
/admin/banners → Banner Management
/admin/reports → Reports
/admin/settings → Settings
```
## 🧪 How to Test
### 1. Start Dev Server:
```bash
cd /d/hotel-booking/client
npm run dev
```
Open `http://localhost:5173`
### 2. Test Public Routes:
- Access `/` → Display HomePage ✅
- Access `/rooms` → Display RoomListPage ✅
- Access `/about` → Display About Page ✅
### 3. Test Protected Routes (Not logged in):
- Access `/dashboard` → Redirect to `/login`
- Access `/bookings` → Redirect to `/login`
- Access `/profile` → Redirect to `/login`
### 4. Test Protected Routes (Logged in):
- Click **"🔒 Demo Login"** button at bottom right
- Access `/dashboard` → Display Dashboard ✅
- Access `/bookings` → Display Booking List ✅
- Access `/profile` → Display Profile ✅
### 5. Test Admin Routes (Role = Customer):
- Ensure logged in (role = customer)
- Access `/admin` → Redirect to `/`
- Access `/admin/dashboard` → Redirect to `/`
### 6. Test Admin Routes (Role = Admin):
- Click **"👑 Switch to Admin"** button
- Access `/admin` → Redirect to `/admin/dashboard`
- Access `/admin/users` → Display User Management ✅
- Access `/admin/rooms` → Display Room Management ✅
- Click menu items in SidebarAdmin → Works normally ✅
### 7. Test Logout:
- Click **"🔓 Demo Logout"** button
- Access `/dashboard` → Redirect to `/login`
- Access `/admin` → Redirect to `/`
## 🎯 Expected Results
### ✅ ProtectedRoute:
1. Users not logged in cannot access protected routes
2. Redirect to `/login` and save `state.from` to return later
3. Logged in users can access protected routes normally
### ✅ AdminRoute:
1. Non-admin users cannot access `/admin/*`
2. Redirect to `/` if not admin
3. Admin can access all admin routes
### ✅ No redirect loop:
1. Redirect only happens once
2. No infinite redirect loop
3. Browser history works correctly (back/forward)
## 📝 Demo Buttons (Temporary)
### 🔒 Demo Login/Logout:
- Click to toggle authentication state
- Simulates login/logout
- Will be replaced by Zustand store in Function 3
### 👑 Switch Role:
- Only displays when logged in
- Toggle between `customer``admin`
- Test AdminRoute works correctly
## 🚀 Next Steps
Function 3: useAuthStore (Zustand Store)
- Create store to manage global auth state
- Replace demo state with Zustand
- Integrate with localStorage
- Remove demo toggle buttons
## 🔧 File Structure
```
src/
├── components/
│ ├── auth/
│ │ ├── ProtectedRoute.tsx
│ │ ├── AdminRoute.tsx
│ │ └── index.ts
│ └── layout/
│ ├── Header.tsx
│ ├── Footer.tsx
│ ├── SidebarAdmin.tsx
│ ├── LayoutMain.tsx
│ └── index.ts
├── pages/
│ ├── HomePage.tsx
│ ├── AdminLayout.tsx
│ └── customer/
│ ├── RoomListPage.tsx
│ ├── BookingListPage.tsx
│ └── DashboardPage.tsx
└── App.tsx
```