# ReportController API Documentation

## Overview
The ReportController contains functions related to course reporting, file management, and H5P content management. All routes are grouped under the `/api/reports` prefix for better organization.

## API Endpoints

### Question & Course Reports

#### 1. Course Question Count Report
- **Route**: `POST /api/reports/course/question-count`
- **Method**: `reportCountQuestion`
- **Description**: Báo cáo số lượng câu hỏi theo khóa học
- **Parameters**:
  - `course_id` (optional): ID của khóa học cụ thể
  - `course_ids` (optional): Danh sách ID khóa học
- **Response**:
```json
{
  "status": "success",
  "detail": [
    {
      "course_id": 193,
      "total": 150
    },
    {
      "course_id": 194,
      "total": 200
    }
  ]
}
```

#### 2. Question IDs Report
- **Route**: `GET /api/reports/question-ids`
- **Method**: `questionIdsReport`
- **Description**: Báo cáo danh sách ID câu hỏi theo loại
- **Parameters**:
  - `course_id` (optional, default: 158): ID khóa học
  - `question_type` (optional, default: "essay"): Loại câu hỏi
- **Response**:
```json
{
  "status": "success",
  "detail": [291481, 291482, 291483]
}
```

### File Management

#### 3. Download Files by Course
- **Route**: `POST /api/reports/files/download`
- **Method**: `downloadFilesByCourse`
- **Description**: Download files từ Moodle về local storage cho một khóa học
- **Parameters**:
  - `course_id` (required): ID khóa học
- **Response**:
```json
{
  "status": "success",
  "data": {
    "course_id": 193,
    "total_files": 50,
    "copied_count": 48,
    "missing_count": 2,
    "copied_files": ["path1", "path2"],
    "missing_files": [{"filename": "file.mp3", "source_path": "/path"}]
  }
}
```

#### 4. Upload Files to S3 by Course
- **Route**: `POST /api/reports/files/upload-s3`
- **Method**: `uploadFilesByCourse`
- **Description**: Upload files lên S3 cho một khóa học
- **Parameters**:
  - `course_id` (required): ID khóa học
- **Response**:
```json
{
  "status": "success",
  "data": {
    "course_id": 193,
    "total_files": 50,
    "uploaded_count": 48,
    "missing_count": 2,
    "uploaded_files": ["s3key1", "s3key2"],
    "missing_files": [{"filename": "file.mp3", "source_path": "/path"}]
  }
}
```

#### 5. Test S3 Upload
- **Route**: `GET /api/reports/files/test-s3-upload`
- **Method**: `uploadToS3Test`
- **Description**: Test upload một file cụ thể lên S3
- **Response**:
```json
{
  "status": "success",
  "uploaded": true,
  "s3_key": "test/230989/13.1.PNG",
  "url_storage": "https://bucket.s3.region.amazonaws.com/test/230989/13.1.PNG",
  "url_cloudfront": "https://cloudfront.domain.com/test/230989/13.1.PNG"
}
```

### H5P Management

#### 6. Copy H5P Files by Course
- **Route**: `POST /api/reports/h5p/copy`
- **Method**: `copyH5pByCourse`
- **Description**: Copy H5P files cho một khóa học
- **Parameters**:
  - `course_id` (required): ID khóa học
- **Response**:
```json
{
  "status": "success",
  "course_id": 193,
  "total_h5p_files": 10,
  "copied_count": 10,
  "files": [...],
  "copied_files": ["path1", "path2"]
}
```

#### 7. Copy H5P from Quiz by Course
- **Route**: `POST /api/reports/h5p/copy-from-quiz`
- **Method**: `copyH5pFromQuizByCourse`
- **Description**: Copy H5P files từ quiz questions cho một khóa học
- **Parameters**:
  - `course_id` (required): ID khóa học
- **Response**:
```json
{
  "status": "success",
  "course_id": 193,
  "total_h5p_files": 5,
  "copied_count": 5,
  "files": [...],
  "copied_files": ["path1", "path2"]
}
```

## Migration from TestController

### Old Routes (Removed)
```php
// Đã xóa khỏi TestController
Route::post("lms/course/report", [TestController::class,'reportCountQuestion']);
Route::post("lms/questionIdsReport", [TestController::class,'questionIdsReport']);
Route::post("lms/uploadToS3Test", [TestController::class,'uploadToS3Test']);
```

### New Routes (ReportController)
```php
// Nhóm tất cả routes báo cáo
Route::prefix('reports')->group(function () {
    Route::post('/course/question-count', [ReportController::class, 'reportCountQuestion']);
    Route::get('/question-ids', [ReportController::class, 'questionIdsReport']);
    Route::post('/files/download', [ReportController::class, 'downloadFilesByCourse']);
    Route::post('/files/upload-s3', [ReportController::class, 'uploadFilesByCourse']);
    Route::get('/files/test-s3-upload', [ReportController::class, 'uploadToS3Test']);
    Route::post('/h5p/copy', [ReportController::class, 'copyH5pByCourse']);
    Route::post('/h5p/copy-from-quiz', [ReportController::class, 'copyH5pFromQuizByCourse']);
});
```

## Benefits

1. **Better Organization**: Tất cả các chức năng báo cáo được nhóm lại trong một controller riêng
2. **Cleaner Routes**: Routes được nhóm dưới prefix `/reports` với cấu trúc rõ ràng
3. **Easier Maintenance**: Dễ dàng bảo trì và mở rộng các tính năng báo cáo
4. **Better API Structure**: API có cấu trúc logic và dễ hiểu
5. **Separation of Concerns**: Tách biệt logic báo cáo khỏi TestController

## Usage Examples

```bash
# Get question count report
curl -X POST /api/reports/course/question-count \
  -H "Content-Type: application/json" \
  -d '{"course_id": 193}'

# Get question IDs
curl -X GET "/api/reports/question-ids?course_id=158&question_type=essay"

# Download files for a course
curl -X POST /api/reports/files/download \
  -H "Content-Type: application/json" \
  -d '{"course_id": 193}'

# Upload files to S3
curl -X POST /api/reports/files/upload-s3 \
  -H "Content-Type: application/json" \
  -d '{"course_id": 193}'
```
