Go-Back-Skeleton/database/postgres.go
2024-08-31 19:01:33 +02:00

43 lines
1.2 KiB
Go

// Package database implements postgres connection and queries.
package database
import (
"context"
"database/sql"
"github.com/spf13/viper"
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect/pgdialect"
"github.com/uptrace/bun/driver/pgdriver"
"github.com/uptrace/bun/extra/bundebug"
)
// DBConn returns a postgres connection pool.
func DBConn() (*bun.DB, error) {
viper.SetDefault("db_network", "tcp")
viper.SetDefault("db_addr", "localhost:5432")
viper.SetDefault("db_user", "postgres")
viper.SetDefault("db_password", "postgres")
viper.SetDefault("db_database", "postgres")
dsn := "postgres://" + viper.GetString("db_user") + ":" + viper.GetString("db_password") + "@" + viper.GetString("db_addr") + "/" + viper.GetString("db_database") + "?sslmode=disable"
sqldb := sql.OpenDB(pgdriver.NewConnector(pgdriver.WithDSN(dsn)))
db := bun.NewDB(sqldb, pgdialect.New())
if err := checkConn(db); err != nil {
return nil, err
}
if viper.GetBool("db_debug") {
db.AddQueryHook(bundebug.NewQueryHook(bundebug.WithVerbose(true)))
}
return db, nil
}
func checkConn(db *bun.DB) error {
var n int
return db.NewSelect().ColumnExpr("1").Scan(context.Background(), &n)
}