// 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 //}