- Node.js 18+
- MongoDB 6+
- Redis 7+
- Elasticsearch 8+
- RabbitMQ 3.9+
# Clone repository
git clone <repo-url> && cd QA-API
# Install dependencies
npm install
# Environment setup
cp config/env/config.env.example config/env/config.env
# Edit config.env with your settings
# Setup notification templates
npm run setup:templates
# Start development server
npm run dev# Build and run with Docker Compose
docker-compose up -d
# Or build manually
docker build -t qa-api .
docker run -p 3000:3000 --env-file config/env/config.env qa-apiLooking for a Postman collection? Find it in the postman/ directory.
# Import the collection into Postman
postman/QA-API.postman_collection.jsonThe collection includes all API endpoints, request examples, and automatic token management. Just update the baseUrl variable if needed.
POST /api/auth/register # User registration
POST /api/auth/login # User login (auto-saves token)
POST /api/auth/loginGoogle # Google OAuth login
GET /api/auth/logout # User logout
POST /api/auth/forgotpassword # Password reset request
PUT /api/auth/resetpassword # Password reset
GET /api/auth/profile # Get user profile
PUT /api/auth/edit # Edit user profile
POST /api/auth/upload # Upload profile image
GET /api/auth/check-admin-permissions # Check admin permissions
GET /api/questions # List all questions
GET /api/questions/paginated # Get paginated questions (with filters, search, sort)
GET /api/questions/:id # Get question details
GET /api/questions/user/:userId # Get questions by user
GET /api/questions/parent/:id # Get questions related to a parent content
POST /api/questions/ask # Create question (with optional parentContentId)
PUT /api/questions/:id/edit # Update question
DELETE /api/questions/:id/delete # Delete question
GET /api/questions/:id/like # Like question
GET /api/questions/:id/undo_like # Unlike question
GET /api/questions/:id/dislike # Dislike question
GET /api/questions/:id/undo_dislike # Undo dislike question
GET /api/questions/:question_id/answers # Get all answers for a question
GET /api/questions/:question_id/answers/:answer_id # Get specific answer
POST /api/questions/:question_id/answers # Add answer to question
PUT /api/questions/:question_id/answers/:answer_id/edit # Update answer
DELETE /api/questions/:question_id/answers/:answer_id/delete # Delete answer
GET /api/questions/:question_id/answers/:answer_id/like # Like answer
GET /api/questions/:question_id/answers/:answer_id/undo_like # Unlike answer
GET /api/questions/:question_id/answers/:answer_id/dislike # Dislike answer
GET /api/questions/:question_id/answers/:answer_id/undo_dislike # Undo dislike answer
GET /api/answers/:id # Get answer by ID (standalone)
GET /api/answers/user/:userId # Get answers by user
POST /api/notifications/user/:userId # Send notification to user
POST /api/notifications/channels # Send notification to specific channels
GET /api/notifications/user/:userId # Get user notifications
GET /api/notifications/preferences/:userId # Get user notification preferences
PUT /api/notifications/preferences/:userId # Update user notification preferences
POST /api/notifications/test/:userId # Send test notification (all channels)
GET /api/notifications/debug/:userId # Debug notifications
GET /api/notifications/queue/status # Get queue status
GET /api/notifications/stats # Get notification statistics
POST /api/bookmarks/add # Add bookmark
DELETE /api/bookmarks/remove/:id # Remove bookmark
PUT /api/bookmarks/:id # Update bookmark
GET /api/bookmarks/user # Get user bookmarks
GET /api/bookmarks/check/:targetType/:targetId # Check if bookmark exists
GET /api/bookmarks/search # Search bookmarks
GET /api/bookmarks/paginated # Get paginated bookmarks
POST /api/bookmarks/collections # Create collection
GET /api/bookmarks/collections # Get user collections
PUT /api/bookmarks/collections/:id # Update collection
DELETE /api/bookmarks/collections/:id # Delete collection
POST /api/bookmarks/collections/:collectionId/items/:bookmarkId # Add to collection
DELETE /api/bookmarks/collections/:collectionId/items/:bookmarkId # Remove from collection
GET /api/bookmarks/collections/:id/items # Get collection items
GET /api/bookmarks/stats # Get bookmark statistics
GET /api/public/users/:id # Get public user profile (no auth required)
GET /api/users # List all users (Admin only)
GET /api/users/:id # Get user details (Admin only)
GET /api/admin/users # List all users (Admin only)
PUT /api/admin/users/:userId # Update user (Admin only)
DELETE /api/admin/users/:userId # Delete user (Admin only)
PATCH /api/admin/users/:userId/block # Toggle user block status (Admin only)
PATCH /api/admin/users/:userId/roles # Update user roles (Admin only)
GET /api/admin/users/stats # Get user statistics (Admin only)
GET /api/permissions/roles # List all roles
POST /api/permissions/assign-role # Assign role to user
DELETE /api/permissions/remove-role # Remove role from user
GET /api/permissions/user-roles/:userId # Get user roles
GET /api/permissions/permissions # List all permissions
POST /api/permissions/role-permissions # Add permissions to role
DELETE /api/permissions/role-permissions # Remove permissions from role
GET /api/permissions/user-permissions/:userId # Get user permissions
GET /health # Full health check (no auth)
GET /health/quick # Quick health check (no auth)
GET /api/monitoring/connections # Connection status (Admin only)
GET /api/monitoring/alerts # Alert history (Admin only)
GET /api/monitoring/stats # Monitoring statistics (Admin only)
POST /api/monitoring/start # Start monitoring (Admin only)
POST /api/monitoring/stop # Stop monitoring (Admin only)
WS /ws/monitoring # Real-time monitoring updates
# All tests (excluding API tests)
npm test # Run all tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
# Specific test suites
npm run test:unit # Unit tests only
npm run test:integration # Integration tests only
npm run test:websocket # WebSocket tests
# Performance tests
npm run test:performance # k6 performance tests
npm run test:load # Load testing
npm run test:stress # Stress testing
# Test utilities
npm run test:setup # Setup test environment
npm run test:clean # Clean test data# Server
PORT=3000
NODE_ENV=development
# Database
MONGO_URI=mongodb://localhost:27017/qa-platform
MONGO_TEST_URI=mongodb://localhost:27017/qa-platform-test
# Redis
REDIS_URL=redis://localhost:6379
REDIS_TEST_URL=redis://localhost:6379
# JWT
JWT_SECRET_KEY=your-super-secret-jwt-key
JWT_REFRESH_SECRET_KEY=your-super-secret-refresh-key
JWT_EXPIRES_IN=1h
JWT_REFRESH_EXPIRES_IN=7d
# Google OAuth
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
# Email (SMTP)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
SMTP_FROM=noreply@yourdomain.com
# RabbitMQ
RABBITMQ_URL=amqp://localhost:5672
RABBITMQ_QUEUE=notifications
# Elasticsearch
ELASTICSEARCH_ENABLED=true
ELASTICSEARCH_URL=http://localhost:9200
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=elasticpassword
# Notification Settings
NOTIFICATION_STRATEGY=smart # direct, queue, smart
NOTIFICATION_CHANNELS=email,sms # email,sms,push,webhook
NOTIFICATION_TEMPLATE_LANG=en # en,tr,de
# Monitoring Settings
MONITORING_ENABLED=true # Enable monitoring
MONITORING_INTERVAL=30000 # Check interval (30s)
MONITORING_ALERT_LIMIT=50 # Max alerts to store
WEBSOCKET_PORT=3001 # WebSocket server port
# Logging
LOG_LEVEL=info # error, warn, info, debug
LOG_FORMAT=json # json, simple
# Performance
CACHE_TTL=3600 # Cache TTL in seconds
RATE_LIMIT_WINDOW=900000 # Rate limit window (15 min)
RATE_LIMIT_MAX=100 # Max requests per window// Health check types
GET /health/quick // Fast check - basic service status
GET /health // Full check - detailed service information
// Health check response format
{
"status": "healthy" | "unhealthy" | "starting",
"timestamp": "2024-01-01T00:00:00.000Z",
"services": {
"database": { "status": "connected", "responseTime": 15 },
"cache": { "status": "connected", "responseTime": 5 },
"search": { "status": "connected", "responseTime": 10 },
"queue": { "status": "connected", "responseTime": 10 },
"email": { "status": "connected", "responseTime": 25 }
}
}version: '3.8'
services:
api:
build: .
ports:
- '3000:3000'
- '3001:3001' # WebSocket port
environment:
- NODE_ENV=production
depends_on:
- mongodb
- redis
- elasticsearch
- rabbitmq
mongodb:
image: mongo:6
ports:
- '27017:27017'
volumes:
- mongodb_data:/data/db
redis:
image: redis:7-alpine
ports:
- '6379:6379'
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
ports:
- '9200:9200'
environment:
- discovery.type=single-node
- xpack.security.enabled=true
- ELASTIC_PASSWORD=elasticpassword
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
rabbitmq:
image: rabbitmq:3.9-management
ports:
- '5672:5672'
- '15672:15672'QA-API/
βββ config/ # Configuration files
β βββ env/ # Environment configurations
βββ constants/ # Application constants
βββ controllers/ # Request handlers
βββ services/ # Business logic
β βββ managers/ # Business managers
β βββ contracts/ # Service contracts/interfaces
βββ repositories/ # Data access layer
β βββ interfaces/ # Repository interfaces
β βββ mongodb/ # MongoDB implementations
βββ models/ # Data models
β βββ mongodb/ # MongoDB models
βββ middlewares/ # Express middlewares
β βββ authorization/ # Authorization middleware
β βββ errors/ # Error handling
βββ infrastructure/ # External services & infrastructure
β βββ cache/ # Cache providers
β βββ elasticsearch/ # Elasticsearch integration
β βββ search/ # Search & Index (abstraction of elastic)
β βββ logging/ # Logging providers
β βββ validation/ # Validation schemas
βββ database/ # Database utilities
β βββ migrations/ # Database migrations
β βββ seeds/ # Seed data
βββ routers/ # API route definitions
βββ types/ # TypeScript type definitions
β βββ dto/ # Data Transfer Objects
βββ tests/ # Test suites
β βββ unit/ # Unit tests
β βββ integration/ # Integration tests
β βββ mocks/ # Test mocks
βββ scripts/ # Utility scripts
βββ performance/ # Performance testing
βββ k8s/ # Kubernetes configurations
βββ public/ # Public assets
- Backend: TypeScript, Node.js, Express
- Database: MongoDB with Mongoose
- Cache: Redis
- Search: Elasticsearch
- Message Queue: RabbitMQ
- Testing: Jest
- Containerization: Docker
- Real-time: WebSocket