You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
760B

  1. package httpserver
  2. import (
  3. "context"
  4. "log/slog"
  5. "net/http"
  6. "time"
  7. "github.com/go-chi/chi/v5"
  8. chimw "github.com/go-chi/chi/v5/middleware"
  9. appmw "qctextbuilder/internal/httpserver/middleware"
  10. )
  11. type Server struct {
  12. httpServer *http.Server
  13. }
  14. func New(addr string, logger *slog.Logger, registerRoutes func(r chi.Router)) *Server {
  15. r := chi.NewRouter()
  16. r.Use(chimw.RequestID)
  17. r.Use(chimw.Recoverer)
  18. r.Use(chimw.Timeout(30 * time.Second))
  19. r.Use(appmw.RequestLogger(logger))
  20. registerRoutes(r)
  21. return &Server{
  22. httpServer: &http.Server{
  23. Addr: addr,
  24. Handler: r,
  25. },
  26. }
  27. }
  28. func (s *Server) Run() error {
  29. return s.httpServer.ListenAndServe()
  30. }
  31. func (s *Server) Shutdown(ctx context.Context) error {
  32. return s.httpServer.Shutdown(ctx)
  33. }