using Hutopy.Modules.Memberships.Contracts; using Hutopy.Modules.Memberships.Data; namespace Hutopy.Modules.Memberships.Handlers; [PublicAPI] public record struct CreateMembershipTierRequest( Guid CreatorId, string Name, string Description, decimal Price, string Currency = "CAD"); [PublicAPI] public class CreateMembershipTierEndpoint( MembershipsDbContext dbContext, IMembershipTierProcessor membershipTierProcessor) : Endpoint { public override void Configure() { Post("/api/memberships/tiers"); Options(o => o.WithTags("Memberships")); } public override async Task HandleAsync( CreateMembershipTierRequest req, CancellationToken ct) { Guid tierId = Guid.CreateVersion7(); string productId = await membershipTierProcessor.CreateAsync( req.CreatorId, tierId, req.Name, req.Currency, req.Price); // Record the new Tier MembershipTier tier = new() { Id = tierId, CreatorId = req.CreatorId, Price = req.Price, Name = req.Name, Description = req.Description, StripeProductId = productId }; dbContext.MembershipTiers.Add(tier); await dbContext.SaveChangesAsync(ct); await SendOkAsync(tier, ct); } }