package workflows import ( "context" "net/http" "gitea.konchin.com/ytshih/inp2025/game/implements" "gitea.konchin.com/ytshih/inp2025/game/server/middlewares" "gitea.konchin.com/ytshih/inp2025/game/server/wordle" "gitea.konchin.com/ytshih/inp2025/game/tracing" "github.com/uptrace/bunrouter" "go.uber.org/zap" ) type ShutdownFunc = func() func WordleServer(addr string) ShutdownFunc { handlers := wordle.NewHandlers() middlewareHandlers := middlewares.NewHandlers( implements.NewBunDatabase(nil)) router := bunrouter.New() apiGroup := router.NewGroup("/api"). Use(middlewareHandlers.ErrorHandler) apiGroup.GET("/state", handlers.WSGetState) apiGroup.POST("/guess", handlers.WSPostGuess) server := &http.Server{ Addr: addr, Handler: http.Handler(router), } go func() { if err := server.ListenAndServe(); err != http.ErrServerClosed { tracing.Logger.Error("wordle server failed", zap.Error(err)) } }() return func() { if err := server.Shutdown(context.Background()); err != nil { tracing.Logger.Error("failed to shutdown wordle server", zap.Error(err)) } } }