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 }