77 lines
2.5 KiB
C#
77 lines
2.5 KiB
C#
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<GetCreatorProfileResponse>
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
}
|