first commit
This commit is contained in:
263
README.md
Normal file
263
README.md
Normal file
@@ -0,0 +1,263 @@
|
||||
# Interview Quiz Application - Backend
|
||||
|
||||
MySQL + Express + Node.js Backend API
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
backend/
|
||||
├── config/ # Configuration files (database, etc.)
|
||||
├── controllers/ # Request handlers
|
||||
├── middleware/ # Custom middleware (auth, validation, etc.)
|
||||
├── models/ # Sequelize models
|
||||
├── routes/ # API route definitions
|
||||
├── migrations/ # Database migrations
|
||||
├── seeders/ # Database seeders
|
||||
├── tests/ # Test files
|
||||
├── server.js # Main application entry point
|
||||
├── .env # Environment variables (not in git)
|
||||
├── .env.example # Environment variables template
|
||||
└── package.json # Dependencies and scripts
|
||||
```
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Node.js 18+
|
||||
- MySQL 8.0+
|
||||
- npm or yarn
|
||||
|
||||
## Installation
|
||||
|
||||
1. **Navigate to backend directory:**
|
||||
```bash
|
||||
cd backend
|
||||
```
|
||||
|
||||
2. **Install dependencies:**
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
3. **Setup environment variables:**
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
Then edit `.env` with your database credentials.
|
||||
|
||||
4. **Create MySQL database:**
|
||||
```sql
|
||||
CREATE DATABASE interview_quiz_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
```
|
||||
|
||||
## Running the Application
|
||||
|
||||
### Development Mode
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
Uses nodemon for auto-restart on file changes.
|
||||
|
||||
### Production Mode
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
### Server will start on:
|
||||
- **URL:** http://localhost:3000
|
||||
- **API Endpoint:** http://localhost:3000/api
|
||||
- **Health Check:** http://localhost:3000/health
|
||||
|
||||
## Database Management
|
||||
|
||||
### Initialize Sequelize
|
||||
```bash
|
||||
npx sequelize-cli init
|
||||
```
|
||||
|
||||
### Run Migrations
|
||||
```bash
|
||||
npm run migrate
|
||||
```
|
||||
|
||||
### Undo Last Migration
|
||||
```bash
|
||||
npm run migrate:undo
|
||||
```
|
||||
|
||||
### Run Seeders
|
||||
```bash
|
||||
npm run seed
|
||||
```
|
||||
|
||||
### Undo Seeders
|
||||
```bash
|
||||
npm run seed:undo
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
### Run all tests
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
### Run tests in watch mode
|
||||
```bash
|
||||
npm run test:watch
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
Coming soon... (Will be documented as features are implemented)
|
||||
|
||||
### Authentication
|
||||
- `POST /api/auth/register` - Register new user
|
||||
- `POST /api/auth/login` - Login user
|
||||
- `POST /api/auth/logout` - Logout user
|
||||
- `GET /api/auth/verify` - Verify JWT token
|
||||
|
||||
### Categories
|
||||
- `GET /api/categories` - Get all categories
|
||||
- `GET /api/categories/:id` - Get category by ID
|
||||
|
||||
### Questions
|
||||
- `GET /api/questions/category/:categoryId` - Get questions by category
|
||||
- `GET /api/questions/:id` - Get question by ID
|
||||
- `GET /api/questions/search` - Search questions
|
||||
|
||||
### Quiz
|
||||
- `POST /api/quiz/start` - Start quiz session
|
||||
- `POST /api/quiz/submit` - Submit answer
|
||||
- `POST /api/quiz/complete` - Complete quiz session
|
||||
- `GET /api/quiz/session/:sessionId` - Get session details
|
||||
|
||||
### User Dashboard
|
||||
- `GET /api/users/:userId/dashboard` - Get user dashboard
|
||||
- `GET /api/users/:userId/history` - Get quiz history
|
||||
- `PUT /api/users/:userId` - Update user profile
|
||||
|
||||
### Admin
|
||||
- `GET /api/admin/statistics` - Get system statistics
|
||||
- `GET /api/admin/guest-settings` - Get guest settings
|
||||
- `PUT /api/admin/guest-settings` - Update guest settings
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `NODE_ENV` | Environment (development/production) | development |
|
||||
| `PORT` | Server port | 3000 |
|
||||
| `API_PREFIX` | API route prefix | /api |
|
||||
| `DB_HOST` | MySQL host | localhost |
|
||||
| `DB_PORT` | MySQL port | 3306 |
|
||||
| `DB_NAME` | Database name | interview_quiz_db |
|
||||
| `DB_USER` | Database user | root |
|
||||
| `DB_PASSWORD` | Database password | - |
|
||||
| `JWT_SECRET` | Secret key for JWT tokens | - |
|
||||
| `JWT_EXPIRE` | JWT expiration time | 24h |
|
||||
| `CORS_ORIGIN` | Allowed CORS origin | http://localhost:4200 |
|
||||
|
||||
## Development Workflow
|
||||
|
||||
1. **Create a feature branch**
|
||||
```bash
|
||||
git checkout -b feature/your-feature-name
|
||||
```
|
||||
|
||||
2. **Implement your feature**
|
||||
- Follow the tasks in `BACKEND_TASKS.md`
|
||||
- Write tests for your code
|
||||
- Update this README if needed
|
||||
|
||||
3. **Test your changes**
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
4. **Commit and push**
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "feat: your feature description"
|
||||
git push origin feature/your-feature-name
|
||||
```
|
||||
|
||||
## Technologies Used
|
||||
|
||||
- **Express.js** - Web framework
|
||||
- **Sequelize** - ORM for MySQL
|
||||
- **MySQL2** - MySQL driver
|
||||
- **JWT** - Authentication
|
||||
- **Bcrypt** - Password hashing
|
||||
- **Helmet** - Security headers
|
||||
- **CORS** - Cross-origin resource sharing
|
||||
- **Morgan** - HTTP request logger
|
||||
- **Express Validator** - Input validation
|
||||
- **Express Rate Limit** - Rate limiting
|
||||
- **Jest** - Testing framework
|
||||
- **Supertest** - API testing
|
||||
|
||||
## Testing Database Connection
|
||||
|
||||
To test the database connection:
|
||||
|
||||
```bash
|
||||
npm run test:db
|
||||
```
|
||||
|
||||
This will verify:
|
||||
- MySQL server is running
|
||||
- Database credentials are correct
|
||||
- Database exists
|
||||
- Connection is successful
|
||||
|
||||
## Environment Configuration
|
||||
|
||||
All environment variables are validated on server startup. To manually validate:
|
||||
|
||||
```bash
|
||||
npm run validate:env
|
||||
```
|
||||
|
||||
To generate a new JWT secret:
|
||||
|
||||
```bash
|
||||
npm run generate:jwt
|
||||
```
|
||||
|
||||
See [ENVIRONMENT_GUIDE.md](./ENVIRONMENT_GUIDE.md) for complete configuration documentation.
|
||||
|
||||
## Testing Models
|
||||
|
||||
To test the User model:
|
||||
|
||||
```bash
|
||||
npm run test:user
|
||||
```
|
||||
|
||||
This verifies:
|
||||
- User creation with UUID
|
||||
- Password hashing
|
||||
- Password comparison
|
||||
- Validation rules
|
||||
- Helper methods
|
||||
|
||||
## Next Steps
|
||||
|
||||
Follow the tasks in `BACKEND_TASKS.md`:
|
||||
- ✅ Task 1: Project Initialization (COMPLETED)
|
||||
- ✅ Task 2: Database Setup (COMPLETED)
|
||||
- ✅ Task 3: Environment Configuration (COMPLETED)
|
||||
- ✅ Task 4: Create User Model & Migration (COMPLETED)
|
||||
- 🔄 Task 5: Create Categories Model & Migration (NEXT)
|
||||
- ... and more
|
||||
|
||||
## Documentation References
|
||||
|
||||
- [BACKEND_TASKS.md](../BACKEND_TASKS.md) - Complete task list
|
||||
- [SEQUELIZE_QUICK_REFERENCE.md](../SEQUELIZE_QUICK_REFERENCE.md) - Code examples
|
||||
- [SAMPLE_MIGRATIONS.md](../SAMPLE_MIGRATIONS.md) - Migration templates
|
||||
- [interview_quiz_user_story.md](../interview_quiz_user_story.md) - Full specification
|
||||
|
||||
## License
|
||||
|
||||
ISC
|
||||
Reference in New Issue
Block a user