add router switch and pgx changes

This commit is contained in:
Pedro Pérez 2025-05-29 13:06:48 +02:00
parent 48fe13eecc
commit 941deaf9df
2 changed files with 46 additions and 23 deletions

33
app.go
View File

@ -64,6 +64,9 @@ type Config struct {
// default map[string]DatabaseConfig{}
Databases map[string]DatabaseConfig
// default false
CreateRouter bool
// default false
CreateSSEBroker bool
@ -87,7 +90,7 @@ type App struct {
}
type Paseto struct {
AsymmetricKey paseto.V4AsymmetricSecretKey
SecretKey paseto.V4AsymmetricSecretKey
PublicKey paseto.V4AsymmetricPublicKey
Duration time.Duration
}
@ -101,6 +104,7 @@ func NewApp(config ...Config) *App {
Timezone: "UTC",
Paseto: nil,
Databases: make(map[string]DatabaseConfig),
CreateRouter: false,
CreateSSEBroker: false,
CreateSession: false,
CreateMailer: false,
@ -162,11 +166,11 @@ func NewApp(config ...Config) *App {
var ak paseto.V4AsymmetricSecretKey
var err error
if os.Getenv("PASETO_ASYMMETRIC_KEY") != "" {
slog.Debug("using paseto asymmetric key from env")
ak, err = paseto.NewV4AsymmetricSecretKeyFromHex(os.Getenv("PASETO_ASYMMETRIC_KEY"))
if os.Getenv("PASETO_SECRET_KEY") != "" {
slog.Debug("using paseto secret key from env")
ak, err = paseto.NewV4AsymmetricSecretKeyFromHex(os.Getenv("PASETO_SECRET_KEY"))
if err != nil {
slog.Error("error creating asymmetric key", "error", err)
slog.Error("error creating secret key", "error", err)
ak = paseto.NewV4AsymmetricSecretKey()
}
} else {
@ -187,15 +191,24 @@ func NewApp(config ...Config) *App {
}
cfg.Paseto = &Paseto{
AsymmetricKey: ak,
SecretKey: ak,
PublicKey: pk,
Duration: duration,
}
}
app := &App{
config: cfg,
Router: newRouter(),
app := &App{config: cfg}
if cfg.CreateRouter {
app.Router = newRouter()
}
// Create PGX pools automatically if there are entries in Databases with driver 'pgx'
for dbName, dbConfig := range cfg.Databases {
if dbConfig.DriverName == "pgx" {
slog.Debug("creating pgx pool", "database", dbName)
app.newPGXPool(dbName)
}
}
slog.Info(
@ -215,7 +228,7 @@ func NewApp(config ...Config) *App {
)
if cfg.EnvMode != EnvironmentProduction {
slog.Debug("paseto_assymetric_key", "key", cfg.Paseto.AsymmetricKey.ExportHex())
slog.Debug("paseto_secret_key", "key", cfg.Paseto.SecretKey.ExportHex())
}
if cfg.CreateSSEBroker {

24
pgx.go
View File

@ -20,7 +20,7 @@ var (
pgxMutex sync.RWMutex
)
func (a *App) NewPGXPool(name string) *pgxpool.Pool {
func (a *App) newPGXPool(name string) *pgxpool.Pool {
pgxMutex.Lock()
defer pgxMutex.Unlock()
@ -44,22 +44,32 @@ func (a *App) NewPGXPool(name string) *pgxpool.Pool {
return dbPool
}
func (a *App) GetPGXPool(name string) (*pgxpool.Pool, bool) {
func (a *App) GetPGXPool(name string) *pgxpool.Pool {
pgxMutex.RLock()
defer pgxMutex.RUnlock()
pool, exists := pgxPools[name]
return pool, exists
if !exists {
slog.Error("database connection not found", "name", name)
return nil
}
return pool
}
func (a *App) ClosePGXPools() {
func (a *App) ClosePGXPool(name string) {
pgxMutex.Lock()
defer pgxMutex.Unlock()
for name, pool := range pgxPools {
pool, exists := pgxPools[name]
if !exists {
slog.Error("database connection not found", "name", name)
return
}
pool.Close()
delete(pgxPools, name)
slog.Info("closed database connection", "name", name)
}
}
func NumericToFloat64(n pgtype.Numeric) float64 {
@ -90,7 +100,7 @@ func NumericToInt64(n pgtype.Numeric) int64 {
func FloatToNumeric(number float64, precision int) (value pgtype.Numeric) {
parse := strconv.FormatFloat(number, 'f', precision, 64)
slog.Info("parse", "parse", parse)
slog.Debug("parse", "parse", parse)
if err := value.Scan(parse); err != nil {
slog.Error("error scanning numeric", "error", err)