|
- package httpserver
-
- import (
- "context"
- "log/slog"
- "net/http"
- "time"
-
- "github.com/go-chi/chi/v5"
- chimw "github.com/go-chi/chi/v5/middleware"
-
- appmw "qctextbuilder/internal/httpserver/middleware"
- )
-
- type Server struct {
- httpServer *http.Server
- }
-
- func New(addr string, logger *slog.Logger, registerRoutes func(r chi.Router)) *Server {
- r := chi.NewRouter()
- r.Use(chimw.RequestID)
- r.Use(chimw.Recoverer)
- r.Use(chimw.Timeout(30 * time.Second))
- r.Use(appmw.RequestLogger(logger))
- registerRoutes(r)
-
- return &Server{
- httpServer: &http.Server{
- Addr: addr,
- Handler: r,
- },
- }
- }
-
- func (s *Server) Run() error {
- return s.httpServer.ListenAndServe()
- }
-
- func (s *Server) Shutdown(ctx context.Context) error {
- return s.httpServer.Shutdown(ctx)
- }
|