From 1d679d8d455fc5137014133da986a4d780cf3997 Mon Sep 17 00:00:00 2001 From: Mark Bailey Date: Wed, 1 Jan 2025 23:18:59 -0500 Subject: [PATCH] WIP --- app/controller/controller.go | 2 +- app/routing/router.go | 36 ++++++++++++++++++------------------ app/routing/routes.go | 12 ++++++------ cmd/main.go | 24 ++++++++++++++++++++---- handlers/shared/homepage.go | 2 +- 5 files changed, 46 insertions(+), 30 deletions(-) diff --git a/app/controller/controller.go b/app/controller/controller.go index ed44cd7..d34e20f 100644 --- a/app/controller/controller.go +++ b/app/controller/controller.go @@ -29,7 +29,7 @@ type Controller struct { Ctx IControllerCtx } -func (c Controller) Init(s session.IManager, d database.IDB, l logger.ILogger, ctx IControllerCtx) IController { +func (c *Controller) Init(s session.IManager, d database.IDB, l logger.ILogger, ctx IControllerCtx) IController { return nil } diff --git a/app/routing/router.go b/app/routing/router.go index 9749cd4..cfd4918 100644 --- a/app/routing/router.go +++ b/app/routing/router.go @@ -15,8 +15,6 @@ import ( "git.markbailey.dev/cerbervs/ptpp/util" ) -var sess session.IManager - type IRouter interface { RegisterRoutes() http.Handler } @@ -30,7 +28,6 @@ type Route struct { type Router struct { Mux *http.ServeMux Middleware *[]middleware.Func - BaseRoute Route BasePath string SubRouters []*Router Routes []Route @@ -42,19 +39,20 @@ var ( mux *http.ServeMux muxOnce sync.Once fsOnce sync.Once + sess session.IManager ) -func (r *Router) HandleAllRequestMethods(route Route, fullPath string, mux *http.ServeMux) { +func (r *Router) HandleAllRequestMethods(route Route, fullPath string) { ctx := controller.ControllerCtx{RouterCtx: rtr} c := route.Controller.Init(sess, database.ChooseDB(), logger.NewCompositeLogger(), ctx) - mux.Handle("GET "+fullPath, handler.HandlerFunc(c.Get)) - mux.Handle("OPTIONS "+fullPath, handler.HandlerFunc(c.Options)) - mux.Handle("TRACE "+fullPath, handler.HandlerFunc(c.Trace)) - mux.Handle("PUT "+fullPath, handler.HandlerFunc(c.Put)) - mux.Handle("DELETE "+fullPath, handler.HandlerFunc(c.Delete)) - mux.Handle("POST "+fullPath, handler.HandlerFunc(c.Post)) - mux.Handle("PATCH "+fullPath, handler.HandlerFunc(c.Patch)) - mux.Handle("CONNECT "+fullPath, handler.HandlerFunc(c.Connect)) + r.Mux.Handle("GET "+fullPath, handler.HandlerFunc(c.Get)) + r.Mux.Handle("OPTIONS "+fullPath, handler.HandlerFunc(c.Options)) + r.Mux.Handle("TRACE "+fullPath, handler.HandlerFunc(c.Trace)) + r.Mux.Handle("PUT "+fullPath, handler.HandlerFunc(c.Put)) + r.Mux.Handle("DELETE "+fullPath, handler.HandlerFunc(c.Delete)) + r.Mux.Handle("POST "+fullPath, handler.HandlerFunc(c.Post)) + r.Mux.Handle("PATCH "+fullPath, handler.HandlerFunc(c.Patch)) + r.Mux.Handle("CONNECT "+fullPath, handler.HandlerFunc(c.Connect)) } func (r *Router) RegisterRoutes() http.Handler { @@ -66,13 +64,15 @@ func (r *Router) RegisterRoutes() http.Handler { r.Mux = http.NewServeMux() } - for _, subRouter := range r.SubRouters { - r.Mux.Handle(subRouter.BasePath, subRouter.RegisterRoutes()) + for _, route := range r.Routes { + r.HandleAllRequestMethods(route, r.BasePath+route.Path) } - r.Mux.Handle(r.BasePath+r.BaseRoute.Path, handler.HandlerFunc(r.BaseRoute.Controller.Get)) - for _, route := range r.Routes { - r.HandleAllRequestMethods(route, r.BasePath+route.Path, r.Mux) + for _, subRouter := range r.SubRouters { + r.Mux.Handle( + "GET "+r.BasePath+subRouter.BasePath, + http.StripPrefix(subRouter.BasePath, subRouter.RegisterRoutes()), + ) } if r.Middleware != nil { @@ -95,7 +95,7 @@ type RouteMapping struct { } func (r *Router) GetFlatRouteList() []RouteMapping { - routes := []RouteMapping{{Path: r.BasePath, Name: r.BaseRoute.Name}} + routes := []RouteMapping{} for _, route := range r.Routes { routes = append(routes, RouteMapping{Path: r.BasePath + route.Path, Name: route.Name}) } diff --git a/app/routing/routes.go b/app/routing/routes.go index e8efa33..9e5d59a 100644 --- a/app/routing/routes.go +++ b/app/routing/routes.go @@ -16,10 +16,10 @@ var ( func NewRouter() *Router { rtrinstOnce.Do(func() { rtrinst = &Router{ - Mux: nil, - BasePath: "/", - BaseRoute: Route{Controller: shared.HomePageController{}, Path: "", Name: "app.index"}, + Mux: nil, + BasePath: "/", Routes: []Route{ + {Controller: shared.HomePageController{}, Path: "", Name: "app.index"}, {Controller: shared.SignUpHandler{}, Path: "sign-up", Name: "app.user.sign_up"}, {Controller: shared.SignInHandler{}, Path: "sign-in", Name: "app.user.sign_in"}, {Controller: shared.SignOutHandler{}, Path: "sign-out", Name: "app.user.sign_out"}, @@ -27,10 +27,10 @@ func NewRouter() *Router { }, SubRouters: []*Router{ { - Mux: nil, - BasePath: "/admin/", - BaseRoute: Route{Controller: admin.IndexHandler{}, Path: "", Name: "app.admin.index"}, + Mux: nil, + BasePath: "admin/", Routes: []Route{ + {Controller: admin.IndexHandler{}, Path: "", Name: "app.admin.index"}, {Controller: admin.IndexHandler{}, Path: "butt", Name: "app.admin.butt"}, }, SubRouters: nil, diff --git a/cmd/main.go b/cmd/main.go index 8d0b026..4bf4997 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -1,14 +1,17 @@ package main import ( - "git.markbailey.dev/cerbervs/ptpp/app" - "git.markbailey.dev/cerbervs/ptpp/app/routing" - "git.markbailey.dev/cerbervs/ptpp/app/server" + "fmt" "net/http" "os" "strconv" "time" + "git.markbailey.dev/cerbervs/ptpp/app" + "git.markbailey.dev/cerbervs/ptpp/app/routing" + "git.markbailey.dev/cerbervs/ptpp/app/server" + "git.markbailey.dev/cerbervs/ptpp/lib/logger" + _ "git.markbailey.dev/cerbervs/ptpp/app/session" ) @@ -19,8 +22,21 @@ func main() { devPort = 8080 ) + logger := logger.NewCompositeLogger() + r := routing.NewRouter() - mux := r.RegisterRoutes() + mux := r.RegisterRoutes() + + rl := r.GetFlatRouteList() + for _, route := range rl { + path, err := r.GetRouteByName(route.Name) + if err != nil { + logger.Error(fmt.Errorf(fmt.Sprintf("Error getting route by name: %s", route.Name))) + } + logger.Info(fmt.Sprintf("Name: %s, Path: %s", route.Name, path)) + } + + logger.Info(fmt.Sprintf("%+v", mux)) var port int if os.Getenv("HTMX_APP_ENV") == "production" { diff --git a/handlers/shared/homepage.go b/handlers/shared/homepage.go index e10665b..a1b9fed 100644 --- a/handlers/shared/homepage.go +++ b/handlers/shared/homepage.go @@ -17,7 +17,7 @@ type HomePageController struct { controller.Controller } -func (c HomePageController) Init(s session.IManager, d database.IDB, l logger.ILogger, ctx controller.IControllerCtx) controller.IController { +func (c *HomePageController) Init(s session.IManager, d database.IDB, l logger.ILogger, ctx controller.IControllerCtx) controller.IController { c.Logger = l c.Db = d c.Session = s