// Path /cmd/api // File: main.go package main import ( "context" "fmt" "net/http" "os" "os/signal" "syscall" "time" templateHelpers "synlotto-website/internal/helpers/template" "synlotto-website/internal/http/middleware" "synlotto-website/internal/http/routes" "synlotto-website/internal/platform/bootstrap" ) func main() { app, err := bootstrap.Load("internal\\platform\\config\\config.json") if err != nil { panic(fmt.Errorf("bootstrap: %w", err)) } templateHelpers.InitSessionManager(app.SessionManager) templateHelpers.InitSiteMeta(app.Config.Site.SiteName, app.Config.Site.CopyrightYearStart, 0) // Global middleware that depends on *App app.Router.Use(middleware.AuthMiddleware()) app.Router.Use(middleware.RememberMiddleware(app)) // Route registration lives OUTSIDE bootstrap routes.RegisterHomeRoutes(app) routes.RegisterAccountRoutes(app) routes.RegisterAdminRoutes(app) routes.RegisterSyndicateRoutes(app) routes.RegisterStatisticsRoutes(app) srv := app.Server go func() { if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { panic(err) } }() fmt.Printf("Server running on http://%s\n", srv.Addr) stop := make(chan os.Signal, 1) signal.Notify(stop, os.Interrupt, syscall.SIGTERM) <-stop fmt.Println("Shutting down...") ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() _ = srv.Shutdown(ctx) }