package global import ( "database/sql" "fmt" "time" "electricity_bill_calc/config" "electricity_bill_calc/logger" _ "github.com/lib/pq" sqldblogger "github.com/simukti/sqldb-logger" "github.com/simukti/sqldb-logger/logadapter/zapadapter" "github.com/uptrace/bun" "github.com/uptrace/bun/dialect/pgdialect" ) var ( DB *bun.DB ) func SetupDatabaseConnection() error { var err error connStr := fmt.Sprintf( "host=%s user=%s password=%s dbname=%s port=%d sslmode=disable TimeZone=Asia/Shanghai connect_timeout=0", config.DatabaseSettings.Host, config.DatabaseSettings.User, config.DatabaseSettings.Pass, config.DatabaseSettings.DB, config.DatabaseSettings.Port, ) db, err := sql.Open("postgres", connStr) if err != nil { return err } db = sqldblogger.OpenDriver(connStr, db.Driver(), zapadapter.New(logger.Named("PG"))) DB = bun.NewDB(db, pgdialect.New()) DB.SetMaxIdleConns(config.DatabaseSettings.MaxIdleConns) DB.SetMaxOpenConns(config.DatabaseSettings.MaxOpenConns) DB.SetConnMaxIdleTime(10 * time.Minute) DB.SetConnMaxLifetime(60 * time.Minute) DB.Ping() return nil }