Files
inp2025/workflows/authServer.go

64 lines
1.6 KiB
Go

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())
}