niki/pkg/database/db.go

46 lines
928 B
Go

package database
import (
"database/sql"
"fmt"
"time"
)
type DSNBuilder interface {
BuildDSN(config Config) string
}
type Database struct {
DB *sql.DB
Dialect string
}
func Connect(config Config) (*Database, error) {
dsnB, DSNErr := GetDSNBuilder(config.Driver)
if DSNErr != nil {
return nil, DSNErr
}
dsn := dsnB.BuildDSN(config)
conn, err := sql.Open(config.Driver, dsn)
if err != nil {
return nil, fmt.Errorf("error opening database: %w", err)
}
if err := conn.Ping(); err != nil {
return nil, fmt.Errorf("failed to connect to database: %w", err)
}
conn.SetMaxIdleConns(config.MaxIdleConns)
conn.SetMaxOpenConns(config.MaxOpenConns)
conn.SetConnMaxLifetime(time.Duration(config.ConnMaxLifetime) * time.Second)
fmt.Println("Database connection established successfully")
return &Database{DB: conn, Dialect: config.Driver}, err
}
func Close(conn *sql.DB) error {
return conn.Close()
}