public async getUserSubscriptionsWithProductName()

in src/services/productService.ts [173:234]


    public async getUserSubscriptionsWithProductName(userId: string, searchRequest?: SearchQuery): Promise<Page<Subscription>> {
        if (!userId) {
            throw new Error(`Parameter "userId" not specified.`);
        }
        
        if (userId === Constants.integrationUserId) {
            return new Page();
        }

        const skip = searchRequest && searchRequest.skip || 0;
        const take = searchRequest && searchRequest.take || Constants.defaultPageSize;
        const query = `${userId}/subscriptions?$top=${take}&$skip=${skip}`;

        const result = [];
        const pageOfSubscriptions = await this.apiClient.get<Page<SubscriptionContract>>(query, [await this.apiClient.getPortalHeader("getUserSubscriptions")]);

        const page = new Page<Subscription>();
        page.count = pageOfSubscriptions.count;
        page.nextLink = pageOfSubscriptions.nextLink;
        page.value = result;

        if (!pageOfSubscriptions?.value) {
            return page;
        }

        const subscriptions = pageOfSubscriptions.value;
        const promises = [];

        for (const subscription of subscriptions) {
            const subscriptionModel = new Subscription(subscription);

            if (subscription.scope.endsWith("/apis")) {
                subscriptionModel.productName = "All APIs";
            } else
                if (subscription.scope.includes("/apis/")) {
                    const apiName = Utils.getResourceName("apis", subscription.scope);

                    const apiPromise = this.apiClient
                        .get<ApiContract>(`/apis/${apiName}`, [Utils.getIsUserResourceHeader(), await this.apiClient.getPortalHeader("getApi")])
                        .then(api => {
                            subscriptionModel.productName = `API: ${api.name}`;
                        }).catch(error => console.log(`Get API error: ${error.message}`));

                    promises.push(apiPromise);
                } else {
                    const productName = Utils.getResourceName("products", subscription.scope);

                    const productPromise = this.apiClient
                        .get<ProductContract>(`/products/${productName}`, [Utils.getIsUserResourceHeader(), await this.apiClient.getPortalHeader("getProduct")])
                        .then(product => {
                            subscriptionModel.productName = product.name;
                        }).catch(error => console.log(`Get product error: ${error.message}`));

                    promises.push(productPromise);
                }
            result.push(subscriptionModel);
        }

        await Promise.all(promises);

        return page;
    }