This commit is contained in:
jlimolina 2026-08-28 21:10:02 +02:00
parent 3991237685
commit a01050bf85
46 changed files with 3636 additions and 652 deletions

View file

@ -3,6 +3,8 @@ package db
import (
"context"
"fmt"
"os"
"strconv"
"time"
"github.com/jackc/pgx/v5/pgxpool"
@ -16,10 +18,11 @@ func Connect(databaseURL string) error {
return fmt.Errorf("failed to parse database URL: %w", err)
}
config.MaxConns = 25
config.MinConns = 5
config.MaxConnLifetime = time.Hour
config.MaxConnIdleTime = 30 * time.Minute
config.MaxConns = int32(getEnvInt("DB_MAX_CONNS", 25))
config.MinConns = int32(getEnvInt("DB_MIN_CONNS", 5))
config.MaxConnLifetime = getEnvDuration("DB_MAX_CONN_LIFETIME", time.Hour)
config.MaxConnIdleTime = getEnvDuration("DB_MAX_CONN_IDLE_TIME", 30*time.Minute)
config.HealthCheckPeriod = getEnvDuration("DB_HEALTH_CHECK_PERIOD", time.Minute)
Pool, err = pgxpool.NewWithConfig(context.Background(), config)
if err != nil {
@ -42,3 +45,28 @@ func Close() {
func GetPool() *pgxpool.Pool {
return Pool
}
func HealthCheck(ctx context.Context) error {
if Pool == nil {
return fmt.Errorf("pool not initialized")
}
return Pool.Ping(ctx)
}
func getEnvInt(key string, defaultValue int) int {
if value := os.Getenv(key); value != "" {
if intVal, err := strconv.Atoi(value); err == nil {
return intVal
}
}
return defaultValue
}
func getEnvDuration(key string, defaultValue time.Duration) time.Duration {
if value := os.Getenv(key); value != "" {
if duration, err := time.ParseDuration(value); err == nil {
return duration
}
}
return defaultValue
}