-- 身体围度功能数据库迁移脚本
-- 执行日期: 2024年
-- 功能: 为用户档案表新增围度字段，创建围度历史记录表

-- 禁用外键检查（执行时）
SET FOREIGN_KEY_CHECKS = 0;

-- 1. 为用户档案表新增围度字段
ALTER TABLE `t_user_profile`
ADD COLUMN `chest_circumference` FLOAT NULL COMMENT '胸围（厘米）' AFTER `daily_water_goal`,
ADD COLUMN `waist_circumference` FLOAT NULL COMMENT '腰围（厘米）' AFTER `chest_circumference`,
ADD COLUMN `upper_hip_circumference` FLOAT NULL COMMENT '上臀围（厘米）' AFTER `waist_circumference`,
ADD COLUMN `arm_circumference` FLOAT NULL COMMENT '臂围（厘米）' AFTER `upper_hip_circumference`,
ADD COLUMN `thigh_circumference` FLOAT NULL COMMENT '大腿围（厘米）' AFTER `arm_circumference`,
ADD COLUMN `calf_circumference` FLOAT NULL COMMENT '小腿围（厘米）' AFTER `thigh_circumference`;

-- 2. 创建用户身体围度历史记录表
CREATE TABLE `t_user_body_measurement_history` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` VARCHAR(255) NOT NULL COMMENT '用户ID',
  `measurement_type` ENUM(
    'chest_circumference',
    'waist_circumference',
    'upper_hip_circumference',
    'arm_circumference',
    'thigh_circumference',
    'calf_circumference'
  ) NOT NULL COMMENT '围度类型',
  `value` FLOAT NOT NULL COMMENT '围度值（厘米）',
  `source` ENUM('manual', 'other') NOT NULL DEFAULT 'manual' 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_measurement_type` (`measurement_type`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_user_measurement_time` (`user_id`, `measurement_type`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户身体围度历史记录表';

-- 重新启用外键检查
SET FOREIGN_KEY_CHECKS = 1;

-- 验证表结构
SHOW CREATE TABLE `t_user_profile`;
SHOW CREATE TABLE `t_user_body_measurement_history`;

-- 验证新增字段
SELECT
  COLUMN_NAME,
  DATA_TYPE,
  IS_NULLABLE,
  COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 't_user_profile'
  AND COLUMN_NAME IN (
    'chest_circumference',
    'waist_circumference',
    'upper_hip_circumference',
    'arm_circumference',
    'thigh_circumference',
    'calf_circumference'
  );