using Stripe; namespace JobTrackerApi.Services; public interface IStripeBillingGateway { Task CreateCheckoutAsync(string secretKey, Stripe.Checkout.SessionCreateOptions options, CancellationToken cancellationToken); Task CreatePortalAsync(string secretKey, Stripe.BillingPortal.SessionCreateOptions options, CancellationToken cancellationToken); Event ConstructEvent(string json, string signature, string webhookSecret); Task GetSubscriptionAsync(string secretKey, string subscriptionId, CancellationToken cancellationToken); } public sealed class StripeBillingGateway : IStripeBillingGateway { public Task CreateCheckoutAsync( string secretKey, Stripe.Checkout.SessionCreateOptions options, CancellationToken cancellationToken) => new Stripe.Checkout.SessionService(new StripeClient(secretKey)) .CreateAsync(options, cancellationToken: cancellationToken); public Task CreatePortalAsync( string secretKey, Stripe.BillingPortal.SessionCreateOptions options, CancellationToken cancellationToken) => new Stripe.BillingPortal.SessionService(new StripeClient(secretKey)) .CreateAsync(options, cancellationToken: cancellationToken); public Event ConstructEvent(string json, string signature, string webhookSecret) => EventUtility.ConstructEvent(json, signature, webhookSecret); public Task GetSubscriptionAsync(string secretKey, string subscriptionId, CancellationToken cancellationToken) => new SubscriptionService(new StripeClient(secretKey)) .GetAsync(subscriptionId, cancellationToken: cancellationToken); }