feat(db): 将种子数据改为 SQL 命令形式
新增 backend/seeds/H001.sql,通过 sh scripts/dev.sh seed H001 经由 docker exec 执行,无需本地 mysql 客户端。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+61
-16
@@ -6,15 +6,15 @@ fi
|
||||
# dev.sh — 本地开发环境管理
|
||||
#
|
||||
# 启动:
|
||||
# bash scripts/dev.sh run # 启动前后端(后端无改动则跳过重启)
|
||||
# bash scripts/dev.sh run --force # 强制重启后端
|
||||
# bash scripts/dev.sh --backend-only # 仅启动后端
|
||||
# bash scripts/dev.sh --frontend-only # 仅启动前端
|
||||
# sh scripts/dev.sh run # 启动前后端(后端无改动则跳过重启)
|
||||
# sh scripts/dev.sh run --force # 强制重启后端
|
||||
# sh scripts/dev.sh --backend-only # 仅启动后端
|
||||
# sh scripts/dev.sh --frontend-only # 仅启动前端
|
||||
#
|
||||
# 数据库:
|
||||
# bash scripts/dev.sh reset # 删表重建 + 写入测试数据
|
||||
# bash scripts/dev.sh seed # 写入测试数据(已存在则跳过)
|
||||
# bash scripts/dev.sh clear # 清空所有数据(不写入)
|
||||
# sh scripts/dev.sh seed H001 # 清空并写入 H001 测试数据(SQL 文件)
|
||||
# sh scripts/dev.sh reset # 删表重建(AutoMigrate)
|
||||
# sh scripts/dev.sh clear # 清空所有业务数据
|
||||
|
||||
set -e
|
||||
|
||||
@@ -30,6 +30,46 @@ BACKEND_HASH_FILE="$LOG_DIR/backend.hash"
|
||||
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
# ── seed 命令 ────────────────────────────────────────────────
|
||||
# 用法: cmd_seed <shop_code>
|
||||
# 从 backend/config/config.yaml 读取 DSN,执行 backend/seeds/<shop>.sql
|
||||
cmd_seed() {
|
||||
local shop="${1:-}"
|
||||
if [ -z "$shop" ]; then
|
||||
error "用法: sh scripts/dev.sh seed <shop_code> 示例: sh scripts/dev.sh seed H001"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local sql_file="$ROOT/backend/seeds/${shop}.sql"
|
||||
if [ ! -f "$sql_file" ]; then
|
||||
error "种子文件不存在: $sql_file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 从 docker-compose.yml 读取容器名和数据库信息
|
||||
local compose_file="$ROOT/deploy/docker-compose.yml"
|
||||
local container db_pass db_name
|
||||
container=$(grep 'container_name:' "$compose_file" | grep -i mysql | head -1 | sed 's/.*container_name: *//')
|
||||
db_pass=$(grep 'MYSQL_ROOT_PASSWORD:' "$compose_file" | head -1 | sed 's/.*MYSQL_ROOT_PASSWORD: *//')
|
||||
db_name=$(grep 'MYSQL_DATABASE:' "$compose_file" | head -1 | sed 's/.*MYSQL_DATABASE: *//')
|
||||
|
||||
# 检查容器是否运行
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^${container}$"; then
|
||||
error "MySQL 容器 '${container}' 未运行,请先执行: docker compose -f deploy/docker-compose.yml up -d"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
info "写入 ${shop} 种子数据 → 容器 ${container} / ${db_name}"
|
||||
docker exec -i "$container" mysql -uroot -p"$db_pass" "$db_name" < "$sql_file"
|
||||
success "✅ ${shop} 种子数据写入完成"
|
||||
echo ""
|
||||
echo " 登录信息:"
|
||||
echo " 门店编号: ${shop}"
|
||||
echo " admin / password123"
|
||||
echo " operator / password123"
|
||||
echo " test / password123"
|
||||
}
|
||||
|
||||
# ── 颜色输出 ──────────────────────────────────────────────
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
@@ -52,15 +92,20 @@ case "$COMMAND" in
|
||||
run)
|
||||
[ "${2:-}" = "--force" ] && FORCE=true
|
||||
;;
|
||||
seed|reset|clear)
|
||||
# seed / reset / clear 三个命令
|
||||
SEED_ARG=""
|
||||
[ "$COMMAND" = "reset" ] && SEED_ARG="--reset"
|
||||
[ "$COMMAND" = "clear" ] && SEED_ARG="--clear"
|
||||
[ -n "${2:-}" ] && SEED_ARG="$2"
|
||||
info "写入初始测试数据..."
|
||||
seed)
|
||||
cmd_seed "${2:-}"
|
||||
exit 0
|
||||
;;
|
||||
reset)
|
||||
info "删表重建(AutoMigrate)..."
|
||||
cd "$BACKEND_DIR"
|
||||
go run cmd/seed/main.go $SEED_ARG
|
||||
go run cmd/seed/main.go --reset
|
||||
exit 0
|
||||
;;
|
||||
clear)
|
||||
info "清空所有业务数据..."
|
||||
cd "$BACKEND_DIR"
|
||||
go run cmd/seed/main.go --clear
|
||||
exit 0
|
||||
;;
|
||||
--backend-only)
|
||||
@@ -74,7 +119,7 @@ case "$COMMAND" in
|
||||
;;
|
||||
*)
|
||||
error "未知命令: $COMMAND"
|
||||
echo "用法: bash scripts/dev.sh [run [--force] | reset | clear | seed | --backend-only | --frontend-only]"
|
||||
echo "用法: sh scripts/dev.sh [run [--force] | seed <shop> | reset | clear | --backend-only | --frontend-only]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user