refactor(router): move Router type to interface

This commit is contained in:
Guz
2024-10-21 14:57:53 -03:00
parent c12db37dc2
commit 27f29990f5
3 changed files with 19 additions and 12 deletions

View File

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

View File

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

View File

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