Commit Graph
16 Commits
Author SHA1 Message Date
JianMiauandClaude Fable 5 ae8dba99b7 V2 推送 LINE 改依環境決定目標,移除卡片底部說明文字
根本原因:
V2 原本把推送目標寫死在測試對話(target: local),部署到 NAS 後也只會
私訊測試對象,無法推到正式羽球群;另外卡片底部的「搭檔不重複・實力平衡
排點」說明文字對群組成員沒有意義。

影響:
- NAS 正式環境(LINE_TARGET_MODE=prod)推送到勝皇羽球團群組
- 本機開發(local)維持推到測試對話,按鈕會標示「推送到 LINE(測試)」
- LINE 卡片不再顯示底部說明文字

修法:
前端移除寫死的 target 參數,交由 server 依 LINE_TARGET_MODE 解析目標;
按鈕文字與推送成功訊息改為依環境顯示;buildLineFlexMessageV2 移除 footer。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-20 11:32:41 +08:00
JianMiauandClaude Fable 5 1ff149621f 新增 V2 場地排程頁面與實力權重系統
根本原因:
V1 三輪配對制不符合實際打球流程:實際是 2、3 號場地各打 8 局雙打、
每局換搭檔輪休;且配對完全沒考慮成員實力,會出現強強同隊的失衡對戰。

影響:
- 首頁改為 V2 場地排程:每局從全員挑 8 人分兩場地打雙打,其餘自動輪休,
  搭檔組合在全部輪過一遍之前不重複,每人上場局數落差最多 1 局
- tg_members 新增 skill 欄位(1~10,預設 1),attendance API 一併帶出實力,
  新增 GET /api/skills 供頁面開啟時載入全體實力表(載完才能產生賽程)
- V2 依實力排點:搭檔強弱互補、每局兩隊實力總和盡量接近,
  滑鼠停在隊伍上會浮出實力泡泡;讀取指定日期可回填已上傳的 V2 賽程
- V1 完整保留於 /v1,讀取出席名單改為依實力自動分 A / B 區
- V2 推送 LINE 固定走測試目標(LINE_TARGET_ID_LOCAL),不碰正式群組,
  訊息改用綠底標題+斑馬紋對戰列的新版 Flex 卡片
- 上傳沿用 badminton 表,battlecombination 改以場地為 key 存 16 組搭檔

修法:
App.tsx 拆為路由(/ 進 AppV2、/v1 進 AppV1);AppV2 排程演算法以 105 種
完美配對窮舉搭配重試 40 次,取「重複最少、總實力差最小」的一份賽程;
server 新增 /api/skills、LINE V2 Flex 訊息與 target 覆寫,attendance 查詢
LEFT JOIN tg_members 取得 skill(user_id 優先、nickname 備援、預設 1)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-20 11:28:21 +08:00
JianMiauandClaude Fable 5 121a5fee4c 新增讀取 Telegram 出席名單功能,讀取指定日期改為自動 fallback
根本原因:
Node-RED 的 Telegram bot「建喵打羽球」已把報名名單寫進同庫的 attendance 表,但配對器沒有任何入口讀取,每次仍需手動把出席者一個個打進名單。

影響:
- 新增 GET /api/attendance/:time,用既有 pool 讀 attendance 表,沒資料回 404
- 「讀取指定日期」改為兩段:先讀 badminton 配對資料,該日還沒配對時自動改載入出席名單
- 新增「讀取今日出席」按鈕可直接載入出席名單
- attendance 表沒有分區資訊,出席者一律先放 A 區、清空 B 區與既有配對,由使用者自行分配
- badminton 表結構與上傳流程不變

修法:
server.mjs 新增 attendance 端點;App.tsx 新增 findAttendance / loadAttendance / applyAttendance,loadResults 改用 findMatchResults 判斷後 fallback,移除不再使用的 loadMatchResults;README 補上讀取今日出席章節與 attendance 表結構。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 11:46:13 +08:00
JianMiauandClaude Fable 5 4633412407 推送到 LINE 改為兩段式確認,避免誤觸
根本原因:
「推送到 LINE」按鈕與「上傳資料」「讀取指定日期」並排,單擊即送出,容易手滑把配對結果直接推進 LINE 群組,且推出去無法收回。

