4.4 KiB
4.4 KiB
用户自定义食物功能实现总结
实现概述
已成功实现用户添加自定义食物的功能,包括数据库表设计、后端API接口和完整的业务逻辑。用户可以创建、查看、搜索和删除自己的自定义食物,这些食物会与系统食物一起显示在食物库中。
实现的功能
1. 数据库层面
- ✅ 创建了
t_user_custom_foods表 - ✅ 包含与系统食物库相同的营养字段
- ✅ 通过
user_id字段关联用户 - ✅ 通过外键约束确保分类的有效性
2. 模型层面
- ✅ 创建了
UserCustomFoodSequelize模型 - ✅ 定义了完整的字段映射和关联关系
- ✅ 更新了食物库模块以包含新模型
3. 服务层面
- ✅ 扩展了
FoodLibraryService以支持用户自定义食物 - ✅ 实现了创建自定义食物的方法
- ✅ 实现了删除自定义食物的方法
- ✅ 更新了获取食物库列表的方法,合并系统食物和用户自定义食物
- ✅ 更新了搜索食物的方法,包含用户自定义食物
- ✅ 更新了获取食物详情的方法,支持系统食物和自定义食物
4. 控制器层面
- ✅ 添加了创建自定义食物的 POST 接口
- ✅ 添加了删除自定义食物的 DELETE 接口
- ✅ 更新了现有接口以支持用户认证和自定义食物
- ✅ 添加了完整的 Swagger 文档注解
5. DTO层面
- ✅ 创建了
CreateCustomFoodDto用于创建自定义食物 - ✅ 添加了完整的验证规则
- ✅ 扩展了
FoodItemDto以标识是否为自定义食物
核心特性
权限控制
- 所有接口都需要用户认证
- 用户只能看到和操作自己的自定义食物
- 系统食物对所有用户可见
数据隔离
- 用户自定义食物通过
user_id字段实现数据隔离 - 搜索和列表查询都会自动过滤用户权限
智能合并
- 获取食物库列表时,自动合并系统食物和用户自定义食物
- 常见分类只显示系统食物,其他分类显示合并后的食物
- 搜索结果中用户自定义食物优先显示
数据验证
- 食物名称和分类键为必填项
- 营养成分有合理的数值范围限制
- 分类键必须是有效的系统分类
API接口
获取食物库列表
GET /food-library
Authorization: Bearer <token>
搜索食物
GET /food-library/search?keyword=关键词
Authorization: Bearer <token>
创建自定义食物
POST /food-library/custom
Authorization: Bearer <token>
Content-Type: application/json
删除自定义食物
DELETE /food-library/custom/{id}
Authorization: Bearer <token>
获取食物详情
GET /food-library/{id}
Authorization: Bearer <token>
文件清单
新增文件
sql-scripts/user-custom-foods-table.sql- 数据库表创建脚本src/food-library/models/user-custom-food.model.ts- 用户自定义食物模型src/food-library/USER_CUSTOM_FOODS.md- 功能说明文档test-custom-foods.sh- 功能测试脚本
修改文件
src/food-library/food-library.module.ts- 添加新模型到模块src/food-library/food-library.service.ts- 扩展服务以支持自定义食物src/food-library/food-library.controller.ts- 添加新接口和更新现有接口src/food-library/dto/food-library.dto.ts- 添加新DTO和扩展现有DTO
使用说明
-
运行数据库脚本:执行
sql-scripts/user-custom-foods-table.sql创建用户自定义食物表 -
重启应用:重启NestJS应用以加载新的模型和接口
-
测试功能:使用
test-custom-foods.sh脚本测试各个接口(需要先获取有效的访问令牌) -
前端集成:前端可以通过新的API接口实现用户自定义食物的增删查功能
注意事项
- 所有接口都需要用户认证,确保在请求头中包含有效的 Bearer token
- 创建自定义食物时,分类键必须是系统中已存在的分类
- 用户只能删除自己创建的自定义食物
- 营养成分字段都是可选的,但建议提供准确的营养信息
扩展建议
- 图片上传:可以添加图片上传功能,让用户为自定义食物添加图片
- 营养计算:可以添加营养成分的自动计算功能
- 食物分享:可以考虑添加用户间分享自定义食物的功能
- 批量导入:可以添加批量导入自定义食物的功能
- 食物模板:可以提供常见食物的营养模板,方便用户快速创建