307 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			307 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # Admin API Endpoints
 | ||
|  | 
 | ||
|  | This document describes the admin-specific API endpoints for the Candivista platform. | ||
|  | 
 | ||
|  | ## Authentication
 | ||
|  | 
 | ||
|  | All admin endpoints require authentication with a valid JWT token from a user with `role: 'admin'`. | ||
|  | 
 | ||
|  | **Headers:** | ||
|  | ``` | ||
|  | Authorization: Bearer <jwt_token> | ||
|  | Content-Type: application/json | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Base URL
 | ||
|  | ``` | ||
|  | http://localhost:8083/rest/admin | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Endpoints
 | ||
|  | 
 | ||
|  | ### System Statistics
 | ||
|  | 
 | ||
|  | #### GET /statistics
 | ||
|  | Get system-wide statistics and metrics. | ||
|  | 
 | ||
|  | **Response:** | ||
|  | ```json | ||
|  | { | ||
|  |   "total_users": 150, | ||
|  |   "active_users": 142, | ||
|  |   "total_jobs": 89, | ||
|  |   "total_interviews": 234, | ||
|  |   "total_tokens_purchased": 1250, | ||
|  |   "total_tokens_used": 890, | ||
|  |   "total_revenue": 12500.00, | ||
|  |   "generated_at": "2024-01-15T10:30:00Z" | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ### User Management
 | ||
|  | 
 | ||
|  | #### GET /users
 | ||
|  | Get all users in the system. | ||
|  | 
 | ||
|  | **Response:** | ||
|  | ```json | ||
|  | [ | ||
|  |   { | ||
|  |     "id": "user-uuid", | ||
|  |     "email": "user@example.com", | ||
|  |     "first_name": "John", | ||
|  |     "last_name": "Doe", | ||
|  |     "role": "recruiter", | ||
|  |     "company_name": "Tech Corp", | ||
|  |     "is_active": true, | ||
|  |     "last_login_at": "2024-01-15T09:00:00Z", | ||
|  |     "created_at": "2024-01-01T00:00:00Z" | ||
|  |   } | ||
|  | ] | ||
|  | ``` | ||
|  | 
 | ||
|  | #### GET /users/:id
 | ||
|  | Get a specific user by ID. | ||
|  | 
 | ||
|  | #### PUT /users/:id
 | ||
|  | Update user information. | ||
|  | 
 | ||
|  | **Request Body:** | ||
|  | ```json | ||
|  | { | ||
|  |   "first_name": "John", | ||
|  |   "last_name": "Doe", | ||
|  |   "email": "john@example.com", | ||
|  |   "role": "recruiter", | ||
|  |   "company_name": "Tech Corp", | ||
|  |   "is_active": true | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### PATCH /users/:id/toggle-status
 | ||
|  | Toggle user active/inactive status. | ||
|  | 
 | ||
|  | **Response:** | ||
|  | ```json | ||
|  | { | ||
|  |   "success": true, | ||
|  |   "new_status": false | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### PATCH /users/:id/password
 | ||
|  | Change user password. | ||
|  | 
 | ||
|  | **Request Body:** | ||
|  | ```json | ||
|  | { | ||
|  |   "new_password": "newpassword123" | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### POST /users
 | ||
|  | Create a new user. | ||
|  | 
 | ||
|  | **Request Body:** | ||
|  | ```json | ||
|  | { | ||
|  |   "email": "newuser@example.com", | ||
|  |   "password": "password123", | ||
|  |   "first_name": "Jane", | ||
|  |   "last_name": "Smith", | ||
|  |   "role": "recruiter", | ||
|  |   "company_name": "Startup Inc" | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Job Management
 | ||
|  | 
 | ||
|  | #### GET /jobs
 | ||
|  | Get all jobs in the system with user information. | ||
|  | 
 | ||
|  | **Response:** | ||
|  | ```json | ||
|  | [ | ||
|  |   { | ||
|  |     "id": "job-uuid", | ||
|  |     "user_id": "user-uuid", | ||
|  |     "title": "Senior Developer", | ||
|  |     "description": "Job description...", | ||
|  |     "status": "active", | ||
|  |     "created_at": "2024-01-15T10:00:00Z", | ||
|  |     "first_name": "John", | ||
|  |     "last_name": "Doe", | ||
|  |     "email": "john@example.com", | ||
|  |     "company_name": "Tech Corp" | ||
|  |   } | ||
|  | ] | ||
|  | ``` | ||
|  | 
 | ||
|  | #### GET /jobs/:id
 | ||
|  | Get a specific job by ID. | ||
|  | 
 | ||
|  | #### PATCH /jobs/:id/status
 | ||
|  | Update job status. | ||
|  | 
 | ||
|  | **Request Body:** | ||
|  | ```json | ||
|  | { | ||
|  |   "status": "paused" | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### PUT /jobs/:id
 | ||
|  | Update job information. | ||
|  | 
 | ||
|  | **Request Body:** | ||
|  | ```json | ||
|  | { | ||
|  |   "title": "Updated Job Title", | ||
|  |   "description": "Updated description...", | ||
|  |   "status": "active" | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Token Management
 | ||
|  | 
 | ||
|  | #### GET /user-token-summaries
 | ||
|  | Get token usage summaries for all users. | ||
|  | 
 | ||
|  | **Response:** | ||
|  | ```json | ||
|  | [ | ||
|  |   { | ||
|  |     "user_id": "user-uuid", | ||
|  |     "first_name": "John", | ||
|  |     "last_name": "Doe", | ||
|  |     "email": "john@example.com", | ||
|  |     "total_purchased": 50, | ||
|  |     "total_used": 25, | ||
|  |     "total_available": 25, | ||
|  |     "utilization_percentage": 50.0 | ||
|  |   } | ||
|  | ] | ||
|  | ``` | ||
|  | 
 | ||
|  | #### POST /add-tokens
 | ||
|  | Add tokens to a specific user. | ||
|  | 
 | ||
|  | **Request Body:** | ||
|  | ```json | ||
|  | { | ||
|  |   "user_id": "user-uuid", | ||
|  |   "quantity": 10, | ||
|  |   "price_per_token": 5.00, | ||
|  |   "total_price": 50.00 | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Token Packages
 | ||
|  | 
 | ||
|  | #### GET /token-packages
 | ||
|  | Get all token packages. | ||
|  | 
 | ||
|  | **Response:** | ||
|  | ```json | ||
|  | [ | ||
|  |   { | ||
|  |     "id": "package-uuid", | ||
|  |     "name": "Professional Pack", | ||
|  |     "description": "Ideal for regular recruiters", | ||
|  |     "quantity": 20, | ||
|  |     "price_per_token": 4.00, | ||
|  |     "total_price": 80.00, | ||
|  |     "discount_percentage": 20, | ||
|  |     "is_popular": true, | ||
|  |     "is_active": true | ||
|  |   } | ||
|  | ] | ||
|  | ``` | ||
|  | 
 | ||
|  | #### POST /token-packages
 | ||
|  | Create a new token package. | ||
|  | 
 | ||
|  | **Request Body:** | ||
|  | ```json | ||
|  | { | ||
|  |   "name": "New Package", | ||
|  |   "description": "Package description", | ||
|  |   "quantity": 10, | ||
|  |   "price_per_token": 4.50, | ||
|  |   "total_price": 45.00, | ||
|  |   "discount_percentage": 10, | ||
|  |   "is_popular": false, | ||
|  |   "is_active": true | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### PUT /token-packages/:id
 | ||
|  | Update a token package. | ||
|  | 
 | ||
|  | #### PATCH /token-packages/:id/toggle-status
 | ||
|  | Toggle package active/inactive status. | ||
|  | 
 | ||
|  | #### DELETE /token-packages/:id
 | ||
|  | Delete a token package. | ||
|  | 
 | ||
|  | ### Interview Management
 | ||
|  | 
 | ||
|  | #### GET /interviews
 | ||
|  | Get all interviews in the system. | ||
|  | 
 | ||
|  | #### GET /interviews/:id
 | ||
|  | Get a specific interview by ID. | ||
|  | 
 | ||
|  | ### Payment Records
 | ||
|  | 
 | ||
|  | #### GET /payments
 | ||
|  | Get all payment records. | ||
|  | 
 | ||
|  | #### GET /payments/:id
 | ||
|  | Get a specific payment record by ID. | ||
|  | 
 | ||
|  | ## Error Responses
 | ||
|  | 
 | ||
|  | All endpoints return appropriate HTTP status codes and error messages: | ||
|  | 
 | ||
|  | - `400 Bad Request` - Invalid request data | ||
|  | - `401 Unauthorized` - Invalid or missing authentication | ||
|  | - `403 Forbidden` - Insufficient permissions (non-admin user) | ||
|  | - `404 Not Found` - Resource not found | ||
|  | - `500 Internal Server Error` - Server error | ||
|  | 
 | ||
|  | **Error Response Format:** | ||
|  | ```json | ||
|  | { | ||
|  |   "message": "Error description", | ||
|  |   "status": 400 | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Testing
 | ||
|  | 
 | ||
|  | Use the provided test script to verify admin endpoints: | ||
|  | 
 | ||
|  | ```bash | ||
|  | node test-admin.js | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Security Notes
 | ||
|  | 
 | ||
|  | 1. All admin endpoints require admin role verification | ||
|  | 2. JWT tokens are validated on every request | ||
|  | 3. User passwords are hashed using bcrypt | ||
|  | 4. All database queries use parameterized statements to prevent SQL injection | ||
|  | 5. Admin actions are logged for audit purposes | ||
|  | 
 | ||
|  | ## Database Schema
 | ||
|  | 
 | ||
|  | The admin endpoints interact with the following database tables: | ||
|  | - `users` - User accounts and profiles | ||
|  | - `jobs` - Job postings | ||
|  | - `interview_tokens` - Token purchases and usage | ||
|  | - `token_packages` - Available token packages | ||
|  | - `interviews` - Interview sessions | ||
|  | - `payment_records` - Payment history | ||
|  | - `user_usage` - Usage tracking and limits |