feat: 新增饮食记录和分析功能

- 创建饮食记录相关的数据库模型、DTO和API接口,支持用户手动添加和AI视觉识别记录饮食。
- 实现饮食分析服务,提供营养分析和健康建议,优化AI教练服务以集成饮食分析功能。
- 更新用户控制器,添加饮食记录的增删查改接口,增强用户饮食管理体验。
- 提供详细的API使用指南和数据库创建脚本,确保功能的完整性和可用性。
This commit is contained in:
richarjiang
2025-08-18 16:27:01 +08:00
parent 3d36ee90f0
commit 485ba1f67c
19 changed files with 2031 additions and 52 deletions

View File

@@ -0,0 +1,45 @@
-- 创建用户饮食记录表
-- 该表用于存储用户通过AI视觉识别或手动输入的饮食记录
-- 包含详细的营养成分信息,支持营养分析和健康建议功能
CREATE TABLE IF NOT EXISTS `t_user_diet_history` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` varchar(255) NOT NULL COMMENT '用户ID',
`meal_type` enum('breakfast','lunch','dinner','snack','other') NOT NULL DEFAULT 'other' COMMENT '餐次类型',
`food_name` varchar(100) NOT NULL COMMENT '食物名称',
`food_description` varchar(500) DEFAULT NULL COMMENT '食物描述(详细信息)',
`weight_grams` float DEFAULT NULL COMMENT '食物重量(克)',
`portion_description` varchar(50) DEFAULT NULL COMMENT '份量描述1碗、2片、100g等',
`estimated_calories` float DEFAULT NULL COMMENT '估算总热量(卡路里)',
`protein_grams` float DEFAULT NULL COMMENT '蛋白质含量(克)',
`carbohydrate_grams` float DEFAULT NULL COMMENT '碳水化合物含量(克)',
`fat_grams` float DEFAULT NULL COMMENT '脂肪含量(克)',
`fiber_grams` float DEFAULT NULL COMMENT '膳食纤维含量(克)',
`sugar_grams` float DEFAULT NULL COMMENT '糖分含量(克)',
`sodium_mg` float DEFAULT NULL COMMENT '钠含量(毫克)',
`additional_nutrition` json DEFAULT NULL COMMENT '其他营养信息(维生素、矿物质等)',
`source` enum('manual','vision','other') NOT NULL DEFAULT 'manual' COMMENT '记录来源',
`meal_time` datetime DEFAULT NULL COMMENT '用餐时间',
`image_url` varchar(500) DEFAULT NULL COMMENT '食物图片URL',
`ai_analysis_result` json DEFAULT NULL COMMENT 'AI识别原始结果',
`notes` text DEFAULT NULL COMMENT '用户备注',
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已删除',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_meal_type` (`meal_type`),
KEY `idx_created_at` (`created_at`),
KEY `idx_user_created` (`user_id`, `created_at`),
KEY `idx_deleted` (`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户饮食记录表';
-- 创建索引以优化查询性能
CREATE INDEX `idx_user_meal_time` ON `t_user_diet_history` (`user_id`, `meal_time`);
CREATE INDEX `idx_source` ON `t_user_diet_history` (`source`);
-- 示例数据(可选)
-- INSERT INTO `t_user_diet_history` (`user_id`, `meal_type`, `food_name`, `food_description`, `portion_description`, `estimated_calories`, `protein_grams`, `carbohydrate_grams`, `fat_grams`, `fiber_grams`, `source`, `meal_time`, `notes`) VALUES
-- ('test_user_001', 'breakfast', '燕麦粥', '燕麦片加牛奶和香蕉', '1碗', 320, 12.5, 45.2, 8.3, 6.8, 'manual', '2024-01-15 08:00:00', '早餐很有营养'),
-- ('test_user_001', 'lunch', '鸡胸肉沙拉', '烤鸡胸肉配蔬菜沙拉', '1份', 280, 35.0, 15.5, 8.0, 5.2, 'vision', '2024-01-15 12:30:00', 'AI识别添加'),
-- ('test_user_001', 'dinner', '三文鱼配糙米', '煎三文鱼配蒸糙米和西兰花', '1份', 450, 28.5, 52.0, 18.2, 4.5, 'manual', '2024-01-15 19:00:00', '晚餐丰富');