# 🔍 DEBUG: Tại sao `student_daily_study_time` không có dữ liệu sau khi Submit?

## 📋 CHECKLIST DEBUG

### **1. Kiểm tra API có được gọi không?**

```bash
# Xem log khi gọi API submit
tail -f storage/logs/laravel.log | grep -E "submitSession|Study session submitted"
```

**Log mong đợi:**
```
[INFO] Study session submitted: {
    "session_id": 123,
    "student_id": 456,
    "duration_minutes": 5.0
}
```

---

### **2. Kiểm tra `endSessionWithTime()` có được gọi không?**

```bash
# Xem log khi end session
tail -f storage/logs/laravel.log | grep -E "endSessionWithTime|distributeDailyTime START"
```

**Log mong đợi:**
```
[INFO] distributeDailyTime START: {
    "session_id": 123,
    "student_id": 456,
    "startTime": "2025-12-05 10:00:00",
    "endTime": "2025-12-05 10:15:00"
}
```

---

### **3. Kiểm tra `updateDailyStudyTime()` có được gọi không?**

```bash
# Xem log khi update daily time
tail -f storage/logs/laravel.log | grep -E "updateDailyStudyTime|Updated daily study time|Create new daily study time"
```

**Log mong đợi:**
```
[INFO] distributeDailyTime CALLING updateDailyStudyTime: {
    "student_id": 456,
    "date": "2025-12-05",
    "adjustedMinutesInDay": 5.0
}

[INFO] Updated daily study time: {
    "student_id": 456,
    "date": "2025-12-05",
    "minutes": 5.0
}
```

---

### **4. Kiểm tra `$tenantConnection` có null không?**

```bash
# Xem log warning về tenantConnection
tail -f storage/logs/laravel.log | grep -E "tenantConnection is null|updateDailyStudyTime.*tenantConnection"
```

**Nếu có warning:**
```
[WARNING] updateDailyStudyTime: tenantConnection is null
```
→ **Vấn đề:** Controller không truyền `$tenantConnection` đúng!

---

### **5. Kiểm tra Exception có xảy ra không?**

```bash
# Xem log error
tail -f storage/logs/laravel.log | grep -E "Failed to update daily study time|Exception|Error"
```

**Nếu có error:**
```
[ERROR] Failed to update daily study time: {
    "error": "...",
    "student_id": 456
}
```

---

## 🔧 CÁC VẤN ĐỀ THƯỜNG GẶP

### **Vấn đề 1: `$tenantConnection` là `null`**

**Nguyên nhân:**
- Controller không truyền `$tenantConnection` vào `submitSession()`
- `HelperTenant::getCurrentTenantConnection()` trả về `null`

**Cách fix:**
- Kiểm tra controller có gọi `HelperTenant::getCurrentTenantConnection()` không
- Đảm bảo tenant được set đúng trong request

---

### **Vấn đề 2: Session không tồn tại hoặc đã kết thúc**

**Nguyên nhân:**
- Session đã bị auto-end trước khi submit
- Session ID không đúng
- Session status không phải `active`

**Cách fix:**
- Kiểm tra session trong DB:
```sql
SELECT * FROM student_study_sessions 
WHERE id = SESSION_ID 
AND student_id = STUDENT_ID;
```

---

### **Vấn đề 3: Exception trong `updateDailyStudyTime()`**

**Nguyên nhân:**
- Database connection lỗi
- Table không tồn tại
- Constraint violation

**Cách fix:**
- Kiểm tra table có tồn tại không:
```sql
SHOW TABLES LIKE 'student_daily_study_time';
```

- Kiểm tra connection có đúng không:
```php
// Trong tinker
DB::connection('tenant_connection_name')->table('student_daily_study_time')->count();
```

---

### **Vấn đề 4: `$secondsInDay <= 0` → Bị skip**

**Nguyên nhân:**
- `$startTime` và `$endTime` quá gần nhau
- Logic tính toán sai

