feat: 新增饮食记录和分析功能
- 创建饮食记录相关的数据库模型、DTO和API接口,支持用户手动添加和AI视觉识别记录饮食。 - 实现饮食分析服务,提供营养分析和健康建议,优化AI教练服务以集成饮食分析功能。 - 更新用户控制器,添加饮食记录的增删查改接口,增强用户饮食管理体验。 - 提供详细的API使用指南和数据库创建脚本,确保功能的完整性和可用性。
This commit is contained in:
159
docs/diet-records-api-guide.md
Normal file
159
docs/diet-records-api-guide.md
Normal file
@@ -0,0 +1,159 @@
|
||||
# 饮食记录功能 API 使用指南
|
||||
|
||||
## 功能概述
|
||||
|
||||
饮食记录功能允许用户通过多种方式记录和管理饮食信息,包括:
|
||||
- 手动添加饮食记录
|
||||
- AI视觉识别自动记录(通过拍照)
|
||||
- 获取饮食历史记录
|
||||
- 营养分析和健康建议
|
||||
|
||||
## 数据库模型
|
||||
|
||||
### 饮食记录表 (t_user_diet_history)
|
||||
|
||||
包含以下关键字段:
|
||||
- 基础信息:食物名称、餐次类型、用餐时间
|
||||
- 营养成分:热量、蛋白质、碳水化合物、脂肪、膳食纤维等
|
||||
- 记录来源:手动输入、AI视觉识别、其他
|
||||
- AI分析结果:完整的识别数据(JSON格式)
|
||||
|
||||
## API 端点
|
||||
|
||||
### 1. 添加饮食记录
|
||||
```
|
||||
POST /users/diet-records
|
||||
```
|
||||
|
||||
**请求体示例:**
|
||||
```json
|
||||
{
|
||||
"mealType": "lunch",
|
||||
"foodName": "鸡胸肉沙拉",
|
||||
"foodDescription": "烤鸡胸肉配蔬菜沙拉",
|
||||
"portionDescription": "1份",
|
||||
"estimatedCalories": 280,
|
||||
"proteinGrams": 35.0,
|
||||
"carbohydrateGrams": 15.5,
|
||||
"fatGrams": 8.0,
|
||||
"fiberGrams": 5.2,
|
||||
"source": "manual",
|
||||
"notes": "午餐很健康"
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 获取饮食记录历史
|
||||
```
|
||||
GET /users/diet-records?startDate=2024-01-01&endDate=2024-01-31&mealType=lunch&page=1&limit=20
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"records": [
|
||||
{
|
||||
"id": 1,
|
||||
"mealType": "lunch",
|
||||
"foodName": "鸡胸肉沙拉",
|
||||
"estimatedCalories": 280,
|
||||
"proteinGrams": 35.0,
|
||||
"source": "manual",
|
||||
"createdAt": "2024-01-15T12:30:00.000Z"
|
||||
}
|
||||
],
|
||||
"total": 1,
|
||||
"page": 1,
|
||||
"limit": 20,
|
||||
"totalPages": 1
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 更新饮食记录
|
||||
```
|
||||
PUT /users/diet-records/:id
|
||||
```
|
||||
|
||||
### 4. 删除饮食记录
|
||||
```
|
||||
DELETE /users/diet-records/:id
|
||||
```
|
||||
|
||||
### 5. 获取营养汇总分析
|
||||
```
|
||||
GET /users/nutrition-summary?mealCount=10
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"nutritionSummary": {
|
||||
"totalCalories": 2150,
|
||||
"totalProtein": 85.5,
|
||||
"totalCarbohydrates": 180.2,
|
||||
"totalFat": 65.8,
|
||||
"totalFiber": 28.5,
|
||||
"recordCount": 10,
|
||||
"dateRange": {
|
||||
"start": "2024-01-10T08:00:00.000Z",
|
||||
"end": "2024-01-15T19:00:00.000Z"
|
||||
}
|
||||
},
|
||||
"recentRecords": [...],
|
||||
"healthAnalysis": "基于您最近的饮食记录,我将为您提供个性化的营养分析和健康建议。",
|
||||
"nutritionScore": 78,
|
||||
"recommendations": [
|
||||
"建议增加膳食纤维摄入,多吃蔬菜、水果和全谷物。",
|
||||
"您的饮食结构相对均衡,继续保持良好的饮食习惯!"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## AI教练集成
|
||||
|
||||
### 饮食记录指令
|
||||
|
||||
用户可以使用以下指令触发饮食记录功能:
|
||||
- `#记饮食` 或 `#饮食` 或 `#记录饮食`
|
||||
|
||||
### AI视觉识别流程
|
||||
|
||||
1. 用户发送 `#记饮食` 指令并上传食物图片
|
||||
2. AI使用视觉模型分析图片,提取:
|
||||
- 食物名称和类型
|
||||
- 营养成分估算
|
||||
- 份量描述
|
||||
- 餐次类型(基于时间自动判断)
|
||||
3. 如果识别置信度足够,自动保存到数据库
|
||||
4. 结合用户历史饮食记录,提供个性化营养分析
|
||||
|
||||
### 营养分析上下文
|
||||
|
||||
AI教练会自动获取用户最近的饮食记录,提供:
|
||||
- 营养摄入趋势分析
|
||||
- 个性化健康建议
|
||||
- 基于历史记录的改善建议
|
||||
|
||||
## 数据库配置
|
||||
|
||||
1. 运行 SQL 脚本创建表:
|
||||
```bash
|
||||
mysql -u username -p database_name < docs/diet-records-table-create.sql
|
||||
```
|
||||
|
||||
2. 在 UsersModule 中已自动注册 UserDietHistory 模型
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **营养数据准确性**:AI估算的营养数据仅供参考,实际值可能有差异
|
||||
2. **图片质量**:为了更好的识别效果,建议上传清晰的食物图片
|
||||
3. **隐私保护**:用户饮食数据会安全存储,仅用于个性化分析
|
||||
4. **性能优化**:使用了合适的数据库索引来优化查询性能
|
||||
|
||||
## 扩展功能
|
||||
|
||||
未来可以考虑添加:
|
||||
- 食物营养数据库集成
|
||||
- 更精确的营养成分计算
|
||||
- 饮食目标设定和追踪
|
||||
- 营养师在线咨询
|
||||
- 社交分享功能
|
||||
Reference in New Issue
Block a user