This commit is contained in:
Mark Bailey 2025-01-01 23:18:59 -05:00
parent 36aca5b8ba
commit 1d679d8d45
5 changed files with 46 additions and 30 deletions

View File

@ -29,7 +29,7 @@ type Controller struct {
Ctx IControllerCtx 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 return nil
} }

View File

@ -15,8 +15,6 @@ import (
"git.markbailey.dev/cerbervs/ptpp/util" "git.markbailey.dev/cerbervs/ptpp/util"
) )
var sess session.IManager
type IRouter interface { type IRouter interface {
RegisterRoutes() http.Handler RegisterRoutes() http.Handler
} }
@ -30,7 +28,6 @@ type Route struct {
type Router struct { type Router struct {
Mux *http.ServeMux Mux *http.ServeMux
Middleware *[]middleware.Func Middleware *[]middleware.Func
BaseRoute Route
BasePath string BasePath string
SubRouters []*Router SubRouters []*Router
Routes []Route Routes []Route
@ -42,19 +39,20 @@ var (
mux *http.ServeMux mux *http.ServeMux
muxOnce sync.Once muxOnce sync.Once
fsOnce 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} ctx := controller.ControllerCtx{RouterCtx: rtr}
c := route.Controller.Init(sess, database.ChooseDB(), logger.NewCompositeLogger(), ctx) c := route.Controller.Init(sess, database.ChooseDB(), logger.NewCompositeLogger(), ctx)
mux.Handle("GET "+fullPath, handler.HandlerFunc(c.Get)) r.Mux.Handle("GET "+fullPath, handler.HandlerFunc(c.Get))
mux.Handle("OPTIONS "+fullPath, handler.HandlerFunc(c.Options)) r.Mux.Handle("OPTIONS "+fullPath, handler.HandlerFunc(c.Options))
mux.Handle("TRACE "+fullPath, handler.HandlerFunc(c.Trace)) r.Mux.Handle("TRACE "+fullPath, handler.HandlerFunc(c.Trace))
mux.Handle("PUT "+fullPath, handler.HandlerFunc(c.Put)) r.Mux.Handle("PUT "+fullPath, handler.HandlerFunc(c.Put))
mux.Handle("DELETE "+fullPath, handler.HandlerFunc(c.Delete)) r.Mux.Handle("DELETE "+fullPath, handler.HandlerFunc(c.Delete))
mux.Handle("POST "+fullPath, handler.HandlerFunc(c.Post)) r.Mux.Handle("POST "+fullPath, handler.HandlerFunc(c.Post))
mux.Handle("PATCH "+fullPath, handler.HandlerFunc(c.Patch)) r.Mux.Handle("PATCH "+fullPath, handler.HandlerFunc(c.Patch))
mux.Handle("CONNECT "+fullPath, handler.HandlerFunc(c.Connect)) r.Mux.Handle("CONNECT "+fullPath, handler.HandlerFunc(c.Connect))
} }
func (r *Router) RegisterRoutes() http.Handler { func (r *Router) RegisterRoutes() http.Handler {
@ -66,13 +64,15 @@ func (r *Router) RegisterRoutes() http.Handler {
r.Mux = http.NewServeMux() r.Mux = http.NewServeMux()
} }
for _, subRouter := range r.SubRouters { for _, route := range r.Routes {
r.Mux.Handle(subRouter.BasePath, subRouter.RegisterRoutes()) r.HandleAllRequestMethods(route, r.BasePath+route.Path)
} }
r.Mux.Handle(r.BasePath+r.BaseRoute.Path, handler.HandlerFunc(r.BaseRoute.Controller.Get)) for _, subRouter := range r.SubRouters {
for _, route := range r.Routes { r.Mux.Handle(
r.HandleAllRequestMethods(route, r.BasePath+route.Path, r.Mux) "GET "+r.BasePath+subRouter.BasePath,
http.StripPrefix(subRouter.BasePath, subRouter.RegisterRoutes()),
)
} }
if r.Middleware != nil { if r.Middleware != nil {
@ -95,7 +95,7 @@ type RouteMapping struct {
} }
func (r *Router) GetFlatRouteList() []RouteMapping { func (r *Router) GetFlatRouteList() []RouteMapping {
routes := []RouteMapping{{Path: r.BasePath, Name: r.BaseRoute.Name}} routes := []RouteMapping{}
for _, route := range r.Routes { for _, route := range r.Routes {
routes = append(routes, RouteMapping{Path: r.BasePath + route.Path, Name: route.Name}) routes = append(routes, RouteMapping{Path: r.BasePath + route.Path, Name: route.Name})
} }

View File

@ -18,8 +18,8 @@ func NewRouter() *Router {
rtrinst = &Router{ rtrinst = &Router{
Mux: nil, Mux: nil,
BasePath: "/", BasePath: "/",
BaseRoute: Route{Controller: shared.HomePageController{}, Path: "", Name: "app.index"},
Routes: []Route{ Routes: []Route{
{Controller: shared.HomePageController{}, Path: "", Name: "app.index"},
{Controller: shared.SignUpHandler{}, Path: "sign-up", Name: "app.user.sign_up"}, {Controller: shared.SignUpHandler{}, Path: "sign-up", Name: "app.user.sign_up"},
{Controller: shared.SignInHandler{}, Path: "sign-in", Name: "app.user.sign_in"}, {Controller: shared.SignInHandler{}, Path: "sign-in", Name: "app.user.sign_in"},
{Controller: shared.SignOutHandler{}, Path: "sign-out", Name: "app.user.sign_out"}, {Controller: shared.SignOutHandler{}, Path: "sign-out", Name: "app.user.sign_out"},
@ -28,9 +28,9 @@ func NewRouter() *Router {
SubRouters: []*Router{ SubRouters: []*Router{
{ {
Mux: nil, Mux: nil,
BasePath: "/admin/", BasePath: "admin/",
BaseRoute: Route{Controller: admin.IndexHandler{}, Path: "", Name: "app.admin.index"},
Routes: []Route{ Routes: []Route{
{Controller: admin.IndexHandler{}, Path: "", Name: "app.admin.index"},
{Controller: admin.IndexHandler{}, Path: "butt", Name: "app.admin.butt"}, {Controller: admin.IndexHandler{}, Path: "butt", Name: "app.admin.butt"},
}, },
SubRouters: nil, SubRouters: nil,

View File

@ -1,14 +1,17 @@
package main package main
import ( import (
"git.markbailey.dev/cerbervs/ptpp/app" "fmt"
"git.markbailey.dev/cerbervs/ptpp/app/routing"
"git.markbailey.dev/cerbervs/ptpp/app/server"
"net/http" "net/http"
"os" "os"
"strconv" "strconv"
"time" "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" _ "git.markbailey.dev/cerbervs/ptpp/app/session"
) )
@ -19,9 +22,22 @@ func main() {
devPort = 8080 devPort = 8080
) )
logger := logger.NewCompositeLogger()
r := routing.NewRouter() 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 var port int
if os.Getenv("HTMX_APP_ENV") == "production" { if os.Getenv("HTMX_APP_ENV") == "production" {
port = prodPort port = prodPort

View File

@ -17,7 +17,7 @@ type HomePageController struct {
controller.Controller 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.Logger = l
c.Db = d c.Db = d
c.Session = s c.Session = s