44 lines
1.4 KiB
C#
44 lines
1.4 KiB
C#
using Hutopy.Infrastructure.Payments.Stripe.Configuration;
|
|
using Hutopy.Modules.Memberships.Contracts;
|
|
using Microsoft.Extensions.Options;
|
|
using Stripe;
|
|
|
|
namespace Hutopy.Infrastructure.Payments.Stripe.Services;
|
|
|
|
public sealed class MembershipTierProcessor(
|
|
IOptions<StripeOptions> stripeOptions)
|
|
: IMembershipTierProcessor
|
|
{
|
|
public async Task<string> CreateAsync(
|
|
Guid creatorId,
|
|
Guid tierId,
|
|
string productName,
|
|
string currencyCode,
|
|
decimal amount)
|
|
{
|
|
StripeConfiguration.ApiKey = stripeOptions.Value.SecretKey;
|
|
|
|
// Create the product
|
|
ProductService productService = new();
|
|
Product? product = await productService.CreateAsync(
|
|
new ProductCreateOptions
|
|
{
|
|
Name = productName,
|
|
Metadata = { { "creatorId", creatorId.ToString() }, { "tierId", tierId.ToString() } }
|
|
});
|
|
|
|
// Create the price for the product
|
|
PriceService priceService = new();
|
|
await priceService.CreateAsync(
|
|
new PriceCreateOptions
|
|
{
|
|
Product = product.Id,
|
|
UnitAmountDecimal = amount * 100, // Convert amount to cents
|
|
Currency = currencyCode,
|
|
Recurring = new PriceRecurringOptions { Interval = "month" }
|
|
});
|
|
|
|
return product.Id;
|
|
}
|
|
}
|