48 lines
863 B
Go
48 lines
863 B
Go
package http
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"example.com/m/internal/handlers"
|
|
"example.com/m/internal/middleware"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type Server struct {
|
|
address string
|
|
|
|
engine *gin.Engine
|
|
|
|
linksHandler *handlers.LinksHandler
|
|
}
|
|
|
|
func NewServer(address string, lh *handlers.LinksHandler) *Server {
|
|
engine := gin.New()
|
|
|
|
engine.Use(gin.Logger())
|
|
engine.Use(gin.Recovery())
|
|
engine.Use(middleware.SecurityHeaders())
|
|
|
|
rl := middleware.NewRateLimiter(10, 20)
|
|
engine.Use(rl.Middleware())
|
|
|
|
return &Server{
|
|
address: address,
|
|
engine: engine,
|
|
linksHandler: lh,
|
|
}
|
|
}
|
|
|
|
func (s *Server) Start() error {
|
|
s.routes()
|
|
|
|
fmt.Printf("starting server on %s\n", s.address)
|
|
|
|
if err := s.engine.Run(s.address); err != nil && err != http.ErrServerClosed {
|
|
return fmt.Errorf("error occurred while starting the server: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|