Files
Hotel-Booking/server/README.md
Iliyan Angelov 824eec6190 Hotel Booking
2025-11-16 14:19:13 +02:00

167 lines
3.8 KiB
Markdown

# Hotel Booking Server - Setup Guide
## 🚀 Quick Start
### 1. Install Dependencies
```bash
cd server
npm install
```
### 2. Configure Environment
Copy `.env.example` to `.env` and update values:
```bash
cp .env.example .env
```
Edit `.env`:
```bash
DB_NAME=hotel_db
DB_USER=root
DB_PASS=your_password
JWT_SECRET=your-secret-key
```
### 3. Setup Database
**Option A: Using existing MySQL database**
```bash
# Create database
mysql -u root -p
CREATE DATABASE hotel_db;
exit;
# Run migrations
npm run migrate
# (Optional) Seed data
npm run seed
```
**Option B: Database will be created automatically**
- Just run the server
- Make sure MySQL is running
- Database will be created on first connection
### 4. Start Server
```bash
# Development mode with nodemon
npm run dev
# Production mode
npm start
```
Server will be available at: `http://localhost:3000`
## 📡 API Endpoints
### Health Check
```bash
GET http://localhost:3000/health
```
### Authentication
```bash
POST /api/auth/register
POST /api/auth/login
POST /api/auth/refresh-token
POST /api/auth/logout
GET /api/auth/profile (Protected)
```
## 🧪 Test API
### Register New User
```bash
curl -X POST http://localhost:3000/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"name": "John Doe",
"email": "john@example.com",
"password": "Password123",
"phone": "0123456789"
}'
```
### Login
```bash
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "john@example.com",
"password": "Password123"
}'
```
## ✅ Server Features
- ✅ Express.js setup with security middleware
- ✅ JWT authentication (access + refresh tokens)
- ✅ Password hashing with bcrypt
- ✅ Input validation with express-validator
- ✅ Error handling middleware
- ✅ Rate limiting
- ✅ CORS configuration
- ✅ Request logging with Morgan
- ✅ Compression middleware
- ✅ Helmet security headers
## 📁 Project Structure
```
server/
├── src/
│ ├── config/
│ │ └── database.js # Database configuration
│ ├── controllers/
│ │ └── authController.js # Auth logic
│ ├── databases/
│ │ ├── migrations/ # Database migrations
│ │ ├── models/ # Sequelize models
│ │ └── seeders/ # Seed data
│ ├── middlewares/
│ │ ├── auth.js # JWT verification
│ │ ├── errorHandler.js # Global error handler
│ │ └── validate.js # Validation middleware
│ ├── routes/
│ │ ├── authRoutes.js # Auth routes
│ │ ├── userRoutes.js # User routes
│ │ ├── roomRoutes.js # Room routes
│ │ └── bookingRoutes.js # Booking routes
│ ├── validators/
│ │ └── authValidator.js # Auth validation rules
│ ├── app.js # Express app setup
│ └── server.js # Server entry point
├── .env # Environment variables
├── .env.example # Environment template
└── package.json
```
## 🔧 Troubleshooting
### Database Connection Error
```
Error: Access denied for user 'root'@'localhost'
```
**Solution:** Check DB_USER and DB_PASS in .env
### Port Already in Use
```
Error: listen EADDRINUSE: address already in use :::3000
```
**Solution:** Change PORT in .env or kill process using port 3000
### JWT Secret Warning
```
Warning: Using default JWT secret
```
**Solution:** Set JWT_SECRET in .env to a strong random string
## 📝 Notes
- Default customer role_id = 3
- Access token expires in 1 hour
- Refresh token expires in 7 days (or 1 day without "Remember Me")
- Password must contain uppercase, lowercase, and number
- Password minimum length: 8 characters