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

View File

@@ -0,0 +1,62 @@
// 业务服务层:直接映射后端 REST 接口字段,不做多余转换。
const { request } = require('../utils/request');
// 将参数对象序列化为 query string跳过空值
function buildQuery(params) {
const qs = Object.keys(params || {})
.filter(k => params[k] !== '' && params[k] !== undefined && params[k] !== null)
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
.join('&');
return qs ? '?' + qs : '';
}
// 1) 动作列表(支持多维筛选与排序)
function listExercises(params = {}) {
return request({ url: '/api/exercises' + buildQuery(params) });
}
// 2) 动作详情
function getExercise(id) {
return request({ url: '/api/exercises/' + encodeURIComponent(id) });
}
// 3) 分类维度枚举
function getCategories(type) {
return request({ url: '/api/categories/' + encodeURIComponent(type) });
}
// 4) 智能推荐
function recommend(params = {}) {
return request({ url: '/api/recommend' + buildQuery(params) });
}
// 5) 训练组合列表
function listCollections() {
return request({ url: '/api/collections' });
}
// 5) 训练组合下的动作
function getCollectionExercises(slug, params = {}) {
return request({ url: '/api/collections/' + encodeURIComponent(slug) + '/exercises' + buildQuery(params) });
}
// 6) 搜索
function search(q) {
return request({ url: '/api/search?q=' + encodeURIComponent(q) });
}
// 7) 统计概览
function getStats() {
return request({ url: '/api/stats' });
}
module.exports = {
listExercises,
getExercise,
getCategories,
recommend,
listCollections,
getCollectionExercises,
search,
getStats
};