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(db *gorm.DB) { panicHelper(db.AutoMigrate(&User{})) var user User err := db.First(&user).Error if errors.Is(err, gorm.ErrRecordNotFound) { newAdmin := User{Name: "admin"} panicHelper(newAdmin.GenerateFromPassword([]byte("123456"))) db.Create(&newAdmin) } } 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 m { db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) panicHelper(err) migrate(db) sqlDB, err := db.DB() panicHelper(err) panicHelper(sqlDB.Close()) } 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{}) } panicHelper(err) slog.Info("setup gorm ok") }