Files
omnex/control-plane/api/internal/db/db.go
T
Nuxgrid 6beabfb070
ci-api / test (push) Failing after 11m37s
ci-web / test (push) Successful in 14m39s
chore: finish profile
2026-07-29 14:50:31 +02:00

54 lines
1.3 KiB
Go

// Package db : connexion GORM (PostgreSQL) et migrations.
package db
import (
"fmt"
"time"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"github.com/omnex/control-plane/api/internal/auth"
"github.com/omnex/control-plane/api/internal/demos"
"github.com/omnex/control-plane/api/internal/leads"
"github.com/omnex/control-plane/api/internal/sub"
)
// Open ouvre une connexion GORM vers PostgreSQL et configure le pool.
func Open(dsn string) (*gorm.DB, error) {
gdb, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Warn),
SkipDefaultTransaction: true,
PrepareStmt: true, // requêtes préparées : perf + anti-injection
})
if err != nil {
return nil, fmt.Errorf("ouverture db: %w", err)
}
sqlDB, err := gdb.DB()
if err != nil {
return nil, err
}
sqlDB.SetMaxOpenConns(20)
sqlDB.SetMaxIdleConns(5)
sqlDB.SetConnMaxLifetime(time.Hour)
return gdb, nil
}
// AutoMigrate crée/actualise le schéma des entités du control-plane.
func AutoMigrate(gdb *gorm.DB) error {
return gdb.AutoMigrate(
&auth.User{},
&sub.CodeBuySub{},
&leads.Lead{},
&demos.Demo{},
&demos.ExternalResource{},
)
}
// SeedExternalPool remplit le pool de ressources externes (idempotent).
func SeedExternalPool(gdb *gorm.DB) error {
return demos.SeedPool(gdb)
}