feat: 新增饮食记录和分析功能
- 创建饮食记录相关的数据库模型、DTO和API接口,支持用户手动添加和AI视觉识别记录饮食。 - 实现饮食分析服务,提供营养分析和健康建议,优化AI教练服务以集成饮食分析功能。 - 更新用户控制器,添加饮食记录的增删查改接口,增强用户饮食管理体验。 - 提供详细的API使用指南和数据库创建脚本,确保功能的完整性和可用性。
This commit is contained in:
138
sql-scripts/training-plans-tables-only.sql
Normal file
138
sql-scripts/training-plans-tables-only.sql
Normal file
@@ -0,0 +1,138 @@
|
||||
-- 训练计划相关表单独创建脚本
|
||||
-- 此脚本仅创建训练计划相关的表,前提是动作表已经存在
|
||||
|
||||
-- 禁用外键检查
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- 删除训练计划相关表(如果存在)
|
||||
DROP TABLE IF EXISTS `t_schedule_exercises`;
|
||||
DROP TABLE IF EXISTS `t_training_plans`;
|
||||
|
||||
-- 重新启用外键检查
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- 创建训练计划表
|
||||
CREATE TABLE `t_training_plans` (
|
||||
`id` char(36) NOT NULL COMMENT '训练计划唯一ID',
|
||||
`is_active` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否激活',
|
||||
`user_id` varchar(255) NOT NULL COMMENT '用户ID',
|
||||
`name` varchar(255) DEFAULT NULL COMMENT '计划名称',
|
||||
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`start_date` datetime NOT NULL COMMENT '开始日期',
|
||||
`mode` enum('daysOfWeek','sessionsPerWeek') NOT NULL COMMENT '计划模式',
|
||||
`days_of_week` json NOT NULL COMMENT '周几训练(0-6)',
|
||||
`sessions_per_week` int NOT NULL COMMENT '每周训练次数',
|
||||
`goal` enum('postpartum_recovery','fat_loss','posture_correction','core_strength','flexibility','rehab','stress_relief','') NOT NULL COMMENT '训练目标',
|
||||
`start_weight_kg` float DEFAULT NULL COMMENT '起始体重(公斤)',
|
||||
`preferred_time_of_day` enum('morning','noon','evening','') NOT NULL DEFAULT '' COMMENT '偏好训练时间',
|
||||
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已删除',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_is_active` (`is_active`),
|
||||
KEY `idx_deleted` (`deleted`),
|
||||
KEY `idx_user_active` (`user_id`, `is_active`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='训练计划表';
|
||||
|
||||
-- 创建训练计划动作表
|
||||
CREATE TABLE `t_schedule_exercises` (
|
||||
`id` char(36) NOT NULL COMMENT '计划动作唯一ID',
|
||||
`training_plan_id` char(36) NOT NULL COMMENT '训练计划ID',
|
||||
`user_id` varchar(255) NOT NULL COMMENT '用户ID',
|
||||
`exercise_key` varchar(255) DEFAULT NULL COMMENT '关联的动作key(仅exercise类型)',
|
||||
`name` varchar(255) NOT NULL COMMENT '项目名称',
|
||||
`sets` int DEFAULT NULL COMMENT '组数',
|
||||
`reps` int DEFAULT NULL COMMENT '重复次数',
|
||||
`duration_sec` int DEFAULT NULL COMMENT '持续时长(秒)',
|
||||
`rest_sec` int DEFAULT NULL COMMENT '休息时长(秒)',
|
||||
`note` text DEFAULT NULL COMMENT '备注',
|
||||
`item_type` enum('exercise','rest','note') NOT NULL DEFAULT 'exercise' COMMENT '项目类型',
|
||||
`completed` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已完成',
|
||||
`sort_order` int NOT NULL COMMENT '排序顺序',
|
||||
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已删除',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_training_plan_id` (`training_plan_id`),
|
||||
KEY `idx_exercise_key` (`exercise_key`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_sort_order` (`sort_order`),
|
||||
KEY `idx_item_type` (`item_type`),
|
||||
KEY `idx_plan_sort` (`training_plan_id`, `sort_order`),
|
||||
CONSTRAINT `fk_schedule_exercises_training_plan` FOREIGN KEY (`training_plan_id`) REFERENCES `t_training_plans` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT `fk_schedule_exercises_exercise` FOREIGN KEY (`exercise_key`) REFERENCES `t_exercises` (`key`) ON DELETE SET NULL ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='训练计划动作表';
|
||||
|
||||
-- 验证表创建
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
TABLE_COMMENT,
|
||||
ENGINE
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME IN ('t_training_plans', 't_schedule_exercises')
|
||||
ORDER BY TABLE_NAME;
|
||||
|
||||
-- 验证外键约束
|
||||
SELECT
|
||||
CONSTRAINT_NAME,
|
||||
TABLE_NAME,
|
||||
COLUMN_NAME,
|
||||
REFERENCED_TABLE_NAME,
|
||||
REFERENCED_COLUMN_NAME
|
||||
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND REFERENCED_TABLE_NAME IS NOT NULL
|
||||
AND TABLE_NAME = 't_schedule_exercises'
|
||||
ORDER BY CONSTRAINT_NAME;
|
||||
|
||||
-- 测试外键约束(插入测试数据)
|
||||
-- 注意:这需要先有有效的 exercise_key 数据
|
||||
|
||||
/*
|
||||
示例测试(请根据实际数据调整):
|
||||
|
||||
-- 插入测试训练计划
|
||||
INSERT INTO t_training_plans (
|
||||
id, user_id, name, start_date, mode, days_of_week, sessions_per_week, goal
|
||||
) VALUES (
|
||||
'550e8400-e29b-41d4-a716-446655440000',
|
||||
'test_user_123',
|
||||
'测试训练计划',
|
||||
NOW(),
|
||||
'daysOfWeek',
|
||||
'[1,3,5]',
|
||||
3,
|
||||
'core_strength'
|
||||
);
|
||||
|
||||
-- 插入测试动作
|
||||
INSERT INTO t_schedule_exercises (
|
||||
id, training_plan_id, user_id, exercise_key, name, sets, reps, item_type, sort_order
|
||||
) VALUES (
|
||||
'550e8400-e29b-41d4-a716-446655440001',
|
||||
'550e8400-e29b-41d4-a716-446655440000',
|
||||
'test_user_123',
|
||||
'mat_hundred',
|
||||
'百次拍打',
|
||||
3,
|
||||
10,
|
||||
'exercise',
|
||||
1
|
||||
);
|
||||
|
||||
-- 验证数据
|
||||
SELECT
|
||||
tp.name as plan_name,
|
||||
se.name as exercise_name,
|
||||
se.exercise_key,
|
||||
e.target_muscle_groups
|
||||
FROM t_training_plans tp
|
||||
JOIN t_schedule_exercises se ON tp.id = se.training_plan_id
|
||||
LEFT JOIN t_exercises e ON se.exercise_key = e.key
|
||||
WHERE tp.user_id = 'test_user_123';
|
||||
|
||||
-- 清理测试数据
|
||||
DELETE FROM t_schedule_exercises WHERE user_id = 'test_user_123';
|
||||
DELETE FROM t_training_plans WHERE user_id = 'test_user_123';
|
||||
*/
|
||||
Reference in New Issue
Block a user