64 lines
1.6 KiB
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())
|
|
}
|