using Hutopy.Web.Common.Security; using Hutopy.Web.Features.Memberships.Data; using Hutopy.Web.Features.Memberships.Events; namespace Hutopy.Web.Features.Memberships.Handlers; [PublicAPI] public record struct ChangeStripeIdRequest( string StripeAccountId); public class ChangeStripeIdHandler( MembershipDbContext dbContext) : Endpoint { public override void Configure() { Post("/api/membership/stripe-account"); Options(o => o.WithTags("Memberships")); } public override async Task HandleAsync( ChangeStripeIdRequest req, CancellationToken ct) { var creatorId = HttpContext.User.GetUserId(); var creator = await dbContext .Creators .FindAsync( [creatorId], cancellationToken: ct); if (creator is null) { creator = new Creator { Id = creatorId, Name = HttpContext.User.GetAlias() ?? creatorId.ToString(), PortraitUrl = HttpContext.User.GetPortraitUrl() ?? string.Empty }; await dbContext.AddAsync(creator, ct); } creator.StripeAccountId = req.StripeAccountId; await dbContext.SaveChangesAsync(ct); await PublishAsync( new StripeAccountConfigured(creator.Id, creator.StripeAccountId), cancellation: ct); await SendOkAsync(creator.Id, ct); } }