Files
BoostAI/Backend/internal/database/postgres.go
2026-05-25 17:05:06 +01:00

66 lines
1.1 KiB
Go

// Path: Backend/internal/database/postgres.go
package database
import (
"context"
"time"
"boostai-backend/db"
"github.com/jackc/pgx/v5/pgxpool"
"github.com/jackc/pgx/v5/stdlib"
"github.com/pressly/goose/v3"
)
type DB struct {
Pool *pgxpool.Pool
}
func NewPostgres(databaseURL string) (*DB, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
config, err := pgxpool.ParseConfig(databaseURL)
if err != nil {
return nil, err
}
config.MaxConns = 25
config.MinConns = 5
config.MaxConnLifetime = time.Hour
config.MaxConnIdleTime = 30 * time.Minute
pool, err := pgxpool.NewWithConfig(ctx, config)
if err != nil {
return nil, err
}
if err := pool.Ping(ctx); err != nil {
pool.Close()
return nil, err
}
return &DB{Pool: pool}, nil
}
func (d *DB) Migrate() error {
sqlDB := stdlib.OpenDBFromPool(d.Pool)
goose.SetBaseFS(db.Migrations)
if err := goose.SetDialect("postgres"); err != nil {
return err
}
return goose.Up(sqlDB, "migrations")
}
func (d *DB) Close() {
d.Pool.Close()
}
func (d *DB) Health(ctx context.Context) error {
return d.Pool.Ping(ctx)
}