48 lines
1.2 KiB
Go

// package db serves as a database wrapper for adonis
package db
import (
"context"
"fmt"
"os"
"time"
"github.com/jackc/pgx/v5/pgxpool"
)
type Database struct {
conn *pgxpool.Pool
}
func NewDatabase(username, password, hostname, database string) *Database {
// pool ensures thread safety
url := url(username, password, hostname, database)
dbpool, err := pgxpool.New(context.Background(), url)
for err != nil {
dbpool, err = pgxpool.New(context.Background(), url)
fmt.Fprintf(os.Stderr, "Unable to create connection pool: %v\nRetrying...\n", err)
//os.Exit(1)
time.Sleep(1 * time.Second)
}
var greeting string
err = dbpool.QueryRow(context.Background(), "select 'Hello, world!'").Scan(&greeting)
if err != nil {
fmt.Fprintf(os.Stderr, "QueryRow failed: %v\n", err)
os.Exit(1)
}
fmt.Println(greeting)
return &Database{conn: dbpool}
}
// this function assumes default port because i cant be bothered
func url(username, password, hostname, database string) string {
// generate url based on passed params
// safe to disable SSL as comms occur over docker network
return fmt.Sprintf("postgresql://%s:%s@%s/%s?sslmode=disable",
username, password, hostname, database)
}