package main import ( "fmt" "log" "path/filepath" "github.com/simpletodoapp/go-todo-app/internal/api" "github.com/simpletodoapp/go-todo-app/internal/config" "github.com/simpletodoapp/go-todo-app/internal/database" ) func main() { // Load configuration cfg, err := config.LoadConfig() if err != nil { log.Fatalf("Failed to load config: %v", err) } // Connect to database db, err := database.NewDatabase(cfg) if err != nil { log.Fatalf("Failed to initialize database: %v", err) } // Run migrations migrationRunner := database.NewMigrationRunner(db, cfg) migrationsPath := filepath.Join(".", "migrations") if err := migrationRunner.RunMigrations(migrationsPath); err != nil { log.Fatalf("Failed to run migrations: %v", err) } // Setup router router := api.SetupRouter(cfg, db) // Start server serverAddr := fmt.Sprintf(":%s", cfg.ServerPort) log.Printf("Starting server on %s", serverAddr) if err := router.Run(serverAddr); err != nil { log.Fatalf("Failed to start server: %v", err) } }