- 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>
176 lines
6.3 KiB
Markdown
176 lines
6.3 KiB
Markdown
# 项目架构说明
|
|
|
|
## 整体架构
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ 浏览器 (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 数据持久化 │
|
|
└─────────────────────────────────┘
|
|
```
|