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