package main import ( "context" "log" "net/http" "os" "os/signal" "syscall" "time" "github.com/iwasforcedtobehere/gomeme/internal/server" ) func main() { // Initialize the server srv := server.New() // Setup HTTP server httpServer := &http.Server{ Addr: ":8080", Handler: srv.Routes(), ReadTimeout: 15 * time.Second, WriteTimeout: 15 * time.Second, IdleTimeout: 60 * time.Second, } // Start server in a goroutine go func() { log.Printf("🚀 GoMeme server starting on port 8080...") log.Printf("🎭 Ready to generate some fucking awesome memes!") if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("Server failed to start: %v", err) } }() // Wait for interrupt signal to gracefully shutdown quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit log.Println("🛑 Shutting down server...") // Graceful shutdown with timeout ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() if err := httpServer.Shutdown(ctx); err != nil { log.Fatalf("Server forced to shutdown: %v", err) } log.Println("✅ Server exited") }