package config import ( "fmt" "log" "os" "github.com/go-redis/redis/v8" "gorm.io/driver/mysql" "gorm.io/gorm" ) type Config struct { DBHost string DBPort string DBUser string DBPassword string DBName string RedisAddr string RedisPass string RedisDB int ServerPort string } func LoadConfig() *Config { return &Config{ DBHost: os.Getenv("DB_HOST"), DBPort: os.Getenv("DB_PORT"), DBUser: os.Getenv("DB_USER"), DBPassword: os.Getenv("DB_PASSWORD"), DBName: os.Getenv("DB_NAME"), RedisAddr: os.Getenv("REDIS_ADDR"), RedisPass: os.Getenv("REDIS_PASS"), RedisDB: 0, ServerPort: os.Getenv("SERVER_PORT"), } } func InitDB(cfg *Config) *gorm.DB { dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", cfg.DBUser, cfg.DBPassword, cfg.DBHost, cfg.DBPort, cfg.DBName) db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { log.Fatalf("Failed to connect to database: %v", err) } return db } func InitRedis(cfg *Config) *redis.Client { rdb := redis.NewClient(&redis.Options{ Addr: cfg.RedisAddr, Password: cfg.RedisPass, DB: cfg.RedisDB, }) _, err := rdb.Ping(rdb.Context()).Result() if err != nil { log.Fatalf("Failed to connect to Redis: %v", err) } return rdb }