-
Notifications
You must be signed in to change notification settings - Fork 0
Introduction
keanu77 edited this page Jul 3, 2026
·
1 revision
運動禁藥案例平台(antidopingplatform,package 名 sports-doping-platform)是一個整合國際運動禁藥案例的互動式知識平台。使用者可搜尋案例、看數據視覺化、做教育測驗、查 TUE(治療用途豁免)與禁用清單。全 UI 繁體中文,定位為反禁藥教育與科普。
- 案例資料庫:運動員資訊、禁用物質、處罰結果(禁賽期、成績取消、獎牌褫奪)、來源連結
- 智慧搜尋:多條件篩選(運動/國籍/年份/物質/處罰)+ 全文搜尋 + 分頁
- 數據視覺化:年度趨勢、運動項目分布、禁藥類型分布、處罰統計(Chart.js)
- 教育專區:WADA 物質分類指南、互動測驗
- TUE 專區:疾病用藥指南 + 藥物檢查器(30+ 藥物)+ 申請檢核清單
- 禁用清單 / 案例比較
根 server.js 同時服務 Express API(/api/*)與 Vite 建置的 React SPA(frontend/dist/)靜態檔——單一 process、單一 port。
sports-doping-platform/
├── server.js ← unified server(真正入口):中介層 → API routes → 靜態檔 → SPA catch-all
├── backend/
│ ├── models/Case.js ← WADA 物質分類(S0–S9 / M1–M3 / P1)、處罰欄位、來源連結;
│ │ text index(運動員/物質/運動/摘要/國籍)+ compound index
│ ├── routes/ ← casesFixed.js / statsFixed.js / education.js / tue.js(實際掛載的)
│ └── data/ ← wada-categories.json / quizzes.json / medical-specialties.json
├── frontend/ ← React 19 + Vite + Router v6 + Tailwind v3 + Chart.js
│ └── src/{pages, components, services/api.js, data/, utils/}
└── 運動禁藥案例資料庫_完整清單.md / 案例真實性確認清單.md ← 案例內容與真實性來源
-
Backend:Express + MongoDB。資料 route 各自於 module load 開自己的
MongoClient.connect()(db 名sports-doping-db),不重用server.js的 Mongoose 連線(Mongoose 連線用於生命週期/重連與建立Caseindex)。 -
Frontend:
Home/CaseList/CaseDetail立即載入,其餘頁面(Statistics/Education/TUE/ProhibitedList/Quiz/…)皆React.lazy懶載。services/api.js在 dev 打localhost:8080/api、prod 打/api(相對)。 -
內容來源:
education.js讀backend/data/*.json;tue.js內容為 route 檔內 inline 物件;ProhibitedList/Quiz讀frontend/src/data本地檔(非 API)。
models/Case.js 以 WADA 分類為核心(S0–S9 物質類、M1–M3 方法類、P1)。主要 API:
| 端點 | 來源 | 說明 |
|---|---|---|
/api/cases、/api/cases/filters
|
casesFixed.js |
篩選/分頁/全文搜尋 |
/api/stats/* |
statsFixed.js |
MongoDB aggregation(年度趨勢、各種分布) |
/api/education/* |
education.js |
讀 JSON、測驗作答 |
/api/tue/* |
tue.js |
inline TUE 內容 + 藥物適用性檢查 |
/api/health |
server.js |
健康檢查(Zeabur 用) |
- 前端:React 19 + Vite + React Router v6 + Tailwind CSS v3 + Chart.js + axios + lucide-react。
- 後端:Node.js + Express + MongoDB(原生 driver + Mongoose);helmet / compression / cors / express-rate-limit。
-
部署:Zeabur — multi-stage Dockerfile(frontend-build → backend-deps → production)、
zeabur.json設 build/start 與/api/health健康檢查、非 root(uid 1001)執行。
- helmet CSP 刻意允許
*.blogspot.com/*.blogger.comiframe 且frameguard:false(讓站可嵌入 Blogger,非缺陷)。 - 生產 CORS 預設
false(擋所有跨源)除非設CORS_ORIGIN;/api/*限流 200 req/15min。 - 案例資料須經
案例真實性確認清單.md流程查核,確保引用可追溯。
⚠️ 教育用途;不構成醫療或法律建議。
乾淨運動從你我開始 · 教育用途,案例資料經真實性查核 · 回首頁