package apiimp import ( "os" "github.com/go-chi/chi/v5" "github.com/tech/sendico/notification/interface/middleware" "github.com/tech/sendico/pkg/api/routers" "github.com/tech/sendico/pkg/api/routers/health" "github.com/tech/sendico/pkg/db/organization" "github.com/tech/sendico/pkg/messaging" notifications "github.com/tech/sendico/pkg/messaging/notifications/processor" "github.com/tech/sendico/pkg/mlogger" "go.uber.org/zap" ) type Middleware struct { logger mlogger.Logger router *chi.Mux apiEndpoint string health routers.Health messaging routers.Messaging } func (mw *Middleware) Consumer(processor notifications.EnvelopeProcessor) error { return mw.messaging.Consumer(processor) } func (mw *Middleware) Producer() messaging.Producer { return mw.messaging.Producer() } func (mw *Middleware) Finish() { mw.messaging.Finish() mw.health.Finish() } func (mw *Middleware) SetStatus(status health.ServiceStatus) { mw.health.SetStatus(status) } func CreateMiddleware(logger mlogger.Logger, db organization.DB, router *chi.Mux, config *middleware.Config, debug bool) (*Middleware, error) { p := &Middleware{ logger: logger.Named("middleware"), router: router, apiEndpoint: os.Getenv(config.EndPointEnv), } p.logger.Info("Set endpoint", zap.String("endpoint", p.apiEndpoint)) var err error if p.messaging, err = routers.NewMessagingRouter(logger, &config.Messaging); err != nil { p.logger.Error("Failed to create messaging router", zap.Error(err)) return nil, err } if p.health, err = routers.NewHealthRouter(p.logger, p.router, p.apiEndpoint); err != nil { p.logger.Error("Failed to create healthcheck router", zap.Error(err), zap.String("api_endpoint", p.apiEndpoint)) return nil, err } return p, nil }