影響:
- 第一次按只會把按鈕切換成橘色「確認推送到 LINE」並提示,第二次按才真的送出
- 6 秒內沒按第二次會自動取消並提示
- 重新產生配對、讀取指定日期、載入範例名單、更改目標日期時一律解除確認狀態,避免殘留後誤觸

修法:
新增 linePushArmed 狀態與逾時 effect,pushToLine 未確認時先進入確認狀態;各動作函式與日期輸入同步重設;App.css 新增 .is-armed 橘色脈動樣式。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 11:33:16 +08:00
JianMiauandClaude Fable 5 db67c19e85 自動放寬舊資料表過小的欄位,修正上傳失敗
根本原因:
badminton 資料表是舊系統先建立的,battlecombination 欄位型別比 TEXT 小;ensureTable 的 CREATE TABLE IF NOT EXISTS 對已存在的資料表不會生效,跨區平衡後 6 隊 × 3 輪的 JSON 超過欄位長度,寫入時噴出「Data too long for column 'battlecombination'」。

影響:
- server 啟動後第一次資料庫操作會自動把 personnel 與 battlecombination 放寬成 TEXT,不需手動下 SQL
- ensureTable 加上 tableReady 旗標,每個 process 只檢查一次,不再每個 request 都跑 CREATE TABLE

修法:
新增 widenLegacyColumns 查詢 information_schema,欄位型別不是 TEXT 系列時執行 ALTER TABLE MODIFY 放寬,並以模組層旗標記憶檢查結果。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-10 15:22:35 +08:00
JianMiauandClaude Fable 5 8cc05183f7 兩區人數落差時改為跨區平衡,並調整結果版面
根本原因:
原本配對邏輯只以人數多的一區為基準,缺額全部補「那個」。例如 A 區 7 人、B 區 5 人時會補 2 個「那個」,但總人數 12 是偶數,其實可以讓 A 區 1 人跨區支援就湊滿 6 隊真人對打。

影響:
- 兩區差距 2 以上時,每輪自動抽「差距÷2」人跨區支援,且每輪輪替不同人,跨區的人平均分攤
- 只有總人數為奇數時才會補 1 個「那個」
- 三輪之間維持無重複搭檔、同輪無人重複上場
- 「推送到 LINE」按鈕移到上方操作列,三組結果改為三欄並排顯示
- 摘要卡改顯示跨區支援與補位人數

修法:
新增 balanceZones / pickCrossMembers 依輪次輪替抽出跨區成員,createRoundTeams 改在每輪平衡後再建立隊伍;移除不再使用的 prepareParticipants 與 .share-row/.share-button 樣式,並同步更新 README 規則說明。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-10 15:22:04 +08:00
JianMiauandClaude Fable 5 4cb150c7fb 統一換行符為 LF
根本原因:
Windows 編輯器存檔時把 src/App.tsx 混入 CRLF,造成 git diff 出現整檔 572/565 行的假差異,難以審閱。

影響:
之後任何人在任何編輯器存檔,都不會再混入 CRLF 汙染 diff。

修法:
新增 .gitattributes 設定 `* text=auto eol=lf`,checkout 與 commit 一律正規化為 LF。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-10 15:20:47 +08:00
JianMiau 78142488f3 Show badge only in local test environment 2026-04-15 16:32:53 +08:00
JianMiau c343dc6f11 Set docker compose default to production mode 2026-04-15 16:28:12 +08:00
JianMiau 39b9ed8c08 Update README for current app workflow 2026-04-15 16:24:19 +08:00
JianMiau 2bed4f6df0 Add LINE push integration and target mode config 2026-04-15 16:22:19 +08:00
JianMiau 1687223631 Fix README path after moving project directory 2026-04-15 16:09:16 +08:00
JianMiau 27196dc2bf Add overwrite confirmation and update README 2026-04-15 10:35:17 +08:00
JianMiau 35eab44a7a Add loading match results by date 2026-04-15 10:11:53 +08:00
JianMiau 6c3ff0e3d1 Add DB upload flow and Docker deployment setup 2026-04-14 23:17:45 +08:00
JianMiau 268e76bf0d Initial React badminton team matching app 2026-04-14 22:35:03 +08:00