chore(init): 初始化解忧商行项目并完成 Phase 0 基座

This commit is contained in:
yml2213
2026-10-30 11:46:10 +08:00
commit 8d9481c251
689 changed files with 138703 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
#!/usr/bin/env bash
set -euo pipefail
# 准备后端测试所需的 MySQL 库与授权。
#
# 测试按包使用独立库(默认 hfb_jysh_test_<包名>),这里用一条通配授权覆盖全部包,
# 因此只需在搭建环境时执行一次。可重复执行。
#
# 可用环境变量覆盖:
# TEST_MYSQL_HOST/PORT 应用账号连接地址(默认 127.0.0.1:23306)
# MYSQL_ADMIN_USER/PASSWORD 管理员账号(默认 root/rootsecret)
# TEST_MYSQL_USER/PASSWORD 应用账号(默认 hfb/secret)
# HFB_TEST_DATABASE 测试库基础名(默认 hfb_jysh_test)
# TEST_MYSQL_CONTAINER 优先使用的容器名(默认 jysh-mysql)
host="${TEST_MYSQL_HOST:-127.0.0.1}"
port="${TEST_MYSQL_PORT:-23306}"
admin_user="${MYSQL_ADMIN_USER:-root}"
admin_password="${MYSQL_ADMIN_PASSWORD:-rootsecret}"
app_user="${TEST_MYSQL_USER:-hfb}"
app_password="${TEST_MYSQL_PASSWORD:-secret}"
base_database="${HFB_TEST_DATABASE:-hfb_jysh_test}"
container="${TEST_MYSQL_CONTAINER:-jysh-mysql}"
[[ "${base_database}" =~ ^[A-Za-z0-9_]+$ ]] || { printf '测试库基础名不合法: %s\n' "${base_database}" >&2; exit 2; }
# MySQL 授权库名支持 % 通配;这里按测试库前缀授权,覆盖 __template 与各包克隆库。
pattern="${base_database}%"
run_admin_sql() {
if command -v docker >/dev/null 2>&1 && docker ps --format '{{.Names}}' 2>/dev/null | grep -qx "${container}"; then
docker exec -i "${container}" mysql -u"${admin_user}" -p"${admin_password}"
else
MYSQL_PWD="${admin_password}" mysql --host="${host}" --port="${port}" --user="${admin_user}"
fi
}
printf '准备 MySQL 测试库授权:%s_%% -> %s@%%\n' "${base_database}" "${app_user}"
run_admin_sql <<SQL
CREATE USER IF NOT EXISTS '${app_user}'@'%' IDENTIFIED BY '${app_password}';
GRANT ALL PRIVILEGES ON \`${pattern}\`.* TO '${app_user}'@'%';
FLUSH PRIVILEGES;
SQL
printf '测试库授权已就绪。测试运行时会维护模板库 %s__template,并按包克隆为 %s_<包名>\n' "${base_database}" "${base_database}"