# Hướng Dẫn: Kéo Câu Hỏi Từ LMS Cũ Về Staging → EMS Prod

## Tổng quan

Luồng này dùng để di chuyển câu hỏi (question) từ hệ thống LMS cũ (Moodle) về staging LMS mới,
xử lý & import vào EMS production.

> **Môi trường áp dụng:** Staging LMS (`lmsnew.hocmai.net`), AWS S3, EMS Prod

---

## Các Bước Thực Hiện

### Bước 1 — Download file media của course

Chạy artisan command trên server **staging LMS** để tải toàn bộ file media (mp3, video...) về local:

```bash
php artisan download:files-by-course {courseId}
```

File sẽ được lưu vào thư mục:

```
/var/www/html/moodle_files_englishclassroom/{courseId}/
```

**Ví dụ:**

```
/var/www/html/moodle_files_englishclassroom/213/mp3/308798/Audio-2.mp3
```

---

### Bước 2 — Đồng bộ file lên AWS S3

Báo **anh Linh** kéo toàn bộ thư mục từ staging lên AWS S3.

**Quy tắc mapping đường dẫn:**

| Đường dẫn trên Staging | Đường dẫn trên AWS S3 |
|---|---|
| `/var/www/html/moodle_files_englishclassroom/213/` | `classroom/213/` |
| `/var/www/html/moodle_files_englishclassroom/213/mp3/308798/Audio-2.mp3` | `classroom/213/mp3/308798/Audio-2.mp3` |

> **Lưu ý:** Bỏ phần `/var/www/html/moodle_files_englishclassroom/` ở đầu, thay bằng prefix `classroom/`.

---

### Bước 3 — Import câu hỏi vào table staging (format MySQL)

Gọi API để kéo toàn bộ question của course về table trong staging DB:

```bash
curl --location 'https://lmsnew.hocmai.net/api/lms/question-import-38/course/format-mysql' \
--header 'Content-Type: application/json' \
--data '{
    "course_id": "218"
}'
```

> Thay `218` bằng `course_id` thực tế cần import.

---

### Bước 4 — Clean question default

Xóa / chuẩn hóa các câu hỏi default được import kèm (không cần dùng):

```bash
curl --location 'https://lmsnew.hocmai.net/api/lms/question-import-38/question/clean-default-from-import' \
--header 'Content-Type: application/json' \
--data '{
    "course_id": 218
}'
```

---

### Bước 5 — Test tạo data EMS với 1 question đơn lẻ

Kiểm tra luồng tạo question EMS với 1 `question_id` cụ thể trước khi chạy toàn bộ:

```bash
curl --location 'https://lmsnew.hocmai.net/api/lms/question-import-38/question/call-ems' \
--header 'Content-Type: application/json' \
--data '{
    "question_id": "317358"
}'
```

> Dùng để verify format question trước khi push hàng loạt.

---

### Bước 6 — Tạo data question EMS cho toàn bộ course

Sau khi test thành công bước 5, chạy cho toàn bộ course:

```bash
curl --location 'https://lmsnew.hocmai.net/api/lms/question-import/course/call-ems' \
--header 'Content-Type: application/json' \
--data '{
    "course_id": "218"
}'
```

---

### Bước 7 — Tạo data `exam_part` (đề thành phần)

Tạo dữ liệu exam part theo logic đề thành phần mixed (quiz mixed):

```bash
curl --location 'https://lmsnew.hocmai.net/api/lms/exam_part/import/by-quiz-mixed' \
--header 'Content-Type: application/json' \
--data '{
    "course_id": 218
}'
```

---

### Bước 8 — Test tạo đề single EMS với 1 exam_part_id

Kiểm tra tạo đề single từ 1 `exam_part_id` cụ thể:

```bash
curl --location 'https://lmsnew.hocmai.net/api/lms/exam_part/call_ems_single' \
--header 'Content-Type: application/json' \
--data '{
    "exam_part_id": 2497
}'
```

> Dùng để test trước khi chạy toàn bộ course ở bước tiếp theo.

---

### Bước 9 — Tạo đề EMS exam cho toàn bộ course

Tạo toàn bộ đề EMS exam theo `course_id`:

```bash
curl --location 'https://lmsnew.hocmai.net/api/lms/exam_part/call_ems' \
--header 'Content-Type: application/json' \
--data '{
    "course_id": "218"
}'
```

---

## Tóm Tắt Luồng

```
[B1] Download file media về staging
        ↓
[B2] Anh Linh sync file lên AWS S3 (classroom/{courseId}/...)
        ↓
[B3] Import question → staging DB (format-mysql)
        ↓
[B4] Clean question default
        ↓
[B5] Test push 1 question → EMS  ✅ verify
        ↓
[B6] Push toàn bộ question của course → EMS
        ↓
[B7] Tạo exam_part (đề thành phần)
        ↓
[B8] Test tạo đề single với 1 exam_part_id  ✅ verify
        ↓
[B9] Tạo đề EMS exam toàn bộ course
```

---

## Lưu Ý Chung

- Luôn chạy **test đơn lẻ (B5, B8)** trước khi chạy hàng loạt để tránh data lỗi lan rộng.
- `course_id` trong các API trên là ID của **Moodle course** tương ứng (ví dụ: `218`).
- Đường dẫn AWS S3 cần đúng prefix `classroom/` để các API EMS resolve đúng URL file media.
- Nếu bước 3 bị lỗi, kiểm tra xem table `question_import_38` đã tồn tại và có đủ quyền write chưa.
