Files
MonkeyCode/backend/pkg/store/entdb.go
2025-06-25 15:56:22 +08:00

65 lines
1.7 KiB
Go

package store
import (
dql "database/sql"
"log/slog"
"time"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/sql"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
_ "github.com/lib/pq"
"github.com/chaitin/MonkeyCode/backend/config"
"github.com/chaitin/MonkeyCode/backend/db"
_ "github.com/chaitin/MonkeyCode/backend/db/runtime"
)
func NewEntDB(cfg *config.Config, logger *slog.Logger) (*db.Client, error) {
w, err := sql.Open(dialect.Postgres, cfg.Database.Master)
if err != nil {
return nil, err
}
w.DB().SetMaxOpenConns(cfg.Database.MaxOpenConns)
w.DB().SetMaxIdleConns(cfg.Database.MaxIdleConns)
w.DB().SetConnMaxLifetime(time.Duration(cfg.Database.ConnMaxLifetime) * time.Minute)
r, err := sql.Open(dialect.Postgres, cfg.Database.Slave)
if err != nil {
return nil, err
}
r.DB().SetMaxOpenConns(cfg.Database.MaxOpenConns)
r.DB().SetMaxIdleConns(cfg.Database.MaxIdleConns)
r.DB().SetConnMaxLifetime(time.Duration(cfg.Database.ConnMaxLifetime) * time.Minute)
c := db.NewClient(db.Driver(NewMultiDriver(r, w, logger)))
if cfg.Debug {
c = c.Debug()
}
return c, nil
}
func MigrateSQL(cfg *config.Config, logger *slog.Logger) error {
db, err := dql.Open("postgres", cfg.Database.Master)
if err != nil {
return err
}
driver, err := postgres.WithInstance(db, &postgres.Config{})
if err != nil {
return err
}
m, err := migrate.NewWithDatabaseInstance(
"file://migration",
"postgres", driver)
if err != nil {
return err
}
if err := m.Up(); err != nil {
logger.With("component", "db").With("err", err).Warn("migrate db failed")
}
return nil
}