using Hutopy.Infrastructure.Security; using Hutopy.Modules.Creators.Data; namespace Hutopy.Modules.Creators.Features; [PublicAPI] public sealed class GetCreatorProfileResponse { public Guid Id { get; set; } public Guid CreatedBy { get; set; } public DateTimeOffset CreatedAt { get; set; } public Guid? DeletedBy { get; set; } public DateTimeOffset? DeletedAt { get; set; } public bool IsDeleted { get; set; } public required string Name { get; set; } public required string Slug { get; set; } public string? Title { get; set; } public bool Verified { get; set; } public bool IsStripeAccountPresent { get; set; } public bool IsStripeDetailsSubmitted { get; set; } public bool IsStripePayoutReady { get; set; } public bool IsStripeChargesEnabled { get; set; } public required Presentation Presentation { get; set; } public required Socials Socials { get; set; } } [PublicAPI] public class GetCreatorProfileHandler( CreatorsDbContext context) : EndpointWithoutRequest { public override void Configure() { Get("/api/creators/profile"); Options(o => o.WithTags("Creators")); } public override async Task HandleAsync( CancellationToken ct) { GetCreatorProfileResponse? creator = await context .Creators .IgnoreQueryFilters() .Where(c => c.Id == HttpContext.User.GetUserId()) .AsNoTracking() .Select(c => new GetCreatorProfileResponse { Id = c.Id, CreatedBy = c.CreatedBy, CreatedAt = c.CreatedAt, DeletedBy = c.DeletedBy, DeletedAt = c.DeletedAt, IsDeleted = c.IsDeleted, Name = c.Name, Slug = c.Slug, Title = c.Title, Verified = c.Verified, IsStripeAccountPresent = !string.IsNullOrWhiteSpace(c.StripeAccountId), IsStripeDetailsSubmitted = c.IsStripeDetailsSubmitted, IsStripeChargesEnabled = c.IsStripeChargesEnabled, IsStripePayoutReady = c.IsStripePayoutReady, Presentation = c.Presentation, Socials = c.Socials }) .SingleOrDefaultAsync(ct); if (creator is null) { await SendNotFoundAsync(ct); } else { await SendAsync(creator, cancellation: ct); } } }