Files
futur-web-app/server/internal/database/postgresql.go
2025-11-03 12:24:01 +02:00

65 lines
1.4 KiB
Go

// internal/database/postgresql.go
package database
import (
"fmt"
"log"
"time"
"go-server/internal/config"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
type PostgresConfig struct {
Host string
Port string
User string
Password string
DBName string
SSLMode string
}
func NewPostgresConfig() PostgresConfig {
cfg, err := config.LoadConfig()
if err != nil {
log.Fatalf("Failed to load postgres config: %v", err)
}
return PostgresConfig{
Host: cfg.Database.Host,
Port: cfg.Database.Port,
User: cfg.Database.User,
Password: cfg.Database.Password,
DBName: cfg.Database.Name,
SSLMode: cfg.Database.SSLMode,
}
}
func NewPostgresConnection(config PostgresConfig) (*gorm.DB, error) {
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=%s",
config.Host, config.User, config.Password, config.DBName, config.Port, config.SSLMode)
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
PrepareStmt: true,
SkipDefaultTransaction: true,
// Logger can be enabled if needed for debugging
// Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
return nil, fmt.Errorf("failed to connect to database: %w", err)
}
// Configure database/sql connection pool
sqlDB, err := db.DB()
if err == nil {
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(50)
sqlDB.SetConnMaxLifetime(60 * time.Minute)
sqlDB.SetConnMaxIdleTime(10 * time.Minute)
}
return db, nil
}