Files
fitness-coach/OVERVIEW.md
wm b3b58e66fb feat: init fitness-coach (backend + miniprogram)
- backend: NestJS service with exercise/plan data
- miniprogram: WeChat mini program client
- exclude node_modules, dist, runtime data-store, local env
2026-07-22 00:35:40 +08:00

58 lines
3.4 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.

# FITCOACH 健身动作推荐小程序系统 — 交付总览
基于 GitHub `hasaneyldrm/exercises-dataset`**1324 条动作**,含中英文动作说明与分步指引)构建的完整体育健身小程序系统,包含 **NestJS 后端代理/数据层** + **微信小程序前端**
## 系统架构
```
fitness-coach/
├── backend/ NestJS 10 后端(唯一数据源 + API 代理层)
│ ├── src/exercises/
│ │ ├── exercises.service.ts 查询 / 多维筛选 / 智能推荐 / 训练组合
│ │ ├── exercises.controller.ts 12 个 REST 路由
│ │ ├── data/exercises.json 原始数据集17MB1324 条)
│ │ ├── data/labels.ts 中英标签映射(部位/器械/肌肉)
│ │ └── data/collections.ts 8 个智能训练组合定义
│ └── scripts/ ensure-data / copy-data / sync-media
└── miniprogram/ 微信小程序前端(深色金质「高端大气」设计)
├── pages/ index(首页) / recommend(智能推荐) / category / detail / collection / collection-detail / search
├── components/ exercise-card / chip / navbar / bottom-nav / section-header
├── services/exercise.js 统一 API 映射
└── utils/request.js Promise 化请求层
```
## 核心功能实现
| 需求 | 实现 |
|------|------|
| 动作分类体系(多维) | 5 个分类元数据接口:部位(10) / 器械(28) / 目标肌肉(19) / 肌群 / 类型(力量·有氧·柔韧) |
| 按器械筛选 | `GET /api/exercises?equipment=dumbbell` + 前端器械 chip 筛选 |
| 按肌肉群筛选 | `GET /api/exercises?bodyPart=chest` + `?target=biceps` |
| **核心推荐** | `GET /api/recommend?target=biceps&equipment=barbell` — 评分排序(主训+100 / 协同+40 / 器械匹配+30+ 中文推荐理由 |
| 发散功能 | 8 个智能训练组合(推/拉/腿/核心/上肢/全身/居家无器械/有氧)、搜索、统计、按类型筛选 |
| 优雅首页 | 渐变 hero + 问候 + 智能推荐 CTA + 2×3 快捷入口 + 精选动作轮播 + 训练组合 + 按部位浏览 + 热门器械 |
| 数据来源 | 数据集导入后端内存,统一经 NestJS 对外提供(含 GIF 演示CDN 直链) |
## 已验证curl 全通过)
- 列表分页与多维筛选、分类元数据target 含 `bodyPart` 分组)、详情(含中文步骤)
- 推荐逻辑修复后 **total 一致**(装备仅作加分排序,不再虚增无关动作)
- 错误码:坏 id → 404recommend 缺 target → 400
## 运行方式
```bash
# 后端
cd fitness-coach/backend
npm install # 弱网下用 --prefer-offline本机有 3.1G npm 缓存,秒装)
npm run build
PORT=3000 node dist/main.js # http://localhost:3000
# 小程序
微信开发者工具「导入项目」选择 fitness-coach/miniprogram/
appid 已设为 touristappidurlCheck:false免账号即可预览
```
> 生产发布需:① `config.js` 的 BASE_URL 改为 HTTPS 域名;② 在小程序后台配置 request/downloadFile 合法域名(媒体默认用 `cdn.jsdelivr.net`,建议换自有 CDN
## 备注
- 媒体GIF/图)默认经 jsDelivr CDN 直链加载,无需本地下载;亦可改 `MEDIA_BASE_URL` 指向自有 CDN 后执行 `npm run sync:media` 同步到 `backend/media/`
- 单文件 JSON 数据集在内存中查询,接口响应快;小程序侧仅取轻量 summary保证首屏性能。