From ffd8f43f3d66edc559deaa1c963665d5b861156c Mon Sep 17 00:00:00 2001 From: Karl Carriere Date: Wed, 18 Dec 2024 08:43:43 -0500 Subject: [PATCH] Added ChangeStripeId.cs --- .../Memberships/Handlers/ChangeStripeId.cs | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/Web/Features/Memberships/Handlers/ChangeStripeId.cs diff --git a/src/Web/Features/Memberships/Handlers/ChangeStripeId.cs b/src/Web/Features/Memberships/Handlers/ChangeStripeId.cs new file mode 100644 index 0000000..7008fee --- /dev/null +++ b/src/Web/Features/Memberships/Handlers/ChangeStripeId.cs @@ -0,0 +1,52 @@ +using Hutopy.Web.Common.Security; +using Hutopy.Web.Features.Memberships.Data; +using Hutopy.Web.Features.Memberships.Infrastructure; + +namespace Hutopy.Web.Features.Memberships.Handlers; + +[PublicAPI] +public record struct ChangeStripeIdRequest( + string StripeAccountId); + +public class ChangeStripeIdHandler( + MembershipDbContext dbContext, + StripeService stripeService) + : Endpoint +{ + public override void Configure() + { + Post("/api/creators/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() + }; + + await dbContext.AddAsync(creator, ct); + } + + creator.StripeAccountId = req.StripeAccountId; + creator.PortraitUrl = HttpContext.User.GetPortraitUrl(); + + await dbContext.SaveChangesAsync(ct); + + await SendOkAsync(creator.Id, ct); + } +}