//go:build !dev // +build !dev package dav import ( "context" "fmt" "os" "github.com/jackc/pgx/v5/pgxpool" ) var Service *BaseService func init() { if err := connect(); err != nil { // Don't fatal in test mode - tests will use testdb instead if os.Getenv("GO_TESTING") != "" { return } panic("failed to initialize prod service: " + err.Error()) } } func connect() error { dsn := fmt.Sprintf( "postgres://%s:%s@%s:5432/%s?timezone=UTC&require_auth=scram-sha-256", getEnv("POSTGRES_USER"), getEnv("POSTGRES_PASSWORD"), getEnv("POSTGRES_HOST"), getEnv("POSTGRES_DB"), ) pool, err := pgxpool.New(context.Background(), dsn) if err != nil { return err } Service = newBaseService(pool) return testDB(pool) } func testDB(pool *pgxpool.Pool) error { var n int err := pool.QueryRow(context.Background(), "SELECT 1").Scan(&n) if err != nil || n != 1 { return fmt.Errorf("db test failed: %w", err) } return nil } func getEnv(key string) string { if v := os.Getenv(key); v != "" { return v } // Return empty string instead of fatal error - allows tests to run without prod env vars return "" }