2025-05-17 11:36:26 -04:00

225 lines
5.8 KiB
Go

// internal/config/config.go
package config
import (
"os"
"strings"
"github.com/joho/godotenv"
)
// Config almacena la configuración de la aplicación
type Config struct {
// Database settings
DBHost string
DBPort string
DBUser string
DBPassword string
DBName string
// Kafka settings
KafkaBrokers []string
KafkaConsumerGroupID string
KafkaInputTopic string
KafkaTopicEstado string
KafkaTopicAnular string
KafkaResultTopic string
KafkaDLQTopic string
// SOAP settings
SoapServiceURL string
// Email settings
SMTPHost string
SMTPPort string
SMTPUser string
SMTPPass string
NotifyEmail string
// Logging settings
LogDir string
LogFilename string
LogMaxSize int
LogMaxBackups int
LogMaxAge int
LogCompress bool
// App settings
ServerPort string
MaxRetries int
WorkerCount int
}
// LoadConfig carga la configuración desde variables de entorno o archivo .env
func LoadConfig() (*Config, error) {
// Intentar cargar .env si existe
godotenv.Load()
return &Config{
// Database settings
DBHost: getEnv("DB_HOST", "localhost"),
DBPort: getEnv("DB_PORT", "5432"),
DBUser: getEnv("DB_USER", "postgres"),
DBPassword: getEnv("DB_PASSWORD", "postgres"),
DBName: getEnv("DB_NAME", "facturacion"),
// Kafka settings
KafkaBrokers: strings.Split(getEnv("KAFKA_BOOTSTRAP_SERVERS", "localhost:9092"), ","),
KafkaConsumerGroupID: getEnv("KAFKA_CONSUMER_GROUP_ID", "facturacion-consumer"),
KafkaInputTopic: getEnv("KAFKA_INPUT_TOPIC", "FACTURACION"),
KafkaTopicEstado: getEnv("KAFKA_TOPIC_ESTADO", "FACTURACION_ESTADO"),
KafkaTopicAnular: getEnv("KAFKA_TOPIC_ANULAR", "FACTURACION_ANULAR"),
KafkaResultTopic: getEnv("KAFKA_RESULT_TOPIC", "FACTURACION_RESULTADOS"),
KafkaDLQTopic: getEnv("KAFKA_DLQ_TOPIC", "FACTURACION_DLQ"),
// SOAP settings
SoapServiceURL: getEnv("SOAP_SERVICE_URL", "http://siat.servicio.gob.bo/facturacion-service"),
// Email settings
SMTPHost: getEnv("SMTP_HOST", ""),
SMTPPort: getEnv("SMTP_PORT", ""),
SMTPUser: getEnv("SMTP_USER", ""),
SMTPPass: getEnv("SMTP_PASS", ""),
NotifyEmail: getEnv("NOTIFY_EMAIL", ""),
// Logging settings
LogDir: getEnv("LOG_DIR", "./logs"),
LogFilename: getEnv("LOG_FILENAME", "consumer.log"),
LogMaxSize: 10, // MB
LogMaxBackups: 5,
LogMaxAge: 30, // días
LogCompress: true,
// App settings
ServerPort: getEnv("SERVER_PORT", "7778"),
MaxRetries: 3,
WorkerCount: 10,
}, nil
}
// getEnv obtiene valor de variable de entorno con valor por defecto
func getEnv(key, defaultValue string) string {
value := os.Getenv(key)
if value == "" {
return defaultValue
}
return value
}
//package config
//
//import (
// "context"
// "encoding/json"
// "encoding/xml"
// "errors"
// "fmt"
// "os"
// "path/filepath"
// "strconv"
// "strings"
// "sync"
// "sync/atomic"
// "time"
//
// "github.com/joho/godotenv"
//)
//
//// Config almacena la configuración de la aplicación
//type Config struct {
// // Database settings
// DBHost string
// DBPort string
// DBUser string
// DBPassword string
// DBName string
//
// // Kafka settings
// KafkaBrokers []string
// KafkaConsumerGroupID string
// KafkaInputTopic string
// KafkaTopicEstado string
// KafkaTopicAnular string
// KafkaResultTopic string
// KafkaDLQTopic string
//
// // SOAP settings
// SoapServiceURL string
//
// // Email settings
// SMTPHost string
// SMTPPort string
// SMTPUser string
// SMTPPass string
// NotifyEmail string
//
// // Logging settings
// LogDir string
// LogFilename string
// LogMaxSize int
// LogMaxBackups int
// LogMaxAge int
// LogCompress bool
//
// // App settings
// ServerPort string
// MaxRetries int
// WorkerCount int
//}
//
//// LoadConfig carga la configuración desde variables de entorno o archivo .env
//func LoadConfig() (*Config, error) {
// // Intentar cargar .env si existe
// godotenv.Load()
//
// return &Config{
// // Database settings
// DBHost: getEnv("DB_HOST", "localhost"),
// DBPort: getEnv("DB_PORT", "5432"),
// DBUser: getEnv("DB_USER", "postgres"),
// DBPassword: getEnv("DB_PASSWORD", "postgres"),
// DBName: getEnv("DB_NAME", "facturacion"),
//
// // Kafka settings
// KafkaBrokers: strings.Split(getEnv("KAFKA_BOOTSTRAP_SERVERS", "localhost:9092"), ","),
// KafkaConsumerGroupID: getEnv("KAFKA_CONSUMER_GROUP_ID", "facturacion-consumer"),
// KafkaInputTopic: getEnv("KAFKA_INPUT_TOPIC", "FACTURACION"),
// KafkaTopicEstado: getEnv("KAFKA_TOPIC_ESTADO", "FACTURACION_ESTADO"),
// KafkaTopicAnular: getEnv("KAFKA_TOPIC_ANULAR", "FACTURACION_ANULAR"),
// KafkaResultTopic: getEnv("KAFKA_RESULT_TOPIC", "FACTURACION_RESULTADOS"),
// KafkaDLQTopic: getEnv("KAFKA_DLQ_TOPIC", "FACTURACION_DLQ"),
//
// // SOAP settings
// SoapServiceURL: getEnv("SOAP_SERVICE_URL", "http://siat.servicio.gob.bo/facturacion-service"),
//
// // Email settings
// SMTPHost: getEnv("SMTP_HOST", ""),
// SMTPPort: getEnv("SMTP_PORT", ""),
// SMTPUser: getEnv("SMTP_USER", ""),
// SMTPPass: getEnv("SMTP_PASS", ""),
// NotifyEmail: getEnv("NOTIFY_EMAIL", ""),
//
// // Logging settings
// LogDir: getEnv("LOG_DIR", "./logs"),
// LogFilename: getEnv("LOG_FILENAME", "consumer.log"),
// LogMaxSize: 1, // MB
// LogMaxBackups: 5,
// LogMaxAge: 30, // días
// LogCompress: true,
//
// // App settings
// ServerPort: getEnv("SERVER_PORT", "7778"),
// MaxRetries: 3,
// WorkerCount: 10,
// }, nil
//}
//
//// getEnv obtiene valor de variable de entorno con valor por defecto
//func getEnv(key, defaultValue string) string {
// value := os.Getenv(key)
// if value == "" {
// return defaultValue
// }
// return value
//}