WIP
This commit is contained in:
parent
36aca5b8ba
commit
1d679d8d45
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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})
|
||||||
}
|
}
|
||||||
|
@ -16,10 +16,10 @@ var (
|
|||||||
func NewRouter() *Router {
|
func NewRouter() *Router {
|
||||||
rtrinstOnce.Do(func() {
|
rtrinstOnce.Do(func() {
|
||||||
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"},
|
||||||
@ -27,10 +27,10 @@ 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,
|
||||||
|
24
cmd/main.go
24
cmd/main.go
@ -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,8 +22,21 @@ 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" {
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user