2026-09-10 學生密碼 CSV 與 Gmail 派發流程
已依最新決定完成「教師端建立帳號/產生臨時密碼 → 下載 CSV → 保存到 Google Drive → 由 Codex 透過 Gmail 逐封寄送 → 回寫寄送結果」的正式流程。明文密碼只出現在教師這次下載的 CSV;不寫入 Supabase、版本庫或公開前端。原始 CSV 按使用者決定保留在指定資料夾,不刪除、不移出;補寄時允許重新讀取同一份 CSV,不重新設定密碼,也不要求建立新批次。
已在 Google Drive 建立資料夾:YZU / Admin / Peer Evaluation and Grouping。專案資料夾。教師端現在顯示「建立帳號並下載密碼 CSV」,並明確說明這一步不寄信;CSV 含批次識別碼、派發識別碼、Email、姓名、語言、帳號狀態、臨時密碼、回條權杖與登入網址。既有帳號與失敗列不會提供臨時密碼。
目前「下載後存入 Google Drive」仍是教師/Codex 的明確作業步驟,尚未建立 Google Drive 新檔事件自動觸發器;本輪已由 Codex 讀取兩批 CSV,完成檔案驗證、Drive 保存、雙語 Gmail 寄送及回條回寫。
遠端已套用資料庫 migration:本地來源為 20260909221144_account_dispatch_csv_export.sql 與 20260909222704_account_dispatch_export_fk_indexes.sql;Supabase 記錄版本為 20260909222218_account_dispatch_csv_export 與 20260909222717_account_dispatch_export_fk_indexes。新增 account_dispatch_batches 與 account_dispatch_batch_items,批次資料與寄送結果只保存雜湊、狀態、次數、時間、message ID 及錯誤摘要;明文密碼不進資料庫。
已部署並讀回 ACTIVE 的 Edge Function:student-account-export(JWT 必須有效)與 student-account-dispatch-receipt(以批次回條權杖驗證)。前者建立或更新必要帳號並回傳 CSV,後者供 Gmail 寄送後回寫 sent/failed;舊的 Microsoft Graph student-account-dispatch 保留為未使用的相容端點,教師介面已不再呼叫它。
驗證結果:前端 npm run check 通過(3 個測試檔、8 項測試、TypeScript、Vite production build);遠端 remote_account_dispatch_export_smoke.sql 成功並 rollback,覆蓋既有帳號/新帳號/失敗列、批次登錄、權限隔離、成功寄送、同一 CSV 失敗後補寄及嘗試次數累計;Edge Function 未登入請求回傳 HTTP 401,錯誤回條權杖回傳 HTTP 403。正式 CM108G/1151/01 名冊本輪完成 62 筆新學生帳號建立、兩批 CSV、兩批 Drive 保存及 62 封中英文並列通知信寄送;1 筆原有帳號依規則略過,不寄送新密碼。兩批批次與 62 筆寄送回條均已在 Supabase 標記 completed/sent。Supabase performance advisor 不再列出本次新增的未索引外鍵;剩餘警示均為既有 course_team 空資料索引、公開看板或 Auth 設定。
正式批次檔案已保存於 Google Drive 專案資料夾:restricted-account-export.sanitized-example.csv(25 筆)與 restricted-account-export.sanitized-example.csv(37 筆)。明文密碼未寫入 Supabase、版本庫、交接文件或公開前端;本檔不記錄密碼與回條權杖。補寄時仍依使用者決定,可重新讀取同一份 CSV,不重新設定密碼,也不要求建立新批次。
更新時間:2026-09-10(Asia/Taipei)|階段:前端 commit/push/GitHub Pages 發布、正式 CSV 密碼匯出、Drive 保存及 62 封中英文並列學生通知信完成