package subscriptionaddons import ( "context" "net/http" apiv3 "github.com/openmeterio/openmeter/api/v3" "github.com/openmeterio/openmeter/api/v3/apierrors" "github.com/openmeterio/openmeter/api/v3/request" subscriptionworkflow "github.com/openmeterio/openmeter/openmeter/subscription/workflow" "github.com/openmeterio/openmeter/pkg/framework/commonhttp" "github.com/openmeterio/openmeter/pkg/framework/transport/httptransport" "github.com/openmeterio/openmeter/pkg/models" ) type ( CreateSubscriptionAddonRequest = struct { SubscriptionID models.NamespacedID AddonInput subscriptionworkflow.AddAddonWorkflowInput } CreateSubscriptionAddonResponse = apiv3.SubscriptionAddon CreateSubscriptionAddonParams = string CreateSubscriptionAddonHandler = httptransport.HandlerWithArgs[CreateSubscriptionAddonRequest, CreateSubscriptionAddonResponse, CreateSubscriptionAddonParams] ) func (h *handler) CreateSubscriptionAddon() CreateSubscriptionAddonHandler { return httptransport.NewHandlerWithArgs( func(ctx context.Context, r *http.Request, subscriptionID CreateSubscriptionAddonParams) (CreateSubscriptionAddonRequest, error) { body := apiv3.CreateSubscriptionAddonRequest{} if err := request.ParseBody(r, &body); err != nil { return CreateSubscriptionAddonRequest{}, err } ns, err := h.resolveNamespace(ctx) if err != nil { return CreateSubscriptionAddonRequest{}, err } addonInput, err := FromAPICreateSubscriptionAddonRequest(body) if err != nil { return CreateSubscriptionAddonRequest{}, err } return CreateSubscriptionAddonRequest{ SubscriptionID: models.NamespacedID{ Namespace: ns, ID: subscriptionID, }, AddonInput: addonInput, }, nil }, func(ctx context.Context, request CreateSubscriptionAddonRequest) (CreateSubscriptionAddonResponse, error) { view, added, err := h.subscriptionWorkflowService.AddAddon(ctx, request.SubscriptionID, request.AddonInput) if err != nil { return CreateSubscriptionAddonResponse{}, err } return toAPISubscriptionAddon(view, added) }, commonhttp.JSONResponseEncoderWithStatus[CreateSubscriptionAddonResponse](http.StatusCreated), httptransport.AppendOptions( h.options, httptransport.WithOperationName("create-subscription-addon"), httptransport.WithErrorEncoder(apierrors.GenericErrorEncoder()), )..., ) }