# Upload Toàn Bộ Files Lên S3

## Tổng quan

Tính năng này cho phép upload toàn bộ files từ thư mục `DESTINATION_BASE` lên S3/MinIO với prefix "classroom/".

## Cấu trúc S3 Key

Files sẽ được upload với cấu trúc key như sau:

- **File gốc**: `/var/www/html/moodle_files/94/mp3/236341/3 Q.mp3`
- **S3 Key**: `classroom/94/mp3/236341/3 Q.mp3`

- **File gốc**: `/var/www/html/moodle_files/correction_audio/94/3 A.mp3`
- **S3 Key**: `classroom/correction_audio/94/3 A.mp3`

## Sử dụng

### 1. API Endpoint

```bash
POST /api/reports/files/upload-all-to-s3
```

API này chỉ trigger command, không thực hiện upload thật.

**Response:**
```json
{
    "status": "success",
    "message": "Đã trigger command upload toàn bộ files lên S3. Vui lòng kiểm tra log để theo dõi tiến trình.",
    "note": "Sử dụng command: php artisan upload:all-files-to-s3 để thực hiện upload",
    "destination_base": "/var/www/html/moodle_files"
}
```

### 2. Artisan Command

#### Upload thật:
```bash
php artisan upload:all-files-to-s3
```

#### Chế độ dry-run (chỉ xem thông tin):
```bash
php artisan upload:all-files-to-s3 --dry-run
```

## Tính năng

- **Recursive Directory Scanning**: Tự động duyệt toàn bộ thư mục con
- **Progress Tracking**: Hiển thị tiến trình và thống kê
- **Error Handling**: Xử lý và báo cáo lỗi chi tiết
- **Logging**: Ghi log đầy đủ cho việc theo dõi
- **Background Processing**: Thiết kế để chạy trong command, tránh timeout

## Output

Command sẽ hiển thị:

```
✅ Upload hoàn tất thành công!
📊 Thống kê:
   - Tổng số files đã xử lý: 1250
   - Số files upload thành công: 1248
   - Số files lỗi: 2
   - Thời gian thực hiện: 45.23 giây
```

## Lưu ý

1. **Thời gian**: Tùy thuộc vào số lượng files và kích thước, quá trình có thể mất nhiều thời gian
2. **Memory**: Command được thiết kế để xử lý từng file một cách hiệu quả
3. **Logs**: Kiểm tra logs để theo dõi tiến trình và xử lý lỗi
4. **S3 Configuration**: Đảm bảo cấu hình S3/MinIO đã được thiết lập đúng

## Troubleshooting

### Lỗi thường gặp:

1. **Thư mục không tồn tại**: Kiểm tra biến môi trường `DESTINATION_BASE`
2. **S3 connection failed**: Kiểm tra cấu hình AWS credentials và S3 bucket
3. **Permission denied**: Kiểm tra quyền truy cập thư mục và files

### Kiểm tra logs:

```bash
tail -f storage/logs/laravel.log | grep "Upload all files to S3"
```