**Cách fix:**
- Xem log `distributeDailyTime LOOP`:
```bash
tail -f storage/logs/laravel.log | grep "distributeDailyTime LOOP"
```

- Nếu `will_skip: true` → Kiểm tra `secondsInDay`

---

## ✅ CÁCH TEST THỦ CÔNG

### **1. Test trong Tinker:**

```php
// Mở tinker
php artisan tinker

// Test submit session
$service = app(\App\Services\HeatUser\StudySessionService::class);
$session = \App\Models\HeatUser\StudentStudySession::where('status', 'active')->first();
$tenantConnection = 'tenant_connection_name'; // Thay bằng connection thực tế

// Submit
$result = $service->submitSession($session->id, $session->student_id, $tenantConnection);

// Kiểm tra kết quả
\App\Models\HeatUser\StudentDailyStudyTime::on($tenantConnection)
    ->where('student_id', $session->student_id)
    ->get();
```

---

### **2. Test API trực tiếp:**

```bash
# Gọi API submit
curl -X POST http://your-domain/api/heat-user/study-session/submit \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "session_id": 123
  }'

# Kiểm tra log
tail -f storage/logs/laravel.log
```

---

## 📊 SQL QUERIES ĐỂ KIỂM TRA

### **1. Kiểm tra sessions:**

```sql
-- Xem sessions của student
SELECT id, student_id, status, session_start_at, session_end_at, 
       duration_seconds, adjusted_duration_seconds, created_at
FROM student_study_sessions 
WHERE student_id = YOUR_STUDENT_ID 
ORDER BY session_start_at DESC 
LIMIT 10;
```

### **2. Kiểm tra daily study time:**

```sql
-- Xem daily study time
SELECT * FROM student_daily_study_time 
WHERE student_id = YOUR_STUDENT_ID 
ORDER BY study_date DESC;

-- Đếm số records
SELECT COUNT(*) FROM student_daily_study_time 
WHERE student_id = YOUR_STUDENT_ID;
```

### **3. Kiểm tra session mới nhất:**

```sql
-- Xem session mới nhất và status
SELECT id, student_id, status, session_start_at, session_end_at,
       TIMESTAMPDIFF(SECOND, session_start_at, session_end_at) as duration_seconds,
       adjusted_duration_seconds
FROM student_study_sessions 
WHERE student_id = YOUR_STUDENT_ID 
ORDER BY id DESC 
LIMIT 1;
```

---

## 🎯 DEBUG STEPS

1. **Kiểm tra API có được gọi không?**
   ```bash
   tail -f storage/logs/laravel.log | grep "submitSession"
   ```

2. **Kiểm tra `distributeDailyTime()` có chạy không?**
   ```bash
   tail -f storage/logs/laravel.log | grep "distributeDailyTime START"
   ```

3. **Kiểm tra `updateDailyStudyTime()` có chạy không?**
   ```bash
   tail -f storage/logs/laravel.log | grep "updateDailyStudyTime"
   ```

4. **Kiểm tra `$tenantConnection` có null không?**
   ```bash
   tail -f storage/logs/laravel.log | grep "tenantConnection is null"
   ```

5. **Kiểm tra có exception không?**
   ```bash
   tail -f storage/logs/laravel.log | grep -E "Exception|Error|Failed"
   ```

6. **Kiểm tra database:**
   ```sql
   SELECT * FROM student_daily_study_time WHERE student_id = YOUR_STUDENT_ID;
   ```

---

## 💡 GIẢI PHÁP

Nếu không thấy log nào, có thể:
1. **API không được gọi** → Kiểm tra route và controller
2. **Exception bị catch và không log** → Kiểm tra try-catch trong controller
3. **Log không được ghi** → Kiểm tra quyền ghi file log
4. **Tenant connection sai** → Kiểm tra `HelperTenant::getCurrentTenantConnection()`

