|
|
@@ -5582,6 +5582,66 @@ try {
|
|
|
} catch (Exception e) {
|
|
|
log.warn("创建health_interaction表失败: {}", e.getMessage());
|
|
|
}
|
|
|
+
|
|
|
+ // 迁移110: 创建 health_circle 表(P3 健康圈)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS health_circle (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "name VARCHAR(100) NOT NULL COMMENT '圈名称', " +
|
|
|
+ "description VARCHAR(500) COMMENT '圈描述', " +
|
|
|
+ "creator_family_id BIGINT COMMENT '创建家庭ID', " +
|
|
|
+ "invite_code VARCHAR(32) COMMENT '邀请码', " +
|
|
|
+ "member_limit INT DEFAULT 50 COMMENT '成员上限', " +
|
|
|
+ "status VARCHAR(20) DEFAULT 'active' COMMENT '状态 active/closed', " +
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', " +
|
|
|
+ "INDEX idx_invite_code (invite_code), " +
|
|
|
+ "INDEX idx_creator (creator_family_id)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康圈'");
|
|
|
+ log.info("已创建health_circle表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建health_circle表失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移111: 创建 health_circle_member 表(P3 健康圈成员)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS health_circle_member (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "circle_id BIGINT NOT NULL COMMENT '圈ID', " +
|
|
|
+ "family_id BIGINT NOT NULL COMMENT '家庭ID', " +
|
|
|
+ "role VARCHAR(20) DEFAULT 'member' COMMENT '角色 member/admin', " +
|
|
|
+ "joined_at DATETIME COMMENT '加入时间', " +
|
|
|
+ "left_at DATETIME COMMENT '退出时间', " +
|
|
|
+ "status VARCHAR(20) DEFAULT 'active' COMMENT '状态 active/inactive', " +
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', " +
|
|
|
+ "INDEX idx_circle_id (circle_id), " +
|
|
|
+ "INDEX idx_family_id (family_id)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康圈成员'");
|
|
|
+ log.info("已创建health_circle_member表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建health_circle_member表失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移112: 创建 circle_challenge 表(P3 圈挑战)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS circle_challenge (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "circle_id BIGINT NOT NULL COMMENT '圈ID', " +
|
|
|
+ "challenge_type VARCHAR(50) NOT NULL COMMENT '挑战类型 checkin/step/meditation', " +
|
|
|
+ "title VARCHAR(200) NOT NULL COMMENT '挑战标题', " +
|
|
|
+ "description VARCHAR(500) COMMENT '挑战描述', " +
|
|
|
+ "duration_days INT DEFAULT 7 COMMENT '持续天数', " +
|
|
|
+ "period VARCHAR(20) DEFAULT 'weekly' COMMENT '周期 weekly/monthly', " +
|
|
|
+ "start_date DATETIME COMMENT '开始日期', " +
|
|
|
+ "end_date DATETIME COMMENT '结束日期', " +
|
|
|
+ "status VARCHAR(20) DEFAULT 'active' COMMENT '状态 active/completed/cancelled', " +
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', " +
|
|
|
+ "INDEX idx_circle_id (circle_id), " +
|
|
|
+ "INDEX idx_status (status)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='圈挑战'");
|
|
|
+ log.info("已创建circle_challenge表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建circle_challenge表失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void runMigration82() {
|