Files
omnex/control-plane/api/internal/db/db.go
T
Xor290 76b1412968
ci-api / test (push) Successful in 24m6s
ci-web / test (push) Successful in 13m50s
chore: update
2026-09-20 11:50:02 +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/projects"
"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{},
&demos.Demo{},
&demos.ExternalResource{},
&projects.Project{},
)
}
// SeedExternalPool remplit le pool de ressources externes (idempotent).
func SeedExternalPool(gdb *gorm.DB) error {
return demos.SeedPool(gdb)
}