using DysonNetwork.Shared.Proto; namespace DysonNetwork.Shared.Registry; public class RemoteSubscriptionService(SubscriptionService.SubscriptionServiceClient subscription) { public async Task GetSubscription(Guid accountId, string identifier) { var request = new GetSubscriptionRequest { AccountId = accountId.ToString(), Identifier = identifier }; var response = await subscription.GetSubscriptionAsync(request); return response; } public async Task GetPerkSubscription(Guid accountId) { var request = new GetPerkSubscriptionRequest { AccountId = accountId.ToString() }; var response = await subscription.GetPerkSubscriptionAsync(request); // Return null if subscription is empty (user has no active perk subscription) return string.IsNullOrEmpty(response.Id) ? null : response; } public async Task> GetPerkSubscriptions(List accountIds) { var request = new GetPerkSubscriptionsRequest(); request.AccountIds.AddRange(accountIds.Select(id => id.ToString())); var response = await subscription.GetPerkSubscriptionsAsync(request); // Filter out empty subscriptions (users with no active perk subscription) return response.Subscriptions.Where(s => !string.IsNullOrEmpty(s.Id)).ToList(); } public async Task CreateSubscription( Guid accountId, string identifier, string paymentMethod, string? couponCode = null, bool isFreeTrial = false) { var request = new CreateSubscriptionRequest { AccountId = accountId.ToString(), Identifier = identifier, PaymentMethod = paymentMethod, IsFreeTrial = isFreeTrial }; if (couponCode != null) request.CouponCode = couponCode; var response = await subscription.CreateSubscriptionAsync(request); return response; } public async Task CancelSubscription(Guid accountId, string identifier) { var request = new CancelSubscriptionRequest { AccountId = accountId.ToString(), Identifier = identifier }; var response = await subscription.CancelSubscriptionAsync(request); return response; } }