package httpserver import ( "errors" "fmt" "log/slog" "net/http" "go.dev.pztrn.name/vikunja-notifier/internal/application" "go.dev.pztrn.name/vikunja-notifier/internal/services/core" ) var ( _ = core.HTTPServer(&httpServer{}) errHTTPServer = errors.New("HTTP server core service") ) type httpServer struct { app *application.Application logger *slog.Logger httpSrv *http.Server httpMux *http.ServeMux middlewares []core.HTTPMiddlewareFunc } // Initialize initializes service. func Initialize(app *application.Application) error { httpSrv := &httpServer{ app: app, } if err := app.RegisterService(httpSrv); err != nil { return fmt.Errorf("%w: %w", errHTTPServer, err) } return nil } func (h *httpServer) Configure() error { h.logger.Debug("Configuring service...") if err := h.configureHTTPServer(); err != nil { return fmt.Errorf("configure: %w", err) } return nil } func (h *httpServer) ConnectDependencies() error { return nil } func (h *httpServer) Initialize() error { h.logger = h.app.NewLogger("service", core.ServiceNameHTTPServer) h.logger.Info("Initializing...") h.middlewares = make([]core.HTTPMiddlewareFunc, 0) h.RegisterMiddleware(h.requestLoggingMiddleware) return nil } func (h *httpServer) Name() string { return core.ServiceNameHTTPServer } func (h *httpServer) LaunchStartupTasks() error { h.logger.Debug("Launching startup tasks...") go h.startHTTPServer() return nil } func (h *httpServer) Shutdown() error { if err := h.stopHTTPServer(); err != nil { return fmt.Errorf("%w: Shutdown: %w", errHTTPServer, err) } return nil }