heritage-api/mysql/tables-mysql.go

90 lines
1.8 KiB
Go

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, "-", "")
}