package main import ( "context" "feedsystem_video_go/internal/config" "feedsystem_video_go/internal/db" apphttp "feedsystem_video_go/internal/http" rediscache "feedsystem_video_go/internal/middleware/redis" "log" "strconv" "time" ) func main() { // Load config log.Printf("Loading config from configs/config.yaml") cfg, err := config.Load("configs/config.yaml") if err != nil { log.Fatalf("Failed to load config: %v", err) } // Connect database //log.Printf("Database config: %v", cfg.Database) sqlDB, err := db.NewDB(cfg.Database) if err != nil { log.Fatalf("Failed to connect database: %v", err) } if err := db.AutoMigrate(sqlDB); err != nil { log.Fatalf("Failed to auto migrate database: %v", err) } defer db.CloseDB(sqlDB) // Connect redis (optional, used for caching) cache, err := rediscache.NewFromEnv() if err != nil { log.Printf("Redis config error (cache disabled): %v", err) cache = nil } else { pingCtx, cancel := context.WithTimeout(context.Background(), 300*time.Millisecond) defer cancel() if err := cache.Ping(pingCtx); err != nil { log.Printf("Redis not available (cache disabled): %v", err) _ = cache.Close() cache = nil } else { defer cache.Close() log.Printf("Redis connected (cache enabled)") } } // Set router r := apphttp.SetRouter(sqlDB, cache) log.Printf("Server is running on port %d", cfg.Server.Port) if err := r.Run(":" + strconv.Itoa(cfg.Server.Port)); err != nil { log.Fatalf("Failed to run server: %v", err) } }