package httpdriver import ( "context" "fmt" "net/http" "github.com/openmeterio/openmeter/api" subscriptionaddon "github.com/openmeterio/openmeter/openmeter/subscription/addon" "github.com/openmeterio/openmeter/pkg/framework/commonhttp" "github.com/openmeterio/openmeter/pkg/framework/transport/httptransport" "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/slicesx" ) type ( ListSubscriptionAddonsParams = struct { SubscriptionID string } ListSubscriptionAddonsRequest = struct { SubscriptionID models.NamespacedID } ListSubscriptionAddonsResponse = []api.SubscriptionAddon ListSubscriptionAddonsHandler = httptransport.HandlerWithArgs[ListSubscriptionAddonsRequest, ListSubscriptionAddonsResponse, ListSubscriptionAddonsParams] ) func (h *handler) ListSubscriptionAddons() ListSubscriptionAddonsHandler { return httptransport.NewHandlerWithArgs( func(ctx context.Context, r *http.Request, params ListSubscriptionAddonsParams) (ListSubscriptionAddonsRequest, error) { ns, err := h.resolveNamespace(ctx) if err != nil { return ListSubscriptionAddonsRequest{}, fmt.Errorf("failed to resolve namespace: %w", err) } return ListSubscriptionAddonsRequest{ SubscriptionID: models.NamespacedID{ Namespace: ns, ID: params.SubscriptionID, }, }, nil }, func(ctx context.Context, req ListSubscriptionAddonsRequest) (ListSubscriptionAddonsResponse, error) { res, err := h.SubscriptionAddonService.List(ctx, req.SubscriptionID.Namespace, subscriptionaddon.ListSubscriptionAddonsInput{ SubscriptionID: req.SubscriptionID.ID, }) if err != nil { return nil, err } view, err := h.SubscriptionService.GetView(ctx, req.SubscriptionID) if err != nil { return nil, err } return slicesx.MapWithErr(res.Items, func(item subscriptionaddon.SubscriptionAddon) (api.SubscriptionAddon, error) { return MapSubscriptionAddonToResponse(view, item) }) }, commonhttp.JSONResponseEncoderWithStatus[ListSubscriptionAddonsResponse](http.StatusOK), httptransport.AppendOptions( h.Options, httptransport.WithOperationName("listSubscriptionAddons"), )..., ) }