Files
social-media/src/Web/Features/Memberships/Handlers/ChangeStripeId.cs

56 lines
1.5 KiB
C#

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<ChangeStripeIdRequest>
{
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);
}
}