Bug #1327
是由 陳國瑋 於 約 2 個月 前更新
## 客戶回報
2026-06-09 客戶回報 MIA 營養師 CASE 在 2026-06-08 有一週紀錄顯示營養師沒有回覆,但營養師確認當天都有回覆,且 6/8 早上有查看一次。
涉及個案:
- A2604025 呂貞儀(代號記錄於 ss3a_member.line_name)
- A2605041 謝志強(代號記錄於 ss3a_member.line_name)
使用者描述:莊美玲營養師表示 A2605041 這位在 6/8 白天也確定有留言回覆,但晚上查看時訊息不見。客戶問題是:能否判斷是不是沒有儲存到,或只有這一天異常。
## 初步調查結論(尚未修復)
目前從程式碼與 6/8 request log 初判,後台 \/api\/admin\/course\/diary\/update 有兩個高風險 bug,可能造成「營養師留言不見 / 看起來沒回覆」:
1. **Partial update payload 可能把既有留言覆蓋成 null**
- CourseAdminServiceImpl.updateCourseDiary() 會一次比對 diet/water/exercise/weight/sleep/defecate 六類 comment。
- 若前端只送某一類留言,其他欄位為 null,而 ,而 DB 原本其他類別已有 comment,StringUtils.equals(existing, null) comment, 會判定不同,接著呼叫對應 updateComment(..., null, ...)。 。
- 結果:未出現在 payload 的舊留言可能被清空。
2. **當日該類 record 不存在時,native update 會 0 rows,但 service 仍當成功**
- 各 repository 的 updateComment 都是 UPDATE hm_course_* SET comment = ? WHERE course_id = ? AND record_date = ?。 。
- 若當天該類 record 尚未建立,update 不會 insert,也沒有檢查 affected rows。
- 結果:後台顯示「成功更新 CourseDiary」,但實際 DB 可能沒有任何留言被存入。
3. **comment hint 可能被設為 true,即使 comment 未真正寫入**
- service 在呼叫 repository update 後立即 hint.setXxx(true),沒有確認 ,沒有確認 update row count。
- 結果:前/後台可能呈現有新留言提示,但查該日 record comment 時為空。
## 已看到的 log 線索
- 2026-06-08 07:29:55 有 POST \/api\/admin\/course\/diary\/update,course C0002832、date 2026-06-06、dietComment ,course 、date 、 有內容,但 waterComment/exerciseComment/weightComment/sleepComment/defecateComment 都是 null。
- 這類 payload 形態正好符合「更新單一類別留言時,其他類別 null 可能清掉既有值」的風險。
- A2604025 在 log 中可推到 course C0002730;A2605041 ;A2605041 在 log 中可推到 course C0002892,但此對應需用 ,但此對應需用 production DB 依 ss3a_member.line_name 再正式確認。
## 相關程式位置
- java/src/main/java/com/crazysundiet/hm/admin/course/service/CourseAdminServiceImpl.java
- updateCourseDiary() line around 357-422
- java/src/main/java/com/crazysundiet/hm/repository/CourseRepository.java
- getDiaryComment() native query line around 78-94
- java/src/main/java/com/crazysundiet/hm/repository/CourseDietRecordRepository.java
- java/src/main/java/com/crazysundiet/hm/repository/CourseWaterRecordRepository.java
- java/src/main/java/com/crazysundiet/hm/repository/CourseExerciseRecordRepository.java
- java/src/main/java/com/crazysundiet/hm/repository/CourseWeightRecordRepository.java
- java/src/main/java/com/crazysundiet/hm/repository/CourseSleepRecordRepository.java
- java/src/main/java/com/crazysundiet/hm/repository/CourseDefecateRecordRepository.java
## 建議修復方向
1. ReqUpdateCourseDiary 區分「欄位未送」與「使用者刻意清空」,避免 partial update 把未送欄位寫成 null。
2. Repository updateComment 改回傳 affected row count,若 0 rows 則應建立該類 record 或回報明確錯誤。
3. CourseCommentHint 只在 DB 寫入成功後設定。
4. 補整合測試:
- DB 原本 waterComment 有值,只更新 dietComment,waterComment 不應被清空。
- 當日 diet record 不存在時,留言更新不得假成功。
- 清空留言需有明確 payload 語意。
## 待確認
- 請用正式 production DB host 52.196.20.250 依 ss3a_member.line_name 查 A2604025 / A2605041 對應 course 與 2026-06-08 各 hm_course_* comment 實際狀態。
- 本 issue 目前先開單追蹤,尚未進行修復。
返回