package models import ( "errors" "fmt" "log/slog" ) import ( "gorm.io/driver/postgres" "gorm.io/gorm" ) import ( "auth-server/common" "auth-server/logger" ) var ( DB *gorm.DB err error ) func panicHelper(err error) { if err != nil { panic(err) } } func migrate() { panicHelper(DB.AutoMigrate(&User{})) var user User err := DB.First(&user).Error if errors.Is(err, gorm.ErrRecordNotFound) { newAdmin := User{Name: "admin"} newAdmin.GenerateFromPassword([]byte("123456")) DB.Create(&newAdmin) } panicHelper(DB.AutoMigrate(&ConfigItem{})) var count int64 DB.Model(&ConfigItem{}).Count(&count) if count == 0 { panicHelper(initConfigItem()) } } func SetupGorm(m bool) { slog.Info("setup gorm") dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=disable TimeZone=Asia/Shanghai", common.PostgresConfig.Ip, common.PostgresConfig.Username, common.PostgresConfig.Password, common.PostgresConfig.Name, common.PostgresConfig.Port, ) if common.LoggerConfig.LogLevel == "debug" { DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{ Logger: logger.NewGormLogger(logger.WithGroup("gorm")), }) } else { DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{}) } if err != nil { panic(err) } if m { migrate() } slog.Info("setup gorm ok") }