refactor(router): move Router type to interface
This commit is contained in:
@@ -6,7 +6,7 @@ import (
|
||||
"forge.capytal.company/capytalcode/project-comicverse/router"
|
||||
)
|
||||
|
||||
func Routes() *router.Router {
|
||||
func Routes() router.Router {
|
||||
r := router.NewRouter()
|
||||
r.Handle("/colors", &Colors{})
|
||||
r.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"forge.capytal.company/capytalcode/project-comicverse/router/rerrors"
|
||||
)
|
||||
|
||||
func Routes(logger *slog.Logger) *router.Router {
|
||||
func Routes(logger *slog.Logger) router.Router {
|
||||
r := router.NewRouter()
|
||||
|
||||
mErrors := rerrors.NewErrorMiddleware(ErrorPage{}.Component, logger)
|
||||
|
||||
@@ -7,22 +7,29 @@ import (
|
||||
"forge.capytal.company/capytalcode/project-comicverse/router/middleware"
|
||||
)
|
||||
|
||||
type Router struct {
|
||||
type Router interface {
|
||||
Handle(pattern string, handler http.Handler)
|
||||
HandleFunc(pattern string, handler http.HandlerFunc)
|
||||
Use(middleware middleware.Middleware)
|
||||
ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
type defaultRouter struct {
|
||||
mux *http.ServeMux
|
||||
middlewares []middleware.Middleware
|
||||
handlers map[string]http.Handler
|
||||
}
|
||||
|
||||
func NewRouter(mux ...*http.ServeMux) *Router {
|
||||
return &Router{
|
||||
func NewRouter(mux ...*http.ServeMux) Router {
|
||||
return &defaultRouter{
|
||||
http.NewServeMux(),
|
||||
[]middleware.Middleware{},
|
||||
map[string]http.Handler{},
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Router) Handle(p string, h http.Handler) {
|
||||
if sr, ok := h.(*Router); ok {
|
||||
func (r *defaultRouter) Handle(p string, h http.Handler) {
|
||||
if sr, ok := h.(*defaultRouter); ok {
|
||||
for sp, sh := range sr.handlers {
|
||||
wh := sh
|
||||
if len(sr.middlewares) > 0 {
|
||||
@@ -35,11 +42,11 @@ func (r *Router) Handle(p string, h http.Handler) {
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Router) HandleFunc(p string, hf http.HandlerFunc) {
|
||||
func (r *defaultRouter) HandleFunc(p string, hf http.HandlerFunc) {
|
||||
r.handle(p, hf)
|
||||
}
|
||||
|
||||
func (r Router) handle(p string, h http.Handler) {
|
||||
func (r defaultRouter) handle(p string, h http.Handler) {
|
||||
if len(r.middlewares) > 0 {
|
||||
h = r.wrapMiddlewares(r.middlewares, h)
|
||||
}
|
||||
@@ -47,15 +54,15 @@ func (r Router) handle(p string, h http.Handler) {
|
||||
r.mux.Handle(p, h)
|
||||
}
|
||||
|
||||
func (r *Router) Use(m middleware.Middleware) {
|
||||
func (r *defaultRouter) Use(m middleware.Middleware) {
|
||||
r.middlewares = append(r.middlewares, m)
|
||||
}
|
||||
|
||||
func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
func (r *defaultRouter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
r.mux.ServeHTTP(w, req)
|
||||
}
|
||||
|
||||
func (r Router) wrapMiddlewares(ms []middleware.Middleware, h http.Handler) http.Handler {
|
||||
func (r defaultRouter) wrapMiddlewares(ms []middleware.Middleware, h http.Handler) http.Handler {
|
||||
hf := h
|
||||
for _, m := range ms {
|
||||
hf = m(hf)
|
||||
|
||||
Reference in New Issue
Block a user