feat: 迁移 Admin Repository 到 MySQL 8 (#79)

This commit is contained in:
chengma
2026-08-10 02:21:31 +08:00
parent 05793e48b3
commit 13cfced80d
29 changed files with 390 additions and 240 deletions
+46 -5
View File
@@ -1,22 +1,63 @@
package repository
import (
"crypto/rand"
"database/sql"
"encoding/hex"
"os"
"strings"
"testing"
"cmautobuy/admin/config"
"cmautobuy/admin/model"
)
func newSybTestDB(t *testing.T) *sql.DB {
t.Helper()
db, err := Open(t.TempDir())
if os.Getenv("CMAUTOBUY_MYSQL_TEST") != "1" {
t.Skip("未启用真实 MySQL 8 集成测试")
}
cfg, err := config.LoadDatabaseFromEnv()
if err != nil {
t.Fatalf("打开测试库失败: %v", err)
t.Fatal(err)
}
t.Cleanup(func() { db.Close() })
if err := Migrate(db); err != nil {
t.Fatalf("迁移失败: %v", err)
if !strings.HasSuffix(cfg.Name, "_test") {
t.Fatalf("MySQL 测试基础库名必须以 _test 结尾")
}
adminDB, err := OpenMySQL(cfg)
if err != nil {
t.Fatal(err)
}
random := make([]byte, 8)
if _, err := rand.Read(random); err != nil {
t.Fatal(err)
}
databaseName := cfg.Name + "_" + hex.EncodeToString(random)
quotedName := "`" + strings.ReplaceAll(databaseName, "`", "``") + "`"
if _, err := adminDB.Exec("CREATE DATABASE " + quotedName + " CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci"); err != nil {
adminDB.Close()
t.Fatal(err)
}
cfg.Name = databaseName
db, err := OpenMySQL(cfg)
if err != nil {
adminDB.Exec("DROP DATABASE " + quotedName)
adminDB.Close()
t.Fatal(err)
}
if err := MigrateMySQL(db); err != nil {
db.Close()
adminDB.Exec("DROP DATABASE " + quotedName)
adminDB.Close()
t.Fatal(err)
}
t.Cleanup(func() {
db.Close()
if _, err := adminDB.Exec("DROP DATABASE " + quotedName); err != nil {
t.Errorf("清理隔离 MySQL 测试库失败: %v", err)
}
adminDB.Close()
})
return db
}