package httpdriver import ( "context" "errors" "net/http" "github.com/openmeterio/openmeter/api" subscriptionhttp "github.com/openmeterio/openmeter/openmeter/productcatalog/subscription/http" 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 ( UpdateSubscriptionAddonParams = struct { SubscriptionID string SubscriptionAddonID string } UpdateSubscriptionAddonRequest = struct { WorkflowInput subscriptionworkflow.ChangeAddonQuantityWorkflowInput SubscriptionID models.NamespacedID } UpdateSubscriptionAddonResponse = api.SubscriptionAddon UpdateSubscriptionAddonHandler = httptransport.HandlerWithArgs[UpdateSubscriptionAddonRequest, UpdateSubscriptionAddonResponse, UpdateSubscriptionAddonParams] ) func (h *handler) UpdateSubscriptionAddon() UpdateSubscriptionAddonHandler { return httptransport.NewHandlerWithArgs( func(ctx context.Context, r *http.Request, params UpdateSubscriptionAddonParams) (UpdateSubscriptionAddonRequest, error) { ns, err := h.resolveNamespace(ctx) if err != nil { return UpdateSubscriptionAddonRequest{}, err } var body api.UpdateSubscriptionAddonJSONRequestBody if err := commonhttp.JSONRequestBodyDecoder(r, &body); err != nil { return UpdateSubscriptionAddonRequest{}, err } if body.Timing == nil { return UpdateSubscriptionAddonRequest{}, errors.New("timing is required") } if body.Quantity == nil { return UpdateSubscriptionAddonRequest{}, errors.New("quantity is required") } timing, err := subscriptionhttp.MapAPITimingToTiming(*body.Timing) if err != nil { return UpdateSubscriptionAddonRequest{}, err } return UpdateSubscriptionAddonRequest{ WorkflowInput: subscriptionworkflow.ChangeAddonQuantityWorkflowInput{ SubscriptionAddonID: models.NamespacedID{ Namespace: ns, ID: params.SubscriptionAddonID, }, Quantity: *body.Quantity, Timing: timing, }, SubscriptionID: models.NamespacedID{ Namespace: ns, ID: params.SubscriptionID, }, }, nil }, func(ctx context.Context, request UpdateSubscriptionAddonRequest) (UpdateSubscriptionAddonResponse, error) { view, addon, err := h.SubscriptionWorkflowService.ChangeAddonQuantity(ctx, request.SubscriptionID, request.WorkflowInput) if err != nil { return UpdateSubscriptionAddonResponse{}, err } return MapSubscriptionAddonToResponse(view, addon) }, commonhttp.JSONResponseEncoderWithStatus[UpdateSubscriptionAddonResponse](http.StatusOK), httptransport.AppendOptions( h.Options, httptransport.WithOperationName("updateSubscriptionAddon"), )..., ) }