package mysql import ( "os" "strings" "github.com/google/uuid" "golang.org/x/crypto/bcrypt" "myschools.me/heritage/heritage-api/model" ) func Bootstrap() { if os.Getenv("MYSQL_INIT") != "true" { return } db, err := newDB() if err != nil { panic(err) } if err := db.AutoMigrate(&model.Role{}, &model.Permission{}, &model.User{}); err != nil { panic(err) } var roleCount int64 if err := db.Model(&model.Role{}).Count(&roleCount).Error; err != nil { panic(err) } var permissionCount int64 if err := db.Model(&model.Permission{}).Count(&permissionCount).Error; err != nil { panic(err) } var userCount int64 if err := db.Model(&model.User{}).Count(&userCount).Error; err != nil { panic(err) } var defaultRole model.Role if roleCount == 0 { defaultRole = model.Role{ ID: newID(), Code: "admin", Name: "管理员", } if err := db.Create(&defaultRole).Error; err != nil { panic(err) } } else { if err := db.Where("code = ?", "admin").First(&defaultRole).Error; err != nil { if err := db.First(&defaultRole).Error; err != nil { panic(err) } } } if permissionCount == 0 { p := model.Permission{ ID: newID(), RoleID: defaultRole.ID, Code: "*", Name: "全部权限", } if err := db.Create(&p).Error; err != nil { panic(err) } } if userCount == 0 { defaultPwd := "admin" h, err := bcrypt.GenerateFromPassword([]byte(defaultPwd), bcrypt.DefaultCost) if err != nil { panic(err) } u := model.User{ ID: newID(), UserName: "admin", PasswordHash: string(h), RoleID: defaultRole.ID, } if err := db.Create(&u).Error; err != nil { panic(err) } } } func newID() string { id := uuid.Must(uuid.NewV7()).String() return strings.ReplaceAll(id, "-", "") }