Skip to content

Introduction

keanu77 edited this page Jul 3, 2026 · 1 revision

專案簡介(Introduction)

這是什麼

運動禁藥案例平台(antidopingplatform,package 名 sports-doping-platform)是一個整合國際運動禁藥案例的互動式知識平台。使用者可搜尋案例、看數據視覺化、做教育測驗、查 TUE(治療用途豁免)與禁用清單。全 UI 繁體中文,定位為反禁藥教育與科普

功能特色

  • 案例資料庫:運動員資訊、禁用物質、處罰結果(禁賽期、成績取消、獎牌褫奪)、來源連結
  • 智慧搜尋:多條件篩選(運動/國籍/年份/物質/處罰)+ 全文搜尋 + 分頁
  • 數據視覺化:年度趨勢、運動項目分布、禁藥類型分布、處罰統計(Chart.js)
  • 教育專區:WADA 物質分類指南、互動測驗
  • TUE 專區:疾病用藥指南 + 藥物檢查器(30+ 藥物)+ 申請檢核清單
  • 禁用清單 / 案例比較

架構:Unified Server(單 process 單 port)

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 連線用於生命週期/重連與建立 Case index)。
  • FrontendHome/CaseList/CaseDetail 立即載入,其餘頁面(Statistics/Education/TUE/ProhibitedList/Quiz/…)皆 React.lazy 懶載。services/api.js 在 dev 打 localhost:8080/api、prod 打 /api(相對)。
  • 內容來源education.jsbackend/data/*.jsontue.js 內容為 route 檔內 inline 物件;ProhibitedList/Quizfrontend/src/data 本地檔(非 API)。

資料模型與 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.com iframe 且 frameguard:false(讓站可嵌入 Blogger,非缺陷)。
  • 生產 CORS 預設 false(擋所有跨源)除非設 CORS_ORIGIN/api/* 限流 200 req/15min。
  • 案例資料須經 案例真實性確認清單.md 流程查核,確保引用可追溯。

⚠️ 教育用途;不構成醫療或法律建議。