149 lines
4.4 KiB
Markdown
149 lines
4.4 KiB
Markdown
# Ringkasan Implementasi Quiz Auto-Stop
|
|
|
|
## ✅ Implementasi Selesai
|
|
|
|
Implementasi fitur quiz auto-stop ketika soal habis di level tertentu telah berhasil diselesaikan. Berikut adalah ringkasan lengkap:
|
|
|
|
## 📁 File yang Dimodifikasi
|
|
|
|
### 1. `lib/views/siswa/quiz/controllers/quiz_question_controller.dart`
|
|
|
|
**Perubahan:**
|
|
|
|
- ✅ Menambahkan penanganan khusus untuk response 404 dengan pesan soal habis
|
|
- ✅ Menambahkan penanganan untuk response 204 No Content
|
|
- ✅ Menambahkan pengecekan pesan dalam response 200
|
|
- ✅ Menambahkan method `handleQuestionsExhausted()`
|
|
- ✅ Menambahkan method `autoFinishQuiz()`
|
|
|
|
### 2. `lib/views/siswa/quiz/controllers/quiz_attempt_controller.dart`
|
|
|
|
**Perubahan:**
|
|
|
|
- ✅ Menambahkan method `stopQuizTimer()` untuk menghentikan timer quiz
|
|
|
|
## 🔧 Fitur yang Diimplementasikan
|
|
|
|
### 1. Deteksi Soal Habis
|
|
|
|
Sistem dapat mendeteksi soal habis melalui:
|
|
|
|
- **Status Code 404** dengan pesan "Tidak ada soal lagi di level ini"
|
|
- **Status Code 204** (No Content)
|
|
- **Status Code 200** dengan pesan soal habis dalam response body
|
|
|
|
### 2. Penanganan Otomatis
|
|
|
|
Ketika soal habis terdeteksi:
|
|
|
|
1. **Timer Berhenti**: Timer quiz dihentikan secara otomatis
|
|
2. **Pesan User**: Dialog "Soal sudah habis di level ini, quiz selesai" ditampilkan
|
|
3. **Auto Finish**: Quiz diselesaikan otomatis dengan mengirim jawaban kosong untuk soal yang belum dijawab
|
|
4. **Redirect**: User diarahkan ke halaman hasil quiz
|
|
|
|
### 3. Error Handling
|
|
|
|
- **Network Error**: Menampilkan dialog error koneksi dengan opsi kembali ke dashboard
|
|
- **Auto-Finish Failure**: Menampilkan dialog error dengan opsi kembali ke dashboard
|
|
- **Fallback**: Langsung redirect ke halaman quiz selesai jika terjadi error
|
|
|
|
## 🎯 Alur Kerja Lengkap
|
|
|
|
```
|
|
1. User mengerjakan quiz
|
|
↓
|
|
2. Sistem memanggil API next-question
|
|
↓
|
|
3. Backend mengembalikan 404/204/200 dengan pesan soal habis
|
|
↓
|
|
4. Frontend mendeteksi soal habis
|
|
↓
|
|
5. Timer quiz dihentikan
|
|
↓
|
|
6. Dialog pesan ditampilkan ke user
|
|
↓
|
|
7. Auto-finish quiz dipanggil
|
|
↓
|
|
8. Jawaban kosong dikirim untuk soal yang belum dijawab
|
|
↓
|
|
9. Endpoint auto-finish dipanggil
|
|
↓
|
|
10. User diarahkan ke halaman hasil quiz
|
|
```
|
|
|
|
## 📝 Pesan yang Didukung
|
|
|
|
Sistem mendeteksi soal habis berdasarkan pesan berikut:
|
|
|
|
- "Tidak ada soal lagi di level ini"
|
|
- "Soal habis"
|
|
- "Questions exhausted"
|
|
- "No more questions"
|
|
|
|
## 🔍 Logging
|
|
|
|
Sistem menambahkan logging detail untuk debugging:
|
|
|
|
```dart
|
|
log("404 - Soal habis di level ini detected");
|
|
log("Confirmed: Questions exhausted at this level");
|
|
log("Quiz timer stopped");
|
|
log("Auto finishing quiz for attempt ID: $attemptId");
|
|
log("Auto finish success: $json");
|
|
```
|
|
|
|
## ✅ Test Cases yang Harus Diuji
|
|
|
|
1. **Response 404 dengan pesan soal habis**
|
|
|
|
- Backend: 404 + "Tidak ada soal lagi di level ini"
|
|
- Expected: Timer berhenti, dialog muncul, auto-finish
|
|
|
|
2. **Response 204 No Content**
|
|
|
|
- Backend: 204
|
|
- Expected: Timer berhenti, auto-finish
|
|
|
|
3. **Response 200 dengan pesan soal habis**
|
|
|
|
- Backend: 200 + message soal habis
|
|
- Expected: Timer berhenti, auto-finish
|
|
|
|
4. **Response 404 tanpa pesan soal habis**
|
|
|
|
- Backend: 404 tanpa pesan khusus
|
|
- Expected: Error dialog umum, tidak auto-finish
|
|
|
|
5. **Network error saat auto-finish**
|
|
- Simulasi: Network error
|
|
- Expected: Error dialog koneksi, opsi kembali ke dashboard
|
|
|
|
## 🚀 Cara Penggunaan
|
|
|
|
Implementasi ini sudah terintegrasi otomatis dalam sistem quiz. Tidak ada konfigurasi tambahan yang diperlukan. Sistem akan:
|
|
|
|
1. **Otomatis mendeteksi** ketika backend mengembalikan response yang mengindikasikan soal habis
|
|
2. **Otomatis menghentikan** timer quiz
|
|
3. **Otomatis menampilkan** pesan ke user
|
|
4. **Otomatis menyelesaikan** quiz dan mengarahkan ke halaman hasil
|
|
|
|
## 📋 Checklist Implementasi
|
|
|
|
- ✅ Penanganan response 404 dengan pesan soal habis
|
|
- ✅ Penanganan response 204 No Content
|
|
- ✅ Penanganan response 200 dengan pesan soal habis
|
|
- ✅ Method untuk menghentikan timer quiz
|
|
- ✅ Method untuk auto-finish quiz
|
|
- ✅ Dialog pesan untuk user
|
|
- ✅ Error handling untuk network error
|
|
- ✅ Error handling untuk auto-finish failure
|
|
- ✅ Fallback mechanism
|
|
- ✅ Logging untuk debugging
|
|
- ✅ Dokumentasi lengkap
|
|
|
|
## 🎉 Hasil Akhir
|
|
|
|
Dengan implementasi ini, quiz akan **otomatis berhenti** dan **tidak akan stuck** ketika soal habis di level manapun. User akan mendapat pengalaman yang smooth dengan notifikasi yang jelas dan sistem yang robust dalam menangani berbagai skenario error.
|
|
|
|
**Implementasi selesai dan siap untuk digunakan!** 🚀
|