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:
wangjia
2026-04-07 23:02:15 +08:00
parent 902c3c3046
commit 39fe1da800
2 changed files with 313 additions and 16 deletions
+61 -16
View File
@@ -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