package httpserver import ( "log/slog" "net/http" "warpbox.dev/backend/libs/config" "warpbox.dev/backend/libs/handlers" "warpbox.dev/backend/libs/middleware" "warpbox.dev/backend/libs/services" "warpbox.dev/backend/libs/web" ) func New(cfg config.Config, logger *slog.Logger) (*http.Server, error) { renderer, err := web.NewRenderer(cfg.TemplateDir, cfg.AppName, cfg.BaseURL) if err != nil { return nil, err } uploadService := services.NewUploadService(cfg.MaxUploadSize) app := handlers.NewApp(cfg, logger, renderer, uploadService) router := http.NewServeMux() app.RegisterRoutes(router) handler := middleware.Chain( router, middleware.Recoverer(logger), middleware.RequestID, middleware.SecurityHeaders, middleware.Gzip, middleware.Logger(logger), ) return &http.Server{ Addr: cfg.Addr, Handler: handler, ReadTimeout: cfg.ReadTimeout, WriteTimeout: cfg.WriteTimeout, IdleTimeout: cfg.IdleTimeout, }, nil }