package orm import ( "fmt" "log/slog" "platform/pkg/env" "platform/web/queries" "gorm.io/driver/postgres" "gorm.io/gen" "gorm.io/gen/field" "gorm.io/gorm" "gorm.io/gorm/schema" ) var DB *gorm.DB func Init() { // 连接数据库 dsn := fmt.Sprintf( "host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Shanghai", env.DbHost, env.DbUserName, env.DbPassword, env.DbName, env.DbPort, ) db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ NamingStrategy: schema.NamingStrategy{ SingularTable: true, }, }) if err != nil { slog.Error("gorm 初始化数据库失败:", slog.Any("err", err)) panic(err) } // 连接池 conn, err := db.DB() if err != nil { slog.Error("gorm 初始化数据库失败:", slog.Any("err", err)) panic(err) } conn.SetMaxIdleConns(10) conn.SetMaxOpenConns(100) // 初始化查询工具 queries.SetDefault(db) DB = db } func Exit() error { if DB != nil { conn, err := DB.DB() if err != nil { return err } return conn.Close() } return nil } type WithAlias interface { Alias() string } func Alias(model WithAlias) func(db gen.Dao) gen.Dao { return func(db gen.Dao) gen.Dao { return db.Unscoped().Where(field.NewBool(model.Alias(), "deleted_at").IsNull()) } }