Files
go_blog/models/database.go
2025-09-18 17:58:19 +08:00

75 lines
1.5 KiB
Go

/*
@Time : 2020/6/28 21:46
@Author : xuyiqing
@File : init.py
*/
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
// 3. 自动迁移数据模型
db.AutoMigrate(&Account{})
db.AutoMigrate(&Content{})
// if err := db.AutoMigrate(&models.Article{}, &models.User{}); err != nil {
// panic("数据库迁移失败: " + err.Error())
// }
}
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
}