public IActionResult FetchAllSubscriptions()

in src/AdminSite/Controllers/HomeController.cs [885:995]


    public IActionResult FetchAllSubscriptions()
    {
        var currentUserId = this.userService.GetUserIdFromEmailAddress(this.CurrentUserEmailAddress);

        try
        {
            this.subscriptionService = new SubscriptionService(this.subscriptionRepository, this.planRepository, currentUserId);

            // Step 1: Get all subscriptions from the API
            var subscriptions = this.fulfillApiService.GetAllSubscriptionAsync().GetAwaiter().GetResult();
            foreach (SubscriptionResult subscription in subscriptions)
            {
                var customerUserId = 0;
                var currentSubscription = this.subscriptionService.GetSubscriptionsBySubscriptionId(subscription.Id);

                // Step 2: Check if they Exist in DB - Create if dont exist
                if (currentSubscription.Name == null)
                {
                    // Step 3: Add/Update the Offer
                    Guid OfferId = this.offersRepository.Add(new Offers()
                    {
                        OfferId = subscription.OfferId,
                        OfferName = subscription.OfferId,
                        UserId = currentUserId,
                        CreateDate = DateTime.Now,
                        OfferGuid = Guid.NewGuid(),
                    });

                    // Step 4: Add/Update the Plans. For Unsubscribed Only Add current plan from subscription information
                    if (subscription.SaasSubscriptionStatus == SubscriptionStatusEnum.Unsubscribed)
                    {
                        PlanDetailResultExtension planDetails = new PlanDetailResultExtension
                        {
                            PlanId = subscription.PlanId,
                            DisplayName = subscription.PlanId,
                            Description = "",
                            OfferId = OfferId,
                            PlanGUID = Guid.NewGuid(),
                            IsPerUserPlan = subscription.Quantity > 0,
                        };
                        this.subscriptionService.AddPlanDetailsForSubscription(planDetails);
                    }
                    else
                    {
                        var subscriptionPlanDetail = this.fulfillApiService.GetAllPlansForSubscriptionAsync(subscription.Id).ConfigureAwait(false).GetAwaiter().GetResult();
                        subscriptionPlanDetail.ForEach(x =>
                        {
                            x.OfferId = OfferId;
                            x.PlanGUID = Guid.NewGuid();
                        });
                        this.subscriptionService.AddUpdateAllPlanDetailsForSubscription(subscriptionPlanDetail);
                    }

                    // Step 5: Add/Update the current user from Subscription information
                    customerUserId = this.userService.AddUser(new PartnerDetailViewModel { FullName = subscription.Beneficiary.EmailId, EmailAddress = subscription.Beneficiary.EmailId });
                }

                // Step 6: Add Subscription
                var subscriptionId = this.subscriptionService.AddOrUpdatePartnerSubscriptions(subscription, customerUserId);

                // Step 7: Add Subscription Audit
                if (currentSubscription != null && subscription.SaasSubscriptionStatus.ToString() != currentSubscription.SubscriptionStatus.ToString())
                {
                    this.subscriptionLogRepository.Save(new SubscriptionAuditLogs()
                    {
                        Attribute = $"{Convert.ToString(SubscriptionLogAttributes.Status)}-Refresh",
                        SubscriptionId = subscriptionId,
                        NewValue = subscription.SaasSubscriptionStatus.ToString(),
                        OldValue = currentSubscription.SubscriptionStatus.ToString(),
                        CreateBy = currentUserId,
                        CreateDate = DateTime.Now
                    });
                }
                if (currentSubscription != null && subscription.PlanId != currentSubscription.PlanId)
                {
                    this.subscriptionLogRepository.Save(new SubscriptionAuditLogs()
                    {
                        Attribute = $"{Convert.ToString(SubscriptionLogAttributes.Plan)}-Refresh",
                        SubscriptionId = subscriptionId,
                        NewValue = subscription.PlanId.ToString(),
                        OldValue = currentSubscription.PlanId,
                        CreateBy = currentUserId,
                        CreateDate = DateTime.Now
                    });
                }
                if (currentSubscription != null && subscription.Quantity != currentSubscription.Quantity)
                {
                    this.subscriptionLogRepository.Save(new SubscriptionAuditLogs()
                    {
                        Attribute = $"{Convert.ToString(SubscriptionLogAttributes.Quantity)}-Refresh",
                        SubscriptionId = subscriptionId,
                        NewValue = subscription.Quantity.ToString(),
                        OldValue = currentSubscription.Quantity.ToString(),
                        CreateBy = currentUserId,
                        CreateDate = DateTime.Now
                    });
                }

            }
        }
        catch (Exception ex)
        {
            var errorMessage = $"Message: {ex.Message} ({ex.InnerException})";
            this.logger.LogError(errorMessage);
            applicationLogService.AddApplicationLog(errorMessage).GetAwaiter().GetResult();

            return BadRequest();
        }

        return Ok();
    }