package workflows import ( "context" "database/sql" "fmt" "net/http" "gitea.konchin.com/ytshih/inp2025/handlers/auth" "gitea.konchin.com/ytshih/inp2025/middlewares" "gitea.konchin.com/ytshih/inp2025/utils" "github.com/spf13/viper" "github.com/uptrace/bun" "github.com/uptrace/bun/dialect/sqlitedialect" "github.com/uptrace/bun/driver/sqliteshim" "github.com/uptrace/bunrouter" "go.uber.org/zap" ) func AuthServer() { sqldb, err := sql.Open(sqliteshim.ShimName, "file::memory:?cache=shared") if err != nil { panic(fmt.Errorf("failed to init sqlite, %w", err)) } db := bun.NewDB(sqldb, sqlitedialect.New()) if err := utils.InitDB(context.Background(), db); err != nil { panic(fmt.Errorf("failed to init db schema, %w", err)) } logger := zap.NewExample() defer logger.Sync() undo := zap.ReplaceGlobals(logger) defer undo() authHandlers := auth.NewHandlers(db) middlewareHandlers := middlewares.NewHandlers(db) router := bunrouter.New() authGroup := router.NewGroup("/auth"). Use(middlewareHandlers.ErrorHandler) authGroup.POST("/register", authHandlers.PostRegister) authGroup.POST("/login", middlewareHandlers.Auth(authHandlers.PostLogin)) authGroup.POST("/logout", middlewareHandlers.Auth(authHandlers.PostLogout)) server := &http.Server{ Addr: viper.GetString("listen-addr"), Handler: http.Handler(router), } defer func() { sqldb.Close() if err := server.Shutdown(context.Background()); err != nil { panic(fmt.Errorf("failed to shutdown wordle server, %w", err)) } }() fmt.Printf("server up\n") fmt.Println(server.ListenAndServe()) }