Files
go_blog/models/database.go

75 lines
1.5 KiB
Go
Raw Normal View History

2024-01-10 16:05:15 +08:00
/*
@Time : 2020/6/28 21:46
@Author : xuyiqing
@File : init.py
*/
package models
import (
2025-04-15 16:47:00 +08:00
"go_blog/config"
2024-01-10 16:05:15 +08:00
"go_blog/pkg/util"
2025-05-21 20:38:25 +08:00
"log/slog"
"os"
2024-01-10 16:05:15 +08:00
"time"
2024-07-04 19:15:44 +08:00
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
2024-01-23 18:29:13 +08:00
"gorm.io/gorm"
2024-07-04 19:15:44 +08:00
"gorm.io/gorm/schema"
2024-01-10 16:05:15 +08:00
)
var DB *gorm.DB
2025-04-15 16:47:00 +08:00
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)
}
2025-04-15 16:47:00 +08:00
db, err := gorm.Open(dialector, &gorm.Config{
2024-07-04 19:15:44 +08:00
NamingStrategy: schema.NamingStrategy{
TablePrefix: conf.DataBase.Prefix,
},
})
2025-05-21 20:38:25 +08:00
2024-01-10 16:05:15 +08:00
if err != nil {
2025-05-21 20:38:25 +08:00
slog.Error("数据库连接失败", "error", err)
os.Exit(1)
2025-09-18 17:58:19 +08:00
} else {
slog.Info("数据库连接成功", "driver", conf.DataBase.Driver, "DSN", conf.DataBase.DSN)
2024-01-10 16:05:15 +08:00
}
2025-05-22 13:56:57 +08:00
2025-04-15 16:47:00 +08:00
DB = db
// 3. 自动迁移数据模型
2025-05-21 20:38:25 +08:00
db.AutoMigrate(&Account{})
db.AutoMigrate(&Content{})
2025-04-15 16:47:00 +08:00
// if err := db.AutoMigrate(&models.Article{}, &models.User{}); err != nil {
// panic("数据库迁移失败: " + err.Error())
// }
2024-01-10 16:05:15 +08:00
}
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
2024-07-04 19:15:44 +08:00
func (m *BaseModel) BeforeCreate(scope *gorm.DB) error {
2024-01-10 16:05:15 +08:00
if m.ID == 0 {
m.ID = util.GenSonyFlakeId()
}
return nil
}