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

View File

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

View File

@ -18,8 +18,8 @@ func NewRouter() *Router {
rtrinst = &Router{
Mux: nil,
BasePath: "/",
BaseRoute: Route{Controller: shared.HomePageController{}, Path: "", Name: "app.index"},
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"},
@ -28,9 +28,9 @@ func NewRouter() *Router {
SubRouters: []*Router{
{
Mux: nil,
BasePath: "/admin/",
BaseRoute: Route{Controller: admin.IndexHandler{}, Path: "", Name: "app.admin.index"},
BasePath: "admin/",
Routes: []Route{
{Controller: admin.IndexHandler{}, Path: "", Name: "app.admin.index"},
{Controller: admin.IndexHandler{}, Path: "butt", Name: "app.admin.butt"},
},
SubRouters: nil,

View File

@ -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,9 +22,22 @@ func main() {
devPort = 8080
)
logger := logger.NewCompositeLogger()
r := routing.NewRouter()
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" {
port = prodPort

View File

@ -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