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  }