package httpdriver import ( "context" "errors" "log/slog" "net/http" "github.com/openmeterio/openmeter/openmeter/namespace/namespacedriver" "github.com/openmeterio/openmeter/openmeter/productcatalog/addon" "github.com/openmeterio/openmeter/openmeter/subscription" subscriptionaddon "github.com/openmeterio/openmeter/openmeter/subscription/addon" subscriptionworkflow "github.com/openmeterio/openmeter/openmeter/subscription/workflow" "github.com/openmeterio/openmeter/pkg/framework/commonhttp" "github.com/openmeterio/openmeter/pkg/framework/transport/httptransport" ) type Handler interface { CreateSubscriptionAddon() CreateSubscriptionAddonHandler ListSubscriptionAddons() ListSubscriptionAddonsHandler GetSubscriptionAddon() GetSubscriptionAddonHandler UpdateSubscriptionAddon() UpdateSubscriptionAddonHandler } type HandlerConfig struct { SubscriptionAddonService subscriptionaddon.Service SubscriptionWorkflowService subscriptionworkflow.Service SubscriptionService subscription.Service AddonService addon.Service NamespaceDecoder namespacedriver.NamespaceDecoder Logger *slog.Logger } func NewHandler(config HandlerConfig, options ...httptransport.HandlerOption) Handler { return &handler{ HandlerConfig: config, Options: options, } } type handler struct { HandlerConfig Options []httptransport.HandlerOption } func (h *handler) resolveNamespace(ctx context.Context) (string, error) { ns, ok := h.NamespaceDecoder.GetNamespace(ctx) if !ok { return "", commonhttp.NewHTTPError(http.StatusInternalServerError, errors.New("internal server error")) } return ns, nil }