kindergarten_java/lesingle-edu-reading-platform-backend/db-migrate.sh
En 40589f59e7 chore: 重命名项目目录
前后端目录重命名:
- reading-platform-java/ → lesingle-edu-reading-platform-backend/
- reading-platform-frontend/ → lesingle-edu-reading-platform-frontend/

更新相关文件:
- 所有 shell 脚本中的目录引用
- pom.xml 和 application.yml 中的项目名称
- package.json 中的项目名称
- .claude/CLAUDE.md 中的路径引用
- README 文档中的路径引用
2026-03-26 11:31:47 +08:00

87 lines
7.5 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 数据库迁移脚本
echo "==========================================="
echo "开始执行数据库迁移..."
echo "==========================================="
cd /Users/retirado/Program/ccProgram_0312/lesingle-edu-reading-platform-backend
# 创建临时迁移 Java 文件
cat > /tmp/DbMigrate.java << 'EOF'
import java.sql.*;
public class DbMigrate {
public static void main(String[] args) {
String url = "jdbc:mysql://8.148.151.56:3306/reading_platform?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
String user = "root";
String password = "reading_platform_pwd";
String[] sqls = {
"CREATE TABLE IF NOT EXISTS course_package (id BIGINT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL COMMENT '套餐名称', description TEXT COMMENT '套餐描述', price BIGINT NOT NULL COMMENT '价格(分)', discount_price BIGINT COMMENT '折后价格(分)', discount_type VARCHAR(50) COMMENT '折扣类型', grade_levels VARCHAR(500) COMMENT '适用年级', course_count INT NOT NULL DEFAULT 0 COMMENT '课程数量', status VARCHAR(50) NOT NULL DEFAULT 'DRAFT' COMMENT '状态', submitted_at DATETIME COMMENT '提交时间', submitted_by BIGINT COMMENT '提交人ID', reviewed_at DATETIME COMMENT '审核时间', reviewed_by BIGINT COMMENT '审核人ID', review_comment TEXT COMMENT '审核意见', published_at DATETIME COMMENT '发布时间', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_status (status)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程套餐表')",
"CREATE TABLE IF NOT EXISTS course_package_course (id BIGINT NOT NULL AUTO_INCREMENT, package_id BIGINT NOT NULL COMMENT '套餐ID', course_id BIGINT NOT NULL COMMENT '课程ID', grade_level VARCHAR(50) COMMENT '适用年级', sort_order INT NOT NULL DEFAULT 0 COMMENT '排序号', PRIMARY KEY (id), UNIQUE KEY uk_package_course (package_id, course_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐课程关联表'",
"CREATE TABLE IF NOT EXISTS tenant_package (id BIGINT NOT NULL AUTO_INCREMENT, tenant_id BIGINT NOT NULL COMMENT '租户ID', package_id BIGINT NOT NULL COMMENT '套餐ID', start_date DATE NOT NULL COMMENT '开始日期', end_date DATE NOT NULL COMMENT '结束日期', price_paid BIGINT NOT NULL DEFAULT 0 COMMENT '实付价格', status VARCHAR(50) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_tenant_id (tenant_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户套餐关联表'",
"CREATE TABLE IF NOT EXISTS course_lesson (id BIGINT NOT NULL AUTO_INCREMENT, course_id BIGINT NOT NULL COMMENT '课程ID', lesson_type VARCHAR(50) NOT NULL COMMENT '课程类型', name VARCHAR(255) NOT NULL COMMENT '课程名称', description TEXT COMMENT '课程描述', duration INT COMMENT '时长(分钟)', video_path VARCHAR(500) COMMENT '视频路径', video_name VARCHAR(255) COMMENT '视频名称', ppt_path VARCHAR(500) COMMENT 'PPT路径', ppt_name VARCHAR(255) COMMENT 'PPT名称', pdf_path VARCHAR(500) COMMENT 'PDF路径', pdf_name VARCHAR(255) COMMENT 'PDF名称', objectives TEXT COMMENT '教学目标', preparation TEXT COMMENT '教学准备', extension TEXT COMMENT '教学延伸', reflection TEXT COMMENT '教学反思', assessment_data TEXT COMMENT '评测数据', use_template TINYINT(1) DEFAULT 0 COMMENT '是否使用模板', sort_order INT NOT NULL DEFAULT 0 COMMENT '排序号', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_course_id (course_id), UNIQUE KEY uk_course_lesson_type (course_id, lesson_type)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程环节表'",
"CREATE TABLE IF NOT EXISTS lesson_step (id BIGINT NOT NULL AUTO_INCREMENT, lesson_id BIGINT NOT NULL COMMENT '课程环节ID', name VARCHAR(255) NOT NULL COMMENT '环节名称', content TEXT COMMENT '环节内容', duration INT NOT NULL DEFAULT 5 COMMENT '时长(分钟)', objective TEXT COMMENT '教学目标', resource_ids TEXT COMMENT '资源ID列表', sort_order INT NOT NULL DEFAULT 0 COMMENT '排序号', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_lesson_id (lesson_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教学环节表'",
"CREATE TABLE IF NOT EXISTS lesson_step_resource (id BIGINT NOT NULL AUTO_INCREMENT, step_id BIGINT NOT NULL COMMENT '环节ID', resource_id BIGINT NOT NULL COMMENT '资源ID', sort_order INT NOT NULL DEFAULT 0 COMMENT '排序号', PRIMARY KEY (id), KEY idx_step_id (step_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='环节资源关联表'",
"CREATE TABLE IF NOT EXISTS theme (id BIGINT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL COMMENT '主题名称', description TEXT COMMENT '主题描述', sort_order INT NOT NULL DEFAULT 0 COMMENT '排序号', status VARCHAR(50) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_status (status)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主题字典表'"
};
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
for (int i = 0; i < sqls.length; i++) {
try {
System.out.println("执行 SQL [" + (i + 1) + "/" + sqls.length + "]...");
stmt.execute(sqls[i]);
System.out.println("✓ 成功");
} catch (SQLException e) {
if (e.getMessage() != null && e.getMessage().contains("already exists")) {
System.out.println("⚠ 表已存在,跳过");
} else {
System.out.println("✗ 失败: " + e.getMessage());
}
}
}
System.out.println("\n===========================================");
System.out.println("数据库迁移完成!");
System.out.println("===========================================");
} catch (SQLException e) {
System.err.println("数据库连接失败: " + e.getMessage());
System.exit(1);
}
}
}
EOF
# 编译并运行
echo "编译迁移工具..."
javac /tmp/DbMigrate.java 2>&1 || {
echo "编译失败,尝试使用 Maven..."
# 使用 Maven 创建临时项目
mvn exec:java -Dexec.mainClass="DbMigrate" -Dexec.classpathScope=compile -Dexec.cleanup=false -q 2>&1 || {
echo "Maven 方式也失败,尝试直接使用 mvn spring-boot:run..."
# 修改 Application 主类临时添加迁移
echo "请手动执行以下步骤:"
echo "1. 打开 Navicat 或其他数据库管理工具"
echo "2. 连接到数据库8.148.151.56:3306"
echo "3. 执行 SQL 脚本src/main/resources/db/migration/V20260312__create_new_tables.sql"
exit 1
}
}
echo "执行迁移..."
java -cp /tmp DbMigrate
echo "清理临时文件..."
rm -f /tmp/DbMigrate.*