mirror of
https://github.com/chaitin/MonkeyCode.git
synced 2026-02-02 23:03:57 +08:00
65 lines
1.7 KiB
Go
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
|
|
}
|