package models import ( "go_blog/config" "go_blog/pkg/util" "log/slog" "os" "time" "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/schema" ) var DB *gorm.DB func InitDatabase(conf *config.Config) { var dialector gorm.Dialector switch conf.DataBase.Driver { case "mysql": dialector = mysql.Open(conf.DataBase.DSN) case "postgres": dialector = postgres.Open(conf.DataBase.DSN) case "sqlite": dialector = sqlite.Open(conf.DataBase.DSN) default: slog.Error("不支持的数据库驱动", "driver", conf.DataBase.Driver) os.Exit(1) } db, err := gorm.Open(dialector, &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: conf.DataBase.Prefix, }, }) if err != nil { slog.Error("数据库连接失败", "error", err) os.Exit(1) } else { slog.Info("数据库连接成功", "driver", conf.DataBase.Driver, "DSN", conf.DataBase.DSN) } DB = db // 自动迁移数据模型 db.AutoMigrate(&Account{}, &Content{}, &Option{}) } type BaseModel struct { ID uint64 `gorm:"primary_key'" json:"id"` CreatedAt time.Time `json:"-"` UpdatedAt time.Time `json:"-"` DeletedAt *time.Time `sql:"index" json:"-"` } // 生成全局唯一ID func (m *BaseModel) BeforeCreate(scope *gorm.DB) error { if m.ID == 0 { m.ID = util.GenSonyFlakeId() } return nil }