Files
nxxmdata/bank-backend/scripts/setup-bank-db.ps1
2025-09-18 12:33:04 +08:00

48 lines
1.5 KiB
PowerShell

Param(
[string]$Host = $env:DB_HOST,
[int]$Port = [int]($env:DB_PORT),
[string]$Database = $env:DB_NAME,
[string]$User = $env:DB_USER,
[string]$Password = $env:DB_PASSWORD,
[string]$AdminPlain = 'Admin123456'
)
Write-Host "Using DB: ${Host}:${Port}/${Database}"
# 生成管理员 bcrypt 哈希
try {
$nodeScript = @"
const bcrypt = require('bcryptjs');
const pwd = process.argv[2] || 'Admin123456';
bcrypt.hash(pwd, 10).then(h => { console.log(h); }).catch(e => { console.error(e); process.exit(1); });
"@
$hash = node -e $nodeScript $AdminPlain
if (-not $hash) { throw 'bcrypt hash failed' }
} catch {
Write-Error "Failed to generate bcrypt hash: $_"
exit 1
}
# 读取SQL并替换占位符
$schema = Get-Content -Raw -Encoding UTF8 "$PSScriptRoot/create-bank-schema.sql"
$seed = (Get-Content -Raw -Encoding UTF8 "$PSScriptRoot/seed-bank-demo.sql").Replace('REPLACE_ADMIN_BCRYPT', $hash)
$sql = $schema + "`n" + $seed
# 写入临时文件
$tmp = New-TemporaryFile
Set-Content -Path $tmp -Value $sql -Encoding UTF8
# 调用 mysql 客户端
try {
$env:MYSQL_PWD = $Password
Get-Content $tmp | mysql --host=$Host --port=$Port --user=$User --database=$Database --default-character-set=utf8mb4 --protocol=TCP
if ($LASTEXITCODE -ne 0) { throw "mysql returned $LASTEXITCODE" }
Write-Host "✅ Schema & seed executed successfully"
} catch {
Write-Error "Failed to execute SQL: $_"
exit 1
} finally {
Remove-Item $tmp -Force -ErrorAction SilentlyContinue
}