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
This commit is contained in:
2026-07-22 00:35:40 +08:00
commit b3b58e66fb
103 changed files with 154759 additions and 0 deletions

57
OVERVIEW.md Normal file
View File

@@ -0,0 +1,57 @@
# 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保证首屏性能。