github.com/joao-fontenele/go-url-shortener@v1.3.4/pkg/api/router/router.go (about)

     1  package router
     2  
     3  import (
     4  	"github.com/fasthttp/router"
     5  	"github.com/joao-fontenele/go-url-shortener/pkg/api/handler"
     6  	"github.com/joao-fontenele/go-url-shortener/pkg/api/middleware"
     7  	"github.com/joao-fontenele/go-url-shortener/pkg/shortener"
     8  	"github.com/prometheus/client_golang/prometheus/promhttp"
     9  	"github.com/valyala/fasthttp"
    10  	"github.com/valyala/fasthttp/fasthttpadaptor"
    11  )
    12  
    13  // New configures routes and it's handlers, and return it
    14  func New(linkService shortener.LinkService) *router.Router {
    15  	router := router.New()
    16  
    17  	internalHandler := &handler.InternalHandler{}
    18  	router.GET(
    19  		"/internal/status",
    20  		middleware.Logger(
    21  			middleware.Metrics(internalHandler.StatusHandler),
    22  		),
    23  	)
    24  	router.GET(
    25  		"/internal/metrics",
    26  		middleware.Logger(
    27  			fasthttpadaptor.NewFastHTTPHandler(promhttp.Handler()),
    28  		),
    29  	)
    30  
    31  	linkHandler := &handler.ShortenerHandler{LinkService: linkService}
    32  	router.OPTIONS("/links", middleware.Cors(func(ctx *fasthttp.RequestCtx) {
    33  		return
    34  	}))
    35  	router.POST(
    36  		"/links",
    37  		middleware.Logger(
    38  			middleware.Metrics(
    39  				middleware.Cors(linkHandler.NewLink),
    40  			),
    41  		),
    42  	)
    43  	router.GET(
    44  		"/links",
    45  		middleware.Logger(
    46  			middleware.Metrics(
    47  				middleware.Cors(linkHandler.List),
    48  			),
    49  		),
    50  	)
    51  	router.GET(
    52  		"/{slug}",
    53  		middleware.Logger(
    54  			middleware.Metrics(
    55  				middleware.Cors(linkHandler.Redirect),
    56  			),
    57  		),
    58  	)
    59  
    60  	return router
    61  }