Files
GarminHealthLab/docs/ARCHITECTURE.md
ericwyuan d73405decb Initial commit: Set up Garmin Health Lab project structure
- Initialize monorepo with root workspace configuration
- Set up Express.js backend with TypeScript
- Set up React 18 frontend with TypeScript
- Create database schema with SQLite
- Implement project architecture and documentation
- Add development and deployment guidelines

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-23 11:11:29 +08:00

6.3 KiB

项目架构说明

整体架构

┌─────────────────────────────────────────────────────┐
│                 浏览器 (React 前端)                   │
│  ┌────────────┬──────────────┬──────────┬──────────┐ │
│  │ 仪表板     │ 数据同步     │ 数据分析  │ 设置     │ │
│  └────────────┴──────────────┴──────────┴──────────┘ │
└──────────────────────────┬──────────────────────────┘
                           │ HTTP/REST
                           ▼
┌──────────────────────────────────────────────────────┐
│           Node.js/Express 后端服务器                 │
│  ┌──────────────────────────────────────────────┐   │
│  │ API 路由层                                   │   │
│  │ ├─ /auth      - 用户认证                    │   │
│  │ ├─ /garmin    - Garmin 数据同步             │   │
│  │ ├─ /health    - 健康数据查询                │   │
│  │ └─ /analysis  - 数据分析                    │   │
│  └──────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────┐   │
│  │ 服务层                                       │   │
│  │ ├─ GarminService    - Garmin API 集成      │   │
│  │ ├─ HealthService    - 健康数据业务逻辑     │   │
│  │ ├─ AuthService      - 认证授权             │   │
│  │ └─ AnalysisService  - 数据分析             │   │
│  └──────────────────────────────────────────────┘   │
└──────────────────────┬───────────────────────────────┘
                       │
                       ▼
        ┌──────────────────────────────┐
        │   SQLite 数据库              │
        │ ├─ users                    │
        │ ├─ health_data              │
        │ ├─ activities               │
        │ └─ sync_status              │
        └──────────────────────────────┘
        
        
        ┌──────────────────────────────┐
        │   Garmin Cloud API           │
        │ ├─ 用户认证                  │
        │ ├─ 数据获取                  │
        │ └─ 数据同步                  │
        └──────────────────────────────┘

核心模块

1. 前端 (Client)

  • 框架: React 18 + TypeScript
  • 路由: React Router
  • UI 组件: 自定义 + CSS
  • 数据可视化: Recharts
  • API 通信: Axios

主要页面:

  • Dashboard (仪表板)
  • DataSync (数据同步)
  • Analysis (数据分析)
  • Recommendations (健康建议)
  • Settings (设置)

2. 后端 (Server)

  • 框架: Express.js
  • 语言: TypeScript
  • 数据库: SQLite3
  • 认证: JWT

主要服务:

  • AuthService: 用户认证和授权
  • GarminService: Garmin API 集成和数据获取
  • HealthService: 健康数据管理
  • AnalysisService: 数据分析和建议生成

3. 数据库 (SQLite)

表结构:

  • users: 用户信息和 Garmin 凭证
  • health_data: 每日健康数据汇总
  • activities: 运动活动记录
  • sync_status: 数据同步状态追踪

数据流

1. Garmin 数据同步流程

用户点击"同步"
    ↓
POST /api/garmin/sync
    ↓
GarminService.syncData()
    ↓
获取 Garmin 授权 Token
    ↓
调用 Garmin API 获取数据
    ↓
转换数据格式
    ↓
存储到本地 SQLite
    ↓
更新 sync_status
    ↓
返回同步结果

2. 数据分析流程

GET /api/health/summary (日期范围)
    ↓
从数据库查询健康数据
    ↓
计算统计指标
    ↓
生成趋势分析
    ↓
返回分析结果
    ↓
前端绘制图表

3. 健康建议生成流程

GET /api/analysis/recommendations
    ↓
AnalysisService.generateRecommendations()
    ↓
分析历史数据
    ↓
识别异常和趋势
    ↓
根据规则引擎生成建议
    ↓
按优先级排序
    ↓
返回建议列表

关键特性

安全性

  • Garmin 密码使用加密存储
  • JWT 令牌验证所有请求
  • CORS 配置限制来源
  • 环境变量管理敏感配置

扩展性

  • 模块化的服务设计
  • 易于添加新的分析算法
  • 支持数据导出功能
  • 可扩展的 API 端点

性能

  • 数据库索引优化查询
  • API 缓存策略
  • 异步处理长运行任务
  • 增量数据同步支持

部署架构

┌─────────────────────────────────┐
│   Development 本地开发          │
│ └─ npm run dev (同时运行前后端) │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│   Production 生产环境           │
│ ├─ Docker 容器化                │
│ ├─ Nginx 反向代理               │
│ ├─ Node.js 后端服务             │
│ └─ SQLite 数据持久化            │
└─────────────────────────────────┘