github.com/gudimz/urlShortener@v0.0.0-20230129195305-c8ee33059a67/internal/server/server.go (about) 1 package server 2 3 import ( 4 "github.com/gudimz/urlShortener/internal/shorten" 5 "github.com/gudimz/urlShortener/pkg/logging" 6 "github.com/labstack/echo/v4" 7 "github.com/labstack/echo/v4/middleware" 8 "net/http" 9 ) 10 11 type Server struct { 12 e *echo.Echo 13 logger *logging.Logger 14 shorten *shorten.Service 15 } 16 17 func NewServer(shorten *shorten.Service, logger *logging.Logger) *Server { 18 srv := &Server{ 19 e: echo.New(), 20 logger: logger, 21 shorten: shorten, 22 } 23 srv.NewRouter() 24 25 return srv 26 27 } 28 29 func (s *Server) NewRouter() { 30 s.e.HideBanner = true 31 s.e.Validator = NewValidator() 32 33 s.e.Pre(middleware.RemoveTrailingSlash()) 34 s.e.Use(middleware.RequestID()) 35 36 s.RegisterRoutes() 37 } 38 39 func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) { 40 s.e.ServeHTTP(writer, request) 41 } 42 43 func (s *Server) RegisterRoutes() { 44 handler := NewHandler(s.shorten, s.logger) 45 46 s.e.GET("/:short_url", handler.Redirect) 47 48 g := s.e.Group("/api/v1") 49 g.GET("/:short_url", handler.GetShorten) 50 g.POST("/create", handler.CreateShorten) 51 g.DELETE("/delete/:short_url", handler.DeleteShorten) 52 }