148 lines
3.6 KiB
Go
148 lines
3.6 KiB
Go
package config
|
|
|
|
import (
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// ConfigDefaults permet de construire une config avec des valeurs par défaut (T0038)
|
|
type ConfigDefaults struct {
|
|
appPort *int
|
|
appEnv *string
|
|
jwtSecret *string
|
|
databaseURL *string
|
|
redisURL *string
|
|
corsOrigins []string
|
|
rateLimitLimit *int
|
|
rateLimitWindow *int
|
|
logLevel *string
|
|
logger *zap.Logger
|
|
}
|
|
|
|
// NewConfigDefaults crée un nouveau builder de defaults (T0038)
|
|
func NewConfigDefaults() *ConfigDefaults {
|
|
return &ConfigDefaults{}
|
|
}
|
|
|
|
// WithPort définit le port par défaut (T0038)
|
|
func (b *ConfigDefaults) WithPort(port int) *ConfigDefaults {
|
|
b.appPort = &port
|
|
return b
|
|
}
|
|
|
|
// WithEnv définit l'environnement par défaut (T0038)
|
|
func (b *ConfigDefaults) WithEnv(env string) *ConfigDefaults {
|
|
b.appEnv = &env
|
|
return b
|
|
}
|
|
|
|
// WithJWTSecret définit le secret JWT par défaut (T0038)
|
|
func (b *ConfigDefaults) WithJWTSecret(secret string) *ConfigDefaults {
|
|
b.jwtSecret = &secret
|
|
return b
|
|
}
|
|
|
|
// WithDatabaseURL définit l'URL de la base de données par défaut (T0038)
|
|
func (b *ConfigDefaults) WithDatabaseURL(url string) *ConfigDefaults {
|
|
b.databaseURL = &url
|
|
return b
|
|
}
|
|
|
|
// WithRedisURL définit l'URL Redis par défaut (T0038)
|
|
func (b *ConfigDefaults) WithRedisURL(url string) *ConfigDefaults {
|
|
b.redisURL = &url
|
|
return b
|
|
}
|
|
|
|
// WithCORSOrigins définit les origines CORS par défaut (T0038)
|
|
func (b *ConfigDefaults) WithCORSOrigins(origins []string) *ConfigDefaults {
|
|
b.corsOrigins = origins
|
|
return b
|
|
}
|
|
|
|
// WithRateLimit définit les limites de rate limiting par défaut (T0038)
|
|
func (b *ConfigDefaults) WithRateLimit(limit int, windowSeconds int) *ConfigDefaults {
|
|
b.rateLimitLimit = &limit
|
|
b.rateLimitWindow = &windowSeconds
|
|
return b
|
|
}
|
|
|
|
// WithLogLevel définit le niveau de log par défaut (T0038)
|
|
func (b *ConfigDefaults) WithLogLevel(level string) *ConfigDefaults {
|
|
b.logLevel = &level
|
|
return b
|
|
}
|
|
|
|
// WithLogger définit le logger par défaut (T0038)
|
|
func (b *ConfigDefaults) WithLogger(logger *zap.Logger) *ConfigDefaults {
|
|
b.logger = logger
|
|
return b
|
|
}
|
|
|
|
// Build construit une Config avec les valeurs par défaut (T0038)
|
|
func (b *ConfigDefaults) Build() *Config {
|
|
config := &Config{}
|
|
|
|
if b.appPort != nil {
|
|
config.AppPort = *b.appPort
|
|
}
|
|
// Note: appEnv n'est pas dans Config, mais peut être utilisé ailleurs
|
|
if b.jwtSecret != nil {
|
|
config.JWTSecret = *b.jwtSecret
|
|
}
|
|
if b.databaseURL != nil {
|
|
config.DatabaseURL = *b.databaseURL
|
|
}
|
|
if b.redisURL != nil {
|
|
config.RedisURL = *b.redisURL
|
|
}
|
|
if len(b.corsOrigins) > 0 {
|
|
config.CORSOrigins = b.corsOrigins
|
|
}
|
|
if b.rateLimitLimit != nil {
|
|
config.RateLimitLimit = *b.rateLimitLimit
|
|
}
|
|
if b.rateLimitWindow != nil {
|
|
config.RateLimitWindow = *b.rateLimitWindow
|
|
}
|
|
if b.logLevel != nil {
|
|
config.LogLevel = *b.logLevel
|
|
}
|
|
if b.logger != nil {
|
|
config.Logger = b.logger
|
|
}
|
|
|
|
return config
|
|
}
|
|
|
|
// Merge fusionne les valeurs par défaut avec une config existante (override) (T0038)
|
|
func (b *ConfigDefaults) Merge(config *Config) *Config {
|
|
if b.appPort != nil {
|
|
config.AppPort = *b.appPort
|
|
}
|
|
if b.jwtSecret != nil {
|
|
config.JWTSecret = *b.jwtSecret
|
|
}
|
|
if b.databaseURL != nil {
|
|
config.DatabaseURL = *b.databaseURL
|
|
}
|
|
if b.redisURL != nil {
|
|
config.RedisURL = *b.redisURL
|
|
}
|
|
if len(b.corsOrigins) > 0 {
|
|
config.CORSOrigins = b.corsOrigins
|
|
}
|
|
if b.rateLimitLimit != nil {
|
|
config.RateLimitLimit = *b.rateLimitLimit
|
|
}
|
|
if b.rateLimitWindow != nil {
|
|
config.RateLimitWindow = *b.rateLimitWindow
|
|
}
|
|
if b.logLevel != nil {
|
|
config.LogLevel = *b.logLevel
|
|
}
|
|
if b.logger != nil {
|
|
config.Logger = b.logger
|
|
}
|
|
|
|
return config
|
|
}
|