Files
GarminHealthLab/PROGRESS.md
ericwyuan 15fba8c25c feat: NAS 部署 + auth-hub 认证 + 同步逻辑修复
部署:
- 后端 Python/Flask,数据层可插拔 SQLite/MariaDB
- NAS 部署路径 /volume1/web/garmin-health-lab,端口 8124
- Gunicorn 生产服务器 (2 workers / 4 threads)
- 开机自启脚本 deploy/S99garmin.sh
- frp 隧道甲骨文 8124 → NAS 8124,外网访问
- 前端构建产物纳入版本管理 (backend/static/)

认证:
- auth-hub OAuth2/OIDC 统一登录接入
- 新建 NAS 专用 client,注册内外网回调地址
- 前端 LoginPage 支持回调路由 /auth/callback
- 数据同步页增加 Garmin 邮箱输入框

同步逻辑修复:
- 自动同步调度器读取用户 history_days 设置,不再固定 2 天
- 前端 0(全部历史)不再被 || 吞掉,改为 ?? 处理
- 后端路由和 sync_data 中 0 不再被当成 falsy 回退默认值
- sync_data 和调度器中 0 → 730 天(全部历史=最大范围)
- 已同步天数显示数据库实际总天数 (totalDays)
- 历史范围新增「自上次同步」增量选项 (days=-1)
- 后端 settings.py HISTORY 添加 -1 值

项目文档:
- 创建 PROGRESS.md 跟踪项目进度
2026-09-01 07:39:09 +08:00

72 lines
3.2 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.
# Garmin Health Lab — 项目进度
## 已完成
### 部署
- [x] 后端从 Node.js 重构为 Python/Flask
- [x] 数据层可插拔:开发用 SQLite生产用 MariaDB
- [x] Gunicorn 生产服务器配置2 workers / 4 threads
- [x] 部署到本地 NAS`/volume1/web/garmin-health-lab`),端口 8124
- [x] frp 隧道配置,通过甲骨文公网 IP 外网访问(`http://129.146.26.249:8124`
- [x] 开机自启脚本(`deploy/S99garmin.sh`
- [x] 甲骨文 iptables 放行 8124 端口
### 认证
- [x] auth-hub 统一登录接入OAuth2 / OIDC
- [x] 新建 NAS 专用 client`client_id: 996aLPw4T5gl-rYZ`
- [x] 注册 NAS 回调地址 `http://192.168.50.64:8124/auth/callback` 和公网地址 `http://129.146.26.249:8124/auth/callback`
- [x] JWT 令牌签发与验证
- [x] Garmin OAuth 令牌授权(密码不入库,令牌约一年有效)
### 后端功能
- [x] Garmin 数据同步核心逻辑(`services/garmin.py`
- [x] 后台自动同步调度器(`services/scheduler.py`
- [x] 用户设置:身高/体重/出生日期/性别/单位/同步频率/历史范围(`services/settings.py`
- [x] 健康数据分析服务(`services/analysis.py`
- [x] 身体年龄计算(`services/fitness_age.py`
- [x] 运动详情与全天曲线同步(`services/extras.py`
- [x] 可插拔数据层(`db.py`,支持 SQLite ↔ MariaDB 切换)
- [x] 集中配置管理(`config.py`,从 `.env` 读取)
- [x] 自动同步调度器读取用户 `history_days` 设置(修复前固定 2 天)
### 前端功能
- [x] 仪表板:健康数据概览
- [x] 趋势分析数据可视化与趋势图Recharts
- [x] 数据同步页:同步最新数据 / 同步历史 / 补齐详细数据
- [x] 同步进度轮询与状态展示
- [x] 设置页:个人资料、单位、自动同步、历史范围
- [x] 评分依据:每个评级分段的公开参考值来源
- [x] 数据绑定页Garmin 邮箱+密码输入
- [x] 历史范围选项:自上次同步 / 全部历史 / N 天 / N 年
### 同步逻辑修复
- [x] 自动同步调度器认用户设置的 `history_days`,不再固定 2 天
- [x] 前端 `0`(全部历史)不再被 `||` 吞掉,改为 `??` 处理
- [x] 后端路由和 `sync_data``0` 不再被当成 falsy 回退默认值
- [x] `sync_data``0` → 730 天(全部历史=最大范围)
- [x] 调度器 `0` → 730 天转换
- [x] 「已同步天数」显示数据库实际总天数(`totalDays`),而非上次同步记录数
### 数据库
- [x] MariaDB 数据库创建(`garmin_health_lab`
- [x] 完整表结构:`health_data` / `daily_series` / `activities` / `activity_details` / `users` / `user_settings` / `garmin_tokens` / `sync_status`
- [x] 257 天健康数据已同步2025-12-19 ~ 2026-09-01
## 待办
### 功能完善
- [ ] 仪表板数据可视化组件完善
- [ ] 健康建议 / AI 解读功能
- [ ] 数据分析报告生成
- [ ] 多用户支持完善
### 运维
- [ ] 监控与告警
- [ ] 日志轮转与清理
- [ ] 数据库备份策略
- [ ] HTTPS 证书配置Let's Encrypt
### 文档
- [x] ARCHITECTURE.md 需更新(当前仍为 Node.js 架构描述)
- [x] DEVELOPMENT.md 需更新(当前仍为 Node.js 开发指南)
- [x] REQUIREMENTS.md 需更新