Skip to content

feat(overdue): 催繳改為每日提醒,直到全部繳完 (#48) - #49

Merged
poterpan merged 2 commits into
mainfrom
feat/48-daily-overdue-reminders
Aug 29, 2026
Merged

poterpan merged 2 commits into
mainfrom
feat/48-daily-overdue-reminders

Conversation

@poterpan

Copy link
Copy Markdown
Owner

需求(#48)

進入催繳時間後,原本「每期只提醒一次」改為每日提醒,直到該期所有人都繳費完成自動停止。

變更

  • notification_logs 新增 event 欄('' = 整期 slot;逾期列帶台北營業日),UNIQUE 含 event(遷移 0006_overdue_daily.sql,重建表)
  • sendOverdueForPeriod cron 路徑以當日日期為去重鍵:隔天再催、同日去重、全部繳完回 none_due 自動停
  • 送失敗仍釋放當日 slot、誠實回報;admin 手動「催繳未繳成員」維持整期 slot 且不誤刪 cron 的每日 slot(Codex 審查修正)
  • 送失敗釋放改用「claim 回傳的 row id」,避免併發 force 互相刪到 slot(Codex 審查修正)
  • 收回本期開繳仍清空該期所有日期的逾期列
  • README 更新:催繳每日化、測試數 349→355、migrations 0005→0006

測試

349 → 355 全綠,tsc --noEmit 乾淨。新增 overdue-daily.test.ts 6 案例(隔天再催/同日去重/繳完停止/cron 連續兩天/force 不誤刪 cron slot/失敗釋放),並擴充 retract 測試覆蓋多日期 slot 清空。

審查

Codex 跨引擎審查一次(DO-NOT-MERGE → 三項發現全修,第二次驗證通過)。

把逾期催繳的去重鍵從「每期一次」改為「每期每日一次」:
- notification_logs 新增 event 欄('' = 整期 slot;逾期列帶台北營業日)
- sendOverdueForPeriod 的 cron 路徑以當日日期為 slot,隔天會再催
- 送失敗仍釋放當日 slot、誠實回報,admin 手動催繳維持整期 slot 不變
- 收回本期開繳仍清空該期所有逾期列

測試 349 → 353,新增 overdue-daily.test.ts
- force 催繳只清 '' 整期 slot,不再誤刪 cron 的每日 slot(同日重試仍去重)
- 送失敗改用「以 claim 回傳的 row id 釋放」,避免併發 force 互相刪到 slot
- 補測試:cron→force→同日 cron 不重送、失敗釋放、retract 清空多日 slot
- README 測試數 353→355、migrations 範圍 0005→0006
@poterpan
poterpan merged commit f246c71 into main Aug 29, 2026
2 checks passed
This was referenced Aug 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant