Files
badminton-scoreboard/README.md

202 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# badminton-scoreboard
羽毛球記分板系統,使用 `Vite + React + TypeScript` 建立前端,搭配 `Express + MySQL` 提供資料讀寫 API。
目前專案包含三個主要頁面:
- `選隊伍`:可依指定日期從 DB 載入隊伍資料,若沒有資料可改用手動配對
- `記分板`:支援先攻設定、直接點分數記分、上一步回退、上下換隊、左右換位
- `歷史戰績`:直接從 DB 的 `history` 表讀取戰績列表,點開可看得分紀錄
## 目前記分板流程
- 進入記分板前,先從選隊伍頁面選定「第幾組」
-`設定隊伍` 後會打開雙欄彈窗
- 左邊可一個一個選球員,依照順序自動成隊:
- 第 1、2 位成上方隊伍
- 第 3、4 位成下方隊伍
- 右邊可直接快速選預設好的隊伍
- 可設定 `幾分獲勝`,預設是 `21`
- 確認配隊後會直接帶入記分板並重設本場狀態
- 開始記分後,`設定隊伍` 會改成 `上一步`
## 手機版設計方向
- 以手機完整顯示為優先
- 記分板主畫面盡量避免整頁上下滑動
- 設定隊伍彈窗會優先壓縮內容高度
- 若名單較多,改為彈窗內局部捲動,不影響整頁閱讀
## Port 設定
### 本機開發
- Client`3501`
- Server API`8788`
啟動後:
- 前端:`http://localhost:3501`
- API`http://localhost:8788`
### Docker / NAS 部署
- 對外入口:`3501`
- Node app 內部 port`8788`
正式部署時,外部會走 Nginx SSL 入口,使用 `3501``8788` 只提供容器內部反向代理使用。
## 本機開發
安裝套件:
```bash
npm install
```
啟動開發環境:
```bash
npm run dev
```
會同時啟動:
- Vite client on `3501`
- Node server on `8788`
## 建置與檢查
```bash
npm run build
```
```bash
npm run lint
```
## `.env` 範例
請參考 [.env.example](./.env.example)
```env
DB_HOST=192.168.0.15
DB_PORT=3307
DB_USER=jianmiau
DB_PASSWORD=your-password
DB_DATABASE=badminton
DB_TABLE=badminton
DB_HISTORY_TABLE=history
SERVER_PORT=8788
NGINX_SERVER_NAME=_
SSL_CERT_FILE_NAME=RSA-cert.pem
SSL_CHAIN_FILE_NAME=RSA-chain.pem
SSL_KEY_FILE_NAME=RSA-privkey.pem
```
## 資料表格式
### `badminton`
- `time`:日期鍵值,格式 `YYYYMMDD`
- `personnel`:球員名單 JSON
- `battlecombination`:各組配對 JSON
### `history`
- `id`
- `time`
- `dayOfWeek`
- `score`
- `winScore`
- `type`
- `players`
- `team`
- `scoreList`
`scoreList` 格式:
```text
[round, starter, winCount, winner]
```
說明:
- `round`:第幾球
- `starter`:發球者編號
- `winCount`:連勝次數
- `winner``0` 代表上方隊伍得分,`1` 代表下方隊伍得分
## Docker 建置
單獨建置 Node app
```bash
docker build -t badminton-scoreboard .
```
## NAS 部署
專案已提供 [docker-compose.yml](./docker-compose.yml)。
服務包含:
1. `badminton-scoreboard`
Node app內部使用 `8788`
2. `badminton-scoreboard-web`
Nginx SSL 入口,對外使用 `3501`
在 NAS 專案目錄執行:
```bash
sudo docker compose up -d --build
```
## SSL 憑證掛載
SSL 憑證目錄固定使用:
```text
/volume1/homes/JianMiau/www/certificate/
```
預設檔名:
- `RSA-cert.pem`
- `RSA-chain.pem`
- `RSA-privkey.pem`
Nginx 會自動組合:
- `RSA-cert.pem` + `RSA-chain.pem` => fullchain
- `RSA-privkey.pem` => private key
之後只要更新:
```text
/volume1/homes/JianMiau/www/certificate/
```
容器內的 Nginx 就會重新載入,不需要重建 image。
## NAS 對外入口
部署完成後可由:
```text
https://你的網域或IP:3501
```
進入系統。
## Git 中文設定
目前 repo 已設定:
- `i18n.commitEncoding=utf-8`
- `i18n.logOutputEncoding=utf-8`
- `core.quotepath=false`
之後使用中文 commit 訊息與 `git log` 會比較正常。