package config import ( "log" "time" "github.com/gofiber/session/v2" pgprovider "github.com/gofiber/session/v2/provider/postgres" ) type SessionConfig struct { *session.Session } // Setup configura el almacén de sesiones en PostgreSQL con expiración de 1 año. // Si el provider PostgreSQL falla (credenciales, red, etc.), usa memoria como fallback. func (s *SessionConfig) Setup(db DatabaseDriver) error { port := int64(db.Port) if port == 0 { port = 5432 } provider, err := pgprovider.New(pgprovider.Config{ Host: db.Host, Port: port, Username: db.Username, Password: db.Password, Database: db.DBName, TableName: "sessions", MaxOpenConns: 20, MaxIdleConns: 10, ConnMaxLifetime: 5 * time.Minute, }) if err != nil { log.Printf("[SESSION] PostgreSQL provider error, usando memoria: %v", err) s.Session = session.New(session.Config{ Expiration: 365 * 24 * time.Hour, }) return nil } s.Session = session.New(session.Config{ Expiration: 365 * 24 * time.Hour, Provider: provider, }) log.Println("[SESSION] Sesiones persistentes en PostgreSQL (tabla: sessions)") return nil }