using Hutopy.Web.Features.Memberships.Data; using Hutopy.Web.Features.Memberships.Infrastructure; namespace Hutopy.Web.Features.Memberships.Handlers; [PublicAPI] public record struct CreateMembershipTierRequest( Guid CreatorId, string Name, string Description, decimal Price, string Currency = "CAD"); [PublicAPI] public class CreateMembershipTierEndpoint( MembershipDbContext dbContext, StripeService stripe) : Endpoint { public override void Configure() { Post("/api/membership/tiers"); Options(o => o.WithTags("Memberships")); } public override async Task HandleAsync( CreateMembershipTierRequest req, CancellationToken ct) { var tierId = Guid.NewGuid(); var productId = await stripe.CreateProductAsync( req.CreatorId, tierId, req.Name, req.Currency, req.Price); // Record the new Tier var tier = new Tier { Id = tierId, CreatorId = req.CreatorId, Price = req.Price, Name = req.Name, Description = req.Description, StripeProductId = productId, }; dbContext.Tiers.Add(tier); await dbContext.SaveChangesAsync(ct); await SendOkAsync(tier, ct); } }