48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
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))
|
|
}
|
|
}
|
|
}
|