|  | # 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
 |